我不需要管理员来更改我的 root 密码。我不希望任何 sudo 用户执行此命令:
sudo passwd $root
我已在 sudoers 文件中尝试使用以下命令:
%sudo ALL=(ALL) ALL, !/usr/bin/passwd $root
我该如何阻止它?
答案1
根据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
和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 手册,这是一个有用的关联关于如何使用 sudoers。
答案2
通过以下方式添加命令别名visudo
:
Cmnd_Alias PASSWD=/usr/bin/passwd
Cmnd_Alias SU=/bin/su
通过以下方式添加限制visudo
:
%nopasswdgroup ALL = ALL, !PASSWD, !SU
将用户添加到名为 nopasswdgroup 的组:
usermod -aG nopasswdgroup nopasswduser