6.2. 使用 sudo 实用程序配置管理访问权限
sudo
命令提供了另一种授予用户管理访问权限的方法。当受信任的用户在管理命令之前加上 sudo
时,系统会提示他们输入 自己的 密码。然后,当它们经过身份验证并假定允许 命令时,将像 root
用户一样执行管理命令。
sudo
命令的基本格式如下:
sudo
command
在上例中,命令 将被替换为通常保留给 root
用户的命令,如 mount
。
sudo
命令具有高度的灵活性。例如,只有 /etc/sudoers
配置文件中列出的用户才能使用 sudo
命令,命令则在 用户的 shell 中执行,而不是 root
shell。这意味着可以完全禁用 root
shell,如 Red Hat Enterprise Linux 7 安全指南 中所示。
使用 sudo
命令的每个成功身份验证都会记录到文件 /var/log/messages
,而与签发者的用户名一同发布的命令将记录到 /var/log/secure
文件。如果需要额外的日志记录,请使用 pam_tty_audit
模块为指定用户启用 TTY 审核,方法是在 /etc/pam.d/system-auth
文件中添加以下行:
session required pam_tty_audit.so disable=pattern enable=pattern
其中,pattern 代表通过可选方式使用 glob 的以逗号分隔的用户列表。例如,以下配置将为 root
用户启用 TTY 审核,并为所有其他用户禁用它:
session required pam_tty_audit.so disable=* enable=root
为 TTY 审计记录配置 pam_tty_audit
PAM 模块,仅用于 TTY 输入。这意味着,当被审计用户登录时,pam_tty_audit
会记录用户在 /var/log/audit/audit.log
文件中进行的确切击键操作。如需更多信息,请参阅 pam_tty_audit(8)手册页。
sudo
命令的另一个优点是,管理员可以允许不同的用户根据自己的需要访问特定的命令。
想要编辑 sudo
配置文件 /etc/sudoers
的管理员应使用 visudo
命令。
要授予某人完整的管理权限,请键入 visudo
并添加类似用户权限规范部分中的下面这一行:
juan ALL=(ALL) ALL
此示例表示用户 juan
可以从任何主机使用 sudo
并执行任何命令。
以下示例演示了配置 sudo
时可能的粒度:
%users localhost=/usr/sbin/shutdown -h now
这个示例表示,users 系统组
的任何成员都可以发出 /sbin/shutdown -h 命令,只要它
从控制台发布。
sudoers
的 man page 包含此文件的选项的详细列表。
您还可以使用 /etc/sudoers
文件中的 NOPASSWD
选项配置不需要提供任何密码的 sudo 用户:
user_name ALL=(ALL) NOPASSWD: ALL
但是,即使对于此类用户,sudo 也 运行
可插拔验证模块(PAM)帐户管理模块,这可以检查 PAM 模块在身份验证阶段之外实施的限制。这样可确保 PAM 模块正常工作。例如,如果 pam_time
模块,基于时间的帐户限制不会失败。
始终将 sudo
包含在所有基于 PAM 的访问控制规则中允许的服务列表中。否则,用户在尝试访问 sudo
时将收到"权限被拒绝"错误消息,但根据当前的访问控制规则禁止访问。
如需更多信息,请参阅在修补 Red Hat Enterprise Linux 7.6 后,Edo 给出了 permission denied 错误。
使用 sudo
命令时,请记住几个潜在的风险:您可以按照上述所述,使用 visudo
编辑 /etc/sudoers
配置文件来避免它们。将 /etc/sudoers
文件保留为默认状态可授予 wheel 组中的每个用户
无限制 root
访问权限。
默认情况下,s
udo
将密码存储为五分钟的超时时间。在此期间内,任何后续使用 命令都不会提示用户输入密码。如果用户在仍登录时无人值守和解锁其工作站,则攻击者可能会利用此功能。可以通过在/etc/sudoers
文件中添加以下行来更改此行为:Defaults timestamp_timeout=value
其中 value 是所需的超时长度(以分钟为单位)。将 值设 为 0 会导致
sudo
每次都需要密码。如果帐户泄露,攻击者可以使用
sudo
打开具有管理权限的新 shell:sudo /bin/bash
以
root
用户身份以这种或类似的方式打开新 shell 可让攻击者在理论上无限制的时间内管理访问,绕过/etc/sudoers
文件中指定的超时时间,并且无需攻击者再次为sudo
输入密码,直到新打开的会话关闭为止。