Linux

沒有root權限的gnome如何重啟?

  • September 30, 2015

我正在閱讀這本書Linux 核心開發,在第 5 章“系統呼叫實現”第 77 頁中說

例如,capable(CAP_SYS_NICE) 檢查呼叫者是否有能力修改其他程序的 nice 值。預設情況下,超級使用者擁有所有能力,而非root 使用者不擁有。例如,這裡是 reboot() 系統呼叫。請注意它的第一步是如何確保呼叫程序具有 CAP_SYS_REBOOT 。如果刪除了那個條件語句,任何程序都可以重新啟動系統。

但是,在我的 Debian Sid 中,我可以通過使用 gnome 或在不使用 sudo 或 su 的情況下執行 /sbin/reboot 來重新啟動我的機器。這怎麼可能?

也許用 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

這是通過一個名為的授權管理器完成的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
Active=yes

引用自:https://unix.stackexchange.com/questions/216818