我们有操作系统 ubuntu 18.04。有 2 个用户:user1、user2。user1 是管理帐户,并且是 sudo 组的成员:
uid=1010(user1) gid=1010(user1) groups=1010(user1),27(sudo),110(lxd)
。user2 是普通用户uid=1000(user2) gid=1000(user2) groups=1000(user2)
。现在,在 /etc/sudoers 文件中,我有一个 sudo 组的默认记录:
# Allow members of group sudo to execute any command
%sudo ALL=(ALL:ALL) ALL
以及允许使用 user2 的管理(root)权限执行的特殊命令:
Cmnd_Alias CMD_RELOAD_PHP_FPM = /bin/systemctl reload php7.0-fpm, /bin/systemctl reload php7.2-fpm
user2 ALL=(root:root) NOPASSWD: CMD_RELOAD_PHP_FPM
在这一步一切都很好 user2 可以在不输入密码的情况下执行 Cmnd_Alias 中指定的所有内容,因此可以按预期工作。
但是,当 user2 尝试执行他不允许执行的操作时,他会提示输入、注意、user1
密码。不是root
,不是他自己的user2
,而是user1
密码,而不是默默地或信息性地否认这种行为:
user2@someserver:~$ /bin/systemctl restart <someservice>
==== AUTHENTICATING FOR org.freedesktop.systemd1.manage-units ===
Authentication is required to restart 'someservice.service'.
Authenticating as: user1
Password:
user1
是 sudo 组的唯一成员。
grep 'sudo' /etc/group
sudo:x:27:user1
grep 'sudo' /etc/gshadow
sudo:*::user1
如果user1
从sudo
组中删除并user2
尝试执行相同的命令,则要求他输入root
密码。
我怎样才能改变这种行为,所以user2
尝试会被拒绝而不是要求他输入密码?
我没有足够的知识
polkit
,但这似乎是导致这种行为的原因。负责的线路是:
在
/etc/polkit-1/localauthority.conf.d/51-ubuntu-admin.conf
文件里面注释该
AdminIdentities=...
行并重新启动 polkit 守护程序会返回默认行为,其中root
服务重新启动需要密码。不确定它是否安全。可能一些社区成员可以更好地解释。systemd
此外,如果非特权用户尝试使用 systemd 服务执行某些操作,我似乎找到了描述默认操作的地方。它在文件里面:
/usr/share/polkit-1/actions/org.freedesktop.systemd1.policy
如果我设置这样的值:
我开始收到
Access denied
有关尝试以非特权用户身份重新启动服务的消息。