没有root特权的gnome如何重启?


8

我正在阅读《Linux内核开发》这本书,在第5章“系统调用实现”第77页中说

例如,capable(CAP_SYS_NICE)检查调用方是否具有修改其他进程的精确值的能力。默认情况下,超级用户拥有所有功能,而非超级用户则不拥有。例如,这是reboot()系统调用。请注意,第一步是如何确保调用过程具有CAP_SYS_REBOOT。如果删除了一条条件语句,则任何进程都可以重新引导系统。

但是,在我的Debian Sid中,我可以使用gnome或通过执行/ sbin / reboot来重启机器,而无需sudo或su。这怎么可能?

也许与systemctl?

ls -l /sbin/reboot 
lrwxrwxrwx 1 root root 14 Jun 28 04:23 /sbin/reboot -> /bin/systemctl

编辑:我的用户组

[damian@xvz:~]$ groups 
damian sudo wireshark bumblebee

编辑2:systemctl权限

[damian@xvz:~]$ ls -l /bin/systemctl 
-rwxr-xr-x 1 root root 626640 Jun 28 04:23 /bin/systemctl

也许 systemctl。是什么ls -l /bin/systemctl告诉你吗?
G-Man说'恢复莫妮卡'

Answers:


12

这是通过授权管理器完成的polkit

polkit提供了一种授权API,旨在供特权程序(“ MECHANISMS”)使用,这些特权程序通常通过某种形式的进程间通信机制为非特权程序(“ SUBJECTS”)提供服务。

systemdpolkit拥有非远程会话的用户可以发出与电源有关的命令。您可以列出所有polkit已注册的动作,并获得有关任何动作的详细信息pkaction(不带任何参数调用,它将列出所有动作ID)。
在这种特殊情况下,org.freedesktop.login1.reboot如果您运行以下命令,则操作ID为:

pkaction --action-id org.freedesktop.login1.reboot --verbose

输出应该是这样的:

org.freedesktop.login1.reboot:
  description:       Reboot the system
  message:           Authentication is required for rebooting the system.
  vendor:            The systemd Project
  vendor_url:        http://www.freedesktop.org/wiki/Software/systemd
  icon:              
  implicit any:      auth_admin_keep
  implicit inactive: auth_admin_keep
  implicit active:   yes

在这里,这active: yes意味着活动会话中的用户被授权重新引导系统(有关隐式授权的详细信息,polkit页面上)。您可以使用以下方法检查会话是否处于活动状态:

loginctl show-session $ XDG_SESSION_ID --property =有效
Active=yes

1
这意味着我运行的任何程序都可以在未经我许可的情况下重新启动计算机吗?
osdamv

1
@osdamv-就像您运行的任何程序一样,rm -rf您的用户文件都可以...
don_crissti 2015年

3
@osdamv请注意,您可以运行你不使用信任所有的程序sudo --user=jimmy在用户jimmy没有具备执行该命令polkit正确的...
Bakuriu

我实际上如何运行此pkaction?
Geremia

@杰里米亚-我不明白这个问题。
don_crissti
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.