第 10 章 管理 sudo 访问
系统管理员可以授予 sudo
访问权限,以允许非 root 用户执行通常为 root 用户保留的管理命令。因此,非 root 用户可以在不登录 root 用户帐户的情况下执行此类命令。
10.1. sudoers 中的用户授权
/etc/sudoers
文件指定哪些用户可以使用 sudo
命令来执行其他命令。规则可应用到单个用户和用户组。您还可以使用别名轻松地为主机组、命令甚至用户定义规则。默认别名定义在 /etc/sudoers
文件的第一部分中。
当用户输入带有 sudo
的命令时(因为用户没有授权),系统会将一条包含字符串 <username> : user NOT in sudoers
的消息记录到日志中。
默认的 /etc/sudoers
文件提供授权信息和示例。您可以通过取消相应行的注释来激活特定的示例规则。带有用户授权的部分标有以下介绍:
## Next comes the main part: which users can run what software on ## which machines (the sudoers file can be shared between multiple ## systems).
您可以使用以下格式创建新的 sudoers
授权,并修改现有的授权:
<username> <hostname.example.com>=(<run_as_user>:<run_as_group>) <path/to/command>
其中:
-
<username>
是输入命令的用户,如user1
。如果值以%
开头,则它会定义一个组,例如%group1
。 -
<hostname.example.com>
是应用该规则的主机的名称。 -
部分
(<run_as_user>:<run_as_group>)
定义执行命令的用户或组。如果省略这部分,<username>
可以以 root 用户身份执行命令。 -
<path/to/command>
是该命令的完整的绝对路径。您还可以通过在命令路径后面添加这些选项,将用户限制为仅使用特定的选项和参数执行命令。如果没有指定任何选项,用户可以使用带有所有选项的命令。
您可以通过将任何这些变量替换为 ALL
,来将规则应用到所有用户、主机或命令。
使用过于宽松的规则(如 ALL=(ALL) ALL
),所有用户可以以所有主机上的所有用户身份运行所有命令。这带来了严重的安全风险。
您可以使用 !
运算符来指定参数的反。例如,!root
指定除 root 以外的所有用户。请注意,允许特定用户、组和命令比禁止特定用户、组和命令更安全。这是因为允许规则也会阻止新的未授权的用户或组。
避免对命令使用负规则,因为用户可以使用 alias
命令重命名命令来克服此类规则。
系统会从头到尾读取 /etc/sudoers
文件。因此,如果文件中包含用户的多个条目,则按顺序应用条目。如果值冲突,系统将使用最后匹配的项,即使它不是最具体的匹配。
要在系统更新期间保留规则,并轻松地修复错误,请在 /etc/sudoers.d/
目录中创建新文件,而不是直接在 /etc/sudoers
文件中输入规则。当系统在 /etc/sudoers
文件中达到以下行时,会读取 /etc/sudoers.d
目录中的文件:
#includedir /etc/sudoers.d
请注意,此行开头的数字符号(#
)是语法的一部分,并不意味着该行是一个注释行。该目录中文件的名称不得包含句点,不得以波形符(~
)结尾。
其他资源
-
您系统上的
sudo (8)
和sudoers (5)
手册页