根据sudoers手册:
It is generally not effective to "subtract" commands from ALL using the
’!’ operator. A user can trivially circumvent this by copying the
desired command to a different name and then executing that. For
example:
bill ALL = ALL, !SU, !SHELLS
Doesn’t really prevent bill from running the commands listed in SU or
SHELLS since he can simply copy those commands to a different name, or
use a shell escape from an editor or other program. Therefore, these
kind of restrictions should be considered advisory at best (and
reinforced by policy).
这就是为什么您的sudoers政策不起作用的原因。
如果要阻止用户获得root权限并更改其密码,请尝试以下过程:
假设您的sudoers包含以下指令:
root ALL=(ALL:ALL) ALL
%sudo ALL=(ALL:ALL) ALL
假设您的用户名是foo
,他的组是foo
和sudo
。groups
命令输出为:
foo sudo
foo
从sudo
组中删除用户:gpasswd -d foo sudo
此后,用户foo
无法使用sudo运行任何命令。
编辑sudoers文件。使用此命令:
sudo visudo -f /etc/sudoers.d/foo
定义用户foo
权限,例如:
foo ALL=/usr/bin, !/usr/bin/passwd, !/usr/bin/su
这意味着用户foo
可以在目录中运行/usr/bin/
除passwd
and su
命令以外的任何命令。注意:如果用户foo
想更改密码,可以运行passwd
不带的命令sudo
。
用户foo
权限的另一个示例:
foo ALL =/usr/bin, /usr/bin/passwd [A-Za-z]*, !/usr/bin/passwd root
这意味着用户foo
可以在目录中运行任何命令,/usr/bin/
并可以更改任何人的密码,但所有计算机上的root用户除外。
您可以通过定义Cmnd_Aliases
和创建“权限级别” 来定义命令组。您可以在sudoers manual的 EXAMPLE部分中找到有用的示例,这是有关如何使用sudoers 的有用链接。