我想禁止用户编辑sudoers
文件,因此我在 sudoers 文件中添加了一行:
Cmnd_Alias BLOCK = !/usr/sbin/visudo, !/bin/nano /etc/sudoers
如果用户尝试进行如下编辑,它将被阻止:
sudo nano /etc/sudoers
但当他进入等时:
cd /etc
sudo nano sudoers
... 他可以使用nano
和编辑sudoers
。
我该如何解决这个问题?谢谢
答案1
从我的角度来看...如果你不希望用户改变事情sudo
,sudo
你首先就不应该授予访问权限。这和你不向尼日利亚王子骗子提供你的银行账户信息的原因是一样的——如果他们有你的信息(或访问权限),他们所拥有的访问权限将超出你可能授予个人的范围。
sudo
以允许他们使用任何命令的方式授予访问权限除了有些命令(“黑名单”命令)实施起来要困难得多,事实上sudo
和sudoers
机制没有真正建成以安全的方式进行此类黑名单操作。
相反,sudo
如果只给这个假设的用户授予一些命令sudo
(并不是所有命令),通过具体指定它们可以在线上执行的内容sudoers
,是真正执行此类限制的正确方法sudo
(“将命令列入白名单而不是将其列入黑名单”
话虽如此,如果你真的想走这条路,那么......
在第二种方法中,他没有使用完整路径。您在此处启动的命令块在以下情况下拒绝访问:命令和参数是完全匹配。遗憾的是,这些实用程序很愚蠢,实际上并没有将传入的参数等同于完全合格的磁盘路径,并且需要与正在执行的内容完全匹配。
添加到列表中,以便获得以下内容:
Cmnd_Alias BLOCK = !/usr/sbin/visudo, !/bin/nano /etc/sudoers, !/bin/nano sudoers
...然而有上万亿种方法可以规避这个问题,所以你真的应该白名单访问命令而不是黑名单sudo
用户不应该使用的命令。
答案2
我通常使用以下内容:
username ALL=ALL, !/usr/bin/su *,!/usr/bin/sudo *, !/usr/sbin/visudo, !/usr/bin/* *sudoers
不确定我是否遗漏了什么。当然不是万无一失的,但这是我目前能想到的最好的办法 :)