介绍
在本指南中,您将了解 root 访问权限、 sudo 命令,怎样使用运行命令 sudo,以及之间的差异 sudo 访问和root。 您还可以在下面找到说明怎样创建 sudo 流行操作系统的用户。
什么是根?
root
指类 Unix 系统(如 Linux)中的超级用户帐户。 它是用于系统管理的系统上具有最高访问权限的特权帐户。 此根/超级用户帐户的用户标识符 (UID) 为零,无论帐户名称怎样。
这 根 用户拥有整个系统的完全权限(root 权限)。 它可以做诸如修改系统核心部分、升级系统、更改系统配置以及启动、停止和重新启动所有正在运行的系统服务等操作。
当登录为 根,终端命令提示符符号从 $
至 #
. 为了 example:
$ echo 'This is a normal user shell'
# echo 'This is a root shell'
什么是须藤?
这 sudo
(superuser do) command 是一个命令行实用程序,允许用户以 root 或其他用户身份执行命令。 它提供了一种有效的方式来授予某些用户适当的权限以使用特定的系统命令或以 root 用户身份运行脚本。
虽然有点类似 su
命令, sudo
需要登录用户的密码进行身份验证,而不是目标用户的密码 su
需要。 Sudo 也不会像 su
; 而是以提升的权限运行程序或命令。
和 sudo,系统管理员可以执行以下操作:
- 授予用户或用户组以提升或 root 权限运行某些命令的能力。
- 查看使用的每个用户的用户 ID 的日志 sudo.
- 控制用户可以在主机系统上使用什么命令。
sudo 会记录所有执行的命令和参数 /var/log/auth.log
文件,可以在发生故障时进行分析。
以 Sudo 运行命令
运行命令为 sudo在命令前加上 sudo
:
$ sudo command
它将提示您输入密码,输入您的帐户密码,然后单击 ENTER:
$ sudo command
[sudo] password for user:
现在, command
将以提升的权限运行。
须藤VS。 根
最小权限原则是一种信息和计算机安全概念,它认为授予程序和用户执行任务所需的最少或最低限度的权限。
以root用户登录后,输入到终端的每一条命令都以系统最高权限运行,违反了最小权限原则。 像 rm 这样的简单命令可用于删除核心根目录或文件,而不会在意外时提示用户。 例如,如果您尝试使用以下命令删除 /etc 之类的根目录:
$ rm -rf /etc
当您以普通用户身份登录时,您将被拒绝许可。 当以 root 身份登录时,不会显示任何提示,并且整个文件夹将被删除 – 这很可能会破坏您的系统,因为运行系统所需的特殊配置文件存储在 /etc 目录中。 您也可能最终错误地格式化磁盘,并且系统不会提示您。
此缺陷还扩展到以 root 身份运行代码或应用程序; 应用程序中的一个小错误可能会删除一些系统文件,因为该应用程序是在最高权限下运行的。
Sudo 提供细粒度的访问控制。 它仅向需要它的特定程序授予提升的权限。 您知道哪个程序以提升的权限运行,而不是使用 root shell(以 root 权限运行每个命令)。 sudo 也可以配置为以另一个用户身份运行命令,指定允许哪些用户和组运行命令使用 sudo,或通过编辑您的 sudoers 文件来设置以 root 权限运行程序的超时。
因此,不建议使用 root shell 运行命令,因为您破坏系统的机会要高得多。 如果您需要更高或 root 权限来运行命令,请使用 sudo 确保只有该命令以 root 权限运行。 有关更多信息,请查看 sudo 手册页.
在 AlmaLinux、CentOS、 FedoraRocky Linux 和 VzLinux
本部分适用于:
- AlmaLinux
- CentOS 7 及更高版本
- Fedora 31 岁及以后
- 洛基 Linux
- VzLinux
程序:
创建一个新的用户帐户
adduser
命令。# adduser example_user
为新用户设置一个强密码
passwd
.# passwd example_user Changing password for user example_user. New password: Retype new password: passwd: all authentication tokens updated successfully.
将新用户添加到轮组
usermod
.# usermod -aG wheel example_user
检查 sudoers 文件
visudo
.# visudo
寻找轮组。 如果该行被禁用,请删除注释。 当您准备好保存文件时,它应该看起来像这样。
## Allows people in group wheel to run all commands %wheel ALL=(ALL) ALL
Save 并退出 vi。 键入 ESC,然后:WQ,然后 ENTER。
笔记: 从不编辑
/etc/sudoers
直接,总是使用visudo
. visudo 实用程序在将您的编辑提交到文件之前执行语法检查,因为格式错误的 sudoers 文件可能会破坏您的系统。 如果你犯了一个错误,你会在退出 visudo 时看到这个。visudo: >>> /etc/sudoers: syntax error near line 64 <<< What now? Options are: (e)dit sudoers file again e(x)it without saving changes to sudoers file (Q)uit and save changes to sudoers file (DANGER!)
切换到新用户。
# su - example_user
验证您是新用户
whoami
然后测试 sudo 访问sudo whoami
应该返回 根.$ whoami example_user $ sudo whoami [sudo] password for example_user: root
在 Arch Linux 上创建一个 Sudo 用户
本节适用于任何最新版本的 Arch Linux。
程序:
安装
sudo
,因为它不包含在基本安装中。 如果您有一段时间没有进行更新,请记住先更新您的本地存储库数据库。# pacman --sync sudo
创建一个新的用户帐户
useradd
.# useradd --create-home example_user
为新用户设置一个强密码
passwd
.# passwd example_user
将新用户添加到轮组
usermod
.# usermod --append --groups wheel example_user
编辑 sudoers 文件
visudo
.# visudo
在文件底部的“用户权限规范”部分中查找轮组。 从行的开头删除注释,所以它看起来像这样:
## Uncomment to allow members of group wheel to execute any command %wheel ALL=(ALL) ALL
Save 并退出 visudo。 输入 ESC,然后输入 :WQ(小写),然后输入。
笔记: 从不编辑
/etc/sudoers
直接,总是使用visudo
. visudo 实用程序在将您的编辑提交到文件之前执行语法检查,因为格式错误的 sudoers 文件可能会破坏您的系统。 如果你犯了一个错误,你会在退出 visudo 时看到这个。visudo: >>> /etc/sudoers: syntax error near line 64 <<< What now? Options are: (e)dit sudoers file again e(x)it without saving changes to sudoers file (Q)uit and save changes to sudoers file (DANGER!)
切换到新用户。
# su - example_user
验证您是新用户
whoami
,然后测试访问sudo whoami
应该返回 根.$ whoami example_user $ sudo whoami We trust you have received the usual lecture from the local System Administrator. It usually boils down to these three things: #1) Respect the privacy of others. #2) Think before you type. #3) With great power comes great responsibility. [sudo] password for example_user: root
在 Debian 和 Ubuntu 上创建 Sudo 用户
本部分适用于:
- Debian 9“Stretch”及更高版本
- Ubuntu 16.04 及更高版本
程序:
安装 sudo. 有些安装不附带 sudo 安装。 如果您没有,请安装 sudo 与恰当。
# apt install sudo
创建一个新的用户帐户
adduser
命令。 为新用户使用强密码。 您可以输入用户信息的值,或按 ENTER 将这些字段留空。# adduser example_user Adding user `example_user' ... Adding new group `example_user' (1001) ... Adding new user `example_user' (1001) with group `example_user' ... Creating home directory `/home/example_user' ... Copying files from `/etc/skel' ... New password: Retype new password: passwd: password updated successfully Changing the user information for example_user Enter the new value, or press ENTER for the default Full Name []: Example User Room Number []: Work Phone []: Home Phone []: Other []: Is the information correct? [Y/n] y
将新用户添加到 sudo 团体。
# adduser example_user sudo
通过切换到新用户进行测试。
# su - example_user
验证您是新用户
whoami
然后测试 sudo 访问sudo whoami
应该返回 根.$ whoami example_user $ sudo whoami [sudo] password for example_user: root
在 FreeBSD 上创建一个 Sudo 用户
本节适用于 FreeBSD 11 及更高版本。
程序:
安装
sudo
来自 端口集合 如果它安装在您的系统上。 安装 sudo 从港口:# cd /usr/ports/security/sudo/ # make install clean
您还可以安装二进制文件
sudo
使用 pkg 打包:# pkg install sudo
创建一个新的用户帐户以用于 sudo:
# adduser
回答对话框中的问题以创建用户。 我们将使用 示例用户 在本指南中。
将用户添加到 车轮 组,限制谁可以使用
su
成为根。# pw group mod wheel -m example_user
编辑 sudoers 文件
visudo
.# visudo
寻找轮组。 如果该行被禁用,请删除注释。 当您准备好保存文件时,它应该看起来像这样。
## Allows people in group wheel to run all commands %wheel ALL=(ALL) ALL
Save 并退出 vi。 键入 ESC,然后:WQ,然后 ENTER。
笔记: 从不编辑
/etc/sudoers
直接,总是使用visudo
. visudo 实用程序在将您的编辑提交到文件之前执行语法检查,因为格式错误的 sudoers 文件可能会破坏您的系统。 如果你犯了一个错误,你会在退出 visudo 时看到这个。visudo: >>> /etc/sudoers: syntax error near line 64 <<< What now? Options are: (e)dit sudoers file again e(x)it without saving changes to sudoers file (Q)uit and save changes to sudoers file (DANGER!)
切换到新用户。
# su - example_user
验证您是新用户
whoami
然后测试 sudo 访问sudo whoami
,它应该返回根。$ whoami example_user $ sudo whoami [sudo] password for example_user: root
在 OpenBSD 上创建 Sudo 用户
本节适用于 OpenBSD 6.6 及更高版本。
如果您更喜欢使用,请参阅 OpenBSD 上的 doas 简介 doas
代替 sudo
.
安装二进制文件
sudo
包裹。 除非您知道为什么需要另一个软件包,否则请选择选项 1。# pkg_add sudo quirks-3.187 signed on 2020-05-19T14:41:48Z Ambiguous: choose package for sudo a 0: <None> 1: sudo-1.8.31 2: sudo-1.8.31-gettext 3: sudo-1.8.31-gettext-ldap Your choice: 1 sudo-1.8.31: ok
创建一个新的用户帐户以用于 sudo,并设置密码。
# useradd -m example_user # passwd example_user Changing password for example_user. New password: Retype new password:
将用户添加到 车轮 组,限制谁可以使用
su
成为根。# user mod -G wheel example_user
检查 sudoers 文件
visudo
.# visudo
寻找轮组。 如果该行被禁用,请删除注释。 当您准备好保存文件时,它应该看起来像这样。
# Uncomment to allow people in group wheel to run all commands # and set environment variables. %wheel ALL=(ALL) SETENV: ALL
Save 并退出 vi。 键入 ESC,然后:WQ,然后 ENTER。
笔记: 从不编辑
/etc/sudoers
直接,总是使用visudo
. visudo 实用程序在将您的编辑提交到文件之前执行语法检查,因为格式错误的 sudoers 文件可能会破坏您的系统。 如果你犯了一个错误,你会在退出 visudo 时看到这个。visudo: >>> /etc/sudoers: syntax error near line 64 <<< What now? Options are: (e)dit sudoers file again e(x)it without saving changes to sudoers file (Q)uit and save changes to sudoers file (DANGER!)
切换到新用户。
# su - example_user
验证您是新用户
whoami
然后测试 sudo 访问sudo whoami
,它应该返回根。$ whoami example_user
$ sudo 我是谁
[sudo] example_user 的密码:root
更多关于 sudoers
文件
sudo 使用默认值 sudoers
安全策略并保留一个特殊的配置文件 /etc/sudoers
. 该文件可用于控制访问权限和密码提示超时。
注意:您必须具有提升的权限才能查看 sudoers 文件
打开 /etc/sudoers
文件; 它应该是这样的:
# This file MUST be edited with the 'visudo' command as root.
#
# Please consider adding local content in /etc/sudoers.d/ instead of
# directly modifying this file.
#
# See the man page for details on how to write a sudoers file.
#
Defaults env_reset
Defaults mail_badpass
Defaults secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/
sbin:/bin"
# Host alias specification
# User alias specification
# Cmnd alias specification
# User privilege specification
root ALL=(ALL:ALL) ALL
# Allow members of group sudo to execute any command
%sudo ALL=(ALL:ALL) ALL
# See sudoers(5) for more information on "@include" directives:
@includedir /etc/sudoers.d
该行:
root ALL=(ALL:ALL)ALL
意味着 root 用户拥有无限的权限并且能够在系统上运行任何命令。
%sudo ALL=(ALL:ALL)ALL
允许组的所有成员 sudo 执行任何命令。
笔记: sudoers 文件中的 ‘%’ 代表一个组
从第一行可以看出 /etc/sudoers
文件:
# This file MUST be edited with the 'visudo' command as root
不要试图编辑 sudoers 直接存档。 使用 visudo
具有root权限的命令。
注:本教程在Vultr VPS上测试通过,如需部署请前往Vultr.com