我们有操作系统 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
以及允许以用户 2 的管理(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 中指定的所有内容而无需输入密码,因此可以按预期工作。
但是当用户 2 尝试执行某些不允许执行的操作时,系统会提示输入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
尝试就会被拒绝,而不是要求他输入密码?
答案1
我对此了解不够polkit
,但它似乎是造成这种行为的原因。
负责该任务的线路是:
AdminIdentities=unix-group:sudo;unix-group:admin
/etc/polkit-1/localauthority.conf.d/51-ubuntu-admin.conf
在文件内
注释掉该AdminIdentities=...
行并重新启动 polkit 守护进程将返回默认行为,即root
需要密码才能重新启动服务。不确定这是否安全。也许社区成员可以更好地解释。
另外,我似乎找到了systemd
描述非特权用户尝试使用 systemd 服务执行某些操作时默认操作的位置。
它位于文件内:/usr/share/polkit-1/actions/org.freedesktop.systemd1.policy
如果我设置这样的值:
<action id="org.freedesktop.systemd1.manage-units">
<description gettext-domain="systemd">Manage system services or other units</description>
<message gettext-domain="systemd">Authentication is required to manage system services or other units.</message>
<defaults>
<allow_any>no</allow_any>
<allow_inactive>no</allow_inactive>
<allow_active>no</allow_active>
</defaults>
</action>
我开始收到Access denied
尝试以非特权用户身份重新启动服务的消息。