我想阻止具有 sudoer 访问权限的用户使用sudo
来执行passwd
(从而更改 root 密码)。
这可能吗?如果可以,如何实现?
答案1
基本上,您不能禁止用户执行特定命令,如果他们仍然被允许执行所有其他命令 - 他们可以复制passwd
并really-not-passwd-i-promise
执行该命令。
如果你想阻止 sudoers 更改 root 的密码(或其他人的密码),你也无法阻止;/etc/shadow
只要他们拥有使用 sudo 的 root 权限,他们就可以手动编辑。
(这可以通过使用 Kerberos 或 LDAP 进行身份验证来实现 - 这样就没有人可以更改其他用户的密码 - 但仍然没有什么可以阻止 sudoers 简单地破坏配置或类似的事情。)
基本上,不要将全部sudo
权限授予您不信任的人。禁止单个命令并允许所有其他命令是行不通的。
答案2
让 root 用户无法做任何事情非常困难,但我相信您可以使用 AppArmor 来做到这一点。
问题是,如何设置才能让合法的密码更改能发生?
诀窍可能为设置一个 AppArmor 配置文件,供sudo
其所有子级继承。这不会影响以自己的身份运行 passwd 的用户(更改自己的密码),也不会影响通过 进入 root 的用户su
。
但是,我怀疑您可以通过复制、移动或重命名sudo
二进制文件来规避这种情况,因此您可能需要锁定passwd
所有根进程的写访问权限,然后只能使用实时 CD 进行更改。
当然,您还必须保护 AppArmor 本身不被修改。:)
最好的解决方案可能是仅为特定命令授予 sudo 访问权限,然后仅为不更改文件系统的命令授予 sudo 访问权限。
答案3
那这个呢:编辑/etc/sudoers如下所示的文件:
%wheel ALL=(ALL) ALL,!/usr/bin/* /etc/shadow,!/usr/bin/* /etc/sudoers\ ,!/usr/bin/* /usr/bin/su,!/usr/bin/su,!/usr/sbin/visudo
则这些文件上无法访问任何命令sudo su
。