如何使/ sbin / shutdown,/ sbin / reboot等在16.04中再次要求sudo?


18

无论出于何种原因,我们都不再需要root用户(或使用sudo)来运行/sbin/shutdown/sbin/reboot等等。

这似乎是因为这些可执行文件现在是符号链接,/bin/systemctl可以以普通用户身份处理所有可执行文件。

不过,如果我想要什么shutdown,并reboot再次要求根认证?我该如何实现?


3
我猜想polkit规则。修改askubuntu.com/a/570969/158442按需要(用pkaction | grep login1利息的其他规则)
穆鲁

3
(要求管理员特权的规则示例:askubuntu.com/a/744094/158442
muru,

1
如果您是唯一登录的人,这不是唯一的吗。如果系统中还有其他人登录,您将被要求输入root密码。
ognjen

那可能不是您期望的答案,但是另一个管理员用户编辑了您的“ / etc / sudoers”可能会导致类似的行为。如果这是导致您的问题的原因,则可以通过键入sudo visudo并检查是否有指向这些可执行文件的路径来更改它。
Damien

Answers:


5

Systemd确实处理shutdownreboot和其他命令,并且分配的默认特权是允许的。要更改此设置,您需要创建一个Polkit规则。创建一个.pkla文件/etc/polkit-1/localauthority/50-local.d(比如说confirm-shutdown.pkla)包含:

[Confirm shutdown]
Identity=unix-user:*
Action=org.freedesktop.login1.*
ResultActive=auth_admin_keep

了各种关闭,重新启动等命令,在Polkit术语,在操作org.freedesktop.login1中,例如,org.freedesktop.login1.power-offorg.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>

请注意,它允许活动用户关闭电源,重新启动等。


0

您可以使用chmod命令。

  • 如果只想授予对root用户的访问权限,则可以编写:

    chmod 700 directory/to/the/file
    
  • 如果您想将权限分配给根和sudo组,则可以编写:

    chmod 770 directory/to/the/file
    
  • 如果要将文件组从sudo更改为另一个(例如用户或管理员),则需要输入:

    chown owner:group directory/to/the/file
    
  • 如果要还原,请运行:

    chown root:sudo filedirectory 
    

注意:您可能必须使用sudo这些命令,或者已经登录了root帐户


请注意,尝试更改链接的权限将更改目标的权限(在这种情况下/bin/systemctl),因此运行chmod / sbin / shutdown将影响所有指向的链接,/bin/systemctl因为bin/systemctl要更改的权限已通过命令$ ll /bin/systemctl 确认-rwx ------ 1个root 659848 Jan 18 16:04 / bin / systemctl *
Elder Geek

如果您需要将其更改回默认权限是-rwxr-xr-x 1 root root 659848 Jan 18 16:04 /bin/systemctl
Elder Geek

0

由于在Linux系统上更改符号链接的权限不会更改链接的权限,而是会更改指向的文件(至少在Ubuntu中)。我认为完成此操作的最安全方法是删除链接,并使用所需的umask重新创建它以获得所需的结果。

另一个相关的帖子可以在这里找到


-1

您可以创建一个脚本来检查用户是否以root权限运行它。
然后它将运行systemctl命令或返回错误。

#!/ bin / bash
如果[“ $(whoami)”!=“ root”]; 然后
    回声“对不起,您不是root。”
    1号出口
其他
    (systemctl shutdown命令)
科幻

资源


4
如何阻止非root用户绕过此脚本?
罗比·巴萨克

-1

尝试在终端中更改其权限。您可以将其设置为只能由特定组(例如wheel或admin)执行。可悲的是(或者幸运的是)文件只能具有一个组所有权,因此chown根本无法单独工作。尝试“ sudo chown root:wheel / sbin / shutdown”,然后尝试“ sudo chmod g + x / sbin / shutdown”。这将使该文件只能由root和admins(管理员)执行,并且将需要sudoers输入密码。


2
“车轮”组属于Arch Linux和其他发行版,但绝对不在Ubuntu btw上。
字节指挥官

2
这是无效的。用户可以从其他地方下载systemctl二进制文件,然后运行它。
罗比·巴萨克

@Robie,您可以使用任何解决方案来做到这一点。您可以按住电源按钮。我的解决方案可以满足他的要求。
chevydog
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.