K.C*_*hen 10 linux permissions
假设您安装了一个桌面环境,比如 ubuntu 或 debian。作为普通用户,您可以通过单击系统菜单上某处的按钮来关闭系统。您无需切换到超级用户即可完成此操作。
但是在同一个桌面环境中,如果我以普通用户的身份打开一个终端(比如 gnome-terminal),然后输入
shutdown -h now
Run Code Online (Sandbox Code Playgroud)
我会被提示
shutdown: need to be root
Run Code Online (Sandbox Code Playgroud)
关闭的唯一方法是在命令前加上 sudo。
谁能解释为什么会这样?
谢谢 KC
K.Chen 提出的问题是:为什么我从 CLI 执行时需要 sudo 权限,而当我从 GUI 执行时我不需要这样的权限。
答案的第一部分是设计桌面环境的人,如 Gnome、KDE、Xfce、Mate、Cinnamon ……试图简化用户的工作,他们配置关闭和重新启动而不需要 sudo 凭据。顺便说一句,这意味着必须有一个不涉及程序关闭的关闭序列,这确实需要 sudo 权限(无法绕过)。
我不知道每个 DE 是如何做的,但我知道有一种温和的方法可以关闭或重新启动/关闭/休眠您的系统,它不需要 root 权限。您可以在 Arch Linux 论坛帖子 中找到原始帖子。本质上,它相当于发出以下命令:
停止
#!/bin/bash
dbus-send --system --print-reply --dest="org.freedesktop.ConsoleKit"/org/freedesktop/ConsoleKit/Manager org.freedesktop.ConsoleKit.Manager.Stop
Run Code Online (Sandbox Code Playgroud)
重启
#!/bin/bash
dbus-send --system --print-reply --dest="org.freedesktop.ConsoleKit" /org/freedesktop/ConsoleKit/Manager org.freedesktop.ConsoleKit.Manager.Restart
Run Code Online (Sandbox Code Playgroud)
dbus 挂起
#!/bin/bash
dbus-send --system --print-reply --dest="org.freedesktop.UPower" /org/freedesktop/UPower org.freedesktop.UPower.Suspend
Run Code Online (Sandbox Code Playgroud)
休眠
#!/bin/bash
dbus-send --system --print-reply --dest="org.freedesktop.UPower" /org/freedesktop/UPower org.freedesktop.UPower.Hibernate
Run Code Online (Sandbox Code Playgroud)
我的猜测是 GUI 按钮大致使用了这些命令。可以肯定的是,应该查看代码,但我相信这是一个安全的赌注。
这个设计决定背后的原因不是技术性的(您可以shutdown
在 GUI 中使用非特权命令或需要密码)。
在使用桌面环境时,用户应该可以物理访问机器。然后最好允许干净关闭而不是让用户按下电源按钮或拔下电源线。
使用 shell 时,用户可以是远程用户,为了避免远程关机,需要更多权限。
这些不是规则,而只是基于假设的默认值:您可以在 shell 中拥有本地用户,在桌面环境中拥有远程用户。如果您想选择默认行为,您可以相应地配置您的系统。
归档时间: |
|
查看次数: |
3680 次 |
最近记录: |