第 12 章 管理 sudo 访问
系统管理员可以授予 sudo
访问权限,以允许非 root 用户执行通常为 root 用户保留的管理命令。因此,非 root 用户可以执行此类命令,而无需登录到 root 用户帐户。
12.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)
手册页