Linux
沒有root權限的gnome如何重啟?
我正在閱讀這本書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”)提供服務。
具有非遠端會話的使用者可以發出與電源相關的命令
systemd
。polkit
您可以列出所有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