为什么系统一直要求输入 sudo 组第一个成员的密码而不是拒绝命令执行

为什么系统一直要求输入 sudo 组第一个成员的密码而不是拒绝命令执行

我们有操作系统 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中删除并尝试执行相同的命令,那么他会被要求输入密码。sudouser2root

我怎样才能改变这种行为,这样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尝试以非特权用户身份重新启动服务的消息。

相关内容