Red Hat Training
A Red Hat training course is available for RHEL 8
第 23 章 管理 sudo 访问
系统管理员可以授予 sudo
权限,以允许非 root 用户执行通常为 root
用户保留的管理命令。因此,非 root 用户可以在不登录 root
用户帐户的情况下输入这样的命令。
23.1. sudoers 中的用户授权
/etc/sudoers
文件指定哪些用户可以使用 sudo
命令运行哪些命令。规则可应用到单个用户和用户组。您还可以使用别名简化为主机组、命令甚至用户定义的规则。默认别名定义在 /etc/sudoers
文件的第一部分中。
当用户尝试使用 sudo
特权来运行 /etc/sudoers
文件中不允许的命令时,系统会在日志中记录一条消息,其中包含 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=path/to/command
其中:
-
username 是用户或组的名称,如
user1
或%group1
。 - hostname 是应用该规则的主机的名称。
- path/to/command 是命令的完整的绝对路径。您还可以通过在命令路径后面添加这些选项,将用户限制为仅使用特定的选项和参数执行命令。如果没有指定任何选项,用户可以使用带有所有选项的命令。
您可以将任何这些变量替换为 ALL
,以将规则应用到所有用户、主机或命令。
规则过于宽松(如 ALL ALL=(ALL)ALL)
,所有用户都可以以所有主机上的所有用户的身份运行所有的命令。这可能导致安全风险。
您可以使用 !
操作符,来用否定的方式指定参数。例如,使用 !root
来指定除 root
用户以外的所有用户。请注意,使用允许列表来允许特定的用户、组和命令比使用阻止列表来禁止特定的用户、组和命令更安全。通过使用允许列表,您还可以阻止新的未授权的用户或组。
避免使用命令的负规则,因为用户可以通过使用 alias
命令重命名命令来克服此类规则。
系统会从头到尾读取 /etc/sudoers
文件。因此,如果文件中包含用户的多个条目,则按顺序应用条目。如果值冲突,系统将使用最后匹配的项,即使它不是最具体的匹配。
向 sudoers
中添加新规则的首选方法是在 /etc/sudoers.d/
目录中创建一个新文件,而不是将规则直接输入到 /etc/sudoers
文件中。这是因为此目录的内容在系统更新期间被保留了。此外,修复单独文件中的任何错误要比修复 /etc/sudoers
文件中的错误更容易。当系统在 /etc/sudoers
文件中达到以下行时,会读取 /etc/sudoers.d
目录中的文件:
#includedir /etc/sudoers.d
请注意,此行开头的数字符号 #
是语法的一部分,并不意味着该行是一个注释。该目录中文件的名称不得包含句点 .
,且不得以波形符 ~
结尾。
其他资源
-
sudo (8)
和sudoers (5)
手册页