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) 手册页