问题描述
无论出于何种原因,我们不再需要成为根用户(或使用 sudo
)来运行 /sbin/shutdown
、 /sbin/reboot
等。
这似乎是因为这些可执行文件现在是指向 /bin/systemctl
的符号链接,它可以像普通用户一样处理所有事情。
但是,如果我希望 shutdown
和 reboot
再次需要 root 身份验证怎么办?我怎样才能做到这一点?
最佳答案
Systemd 确实处理 shutdown
、 reboot
和其他命令,并且 the default privileges assigned 是允许的。要更改此设置,您需要创建一个 Polkit 规则。在 /etc/polkit-1/localauthority/50-local.d
(比如 confirm-shutdown.pkla
)中创建一个 .pkla
文件,其中包含:
[Confirm shutdown]
Identity=unix-user:*
Action=org.freedesktop.login1.*
ResultActive=auth_admin_keep
各种shutdown、reboot等命令,用Polkit术语来说就是org.freedesktop.login1
中的动作,例如org.freedesktop.login1.power-off
、org.freedesktop.login1.reboot
等。这里具体的问题是默认配置,在/usr/share/polkit-1/actions/org.freedesktop.login1.policy
中:
<action id="org.freedesktop.login1.power-off">
<description>Power off the system</description>
...
<defaults>
<allow_any>auth_admin_keep</allow_any>
<allow_inactive>auth_admin_keep</allow_inactive>
<allow_active>yes</allow_active>
</defaults>
请注意,它允许活动用户关机、重启等。