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输入密码,直到新打开的会话关闭为止。