為什麼 hostnamectl 不需要密碼來更改主機名?
似乎用 systemd 更改主機名的新方法是:
hostnamectl set-hostname NEWNAME
但是,當以具有管理員權限的使用者身份登錄時(不確定哪個組計數),這不需要密碼。對於非管理員使用者,它會彈出一個對話框,要求其中一位特權使用者輸入密碼。
我認為“shutdown -h now”甚至適用於非管理員使用者。
我假設這些都是與 systemd 相關的新命令。
他們如何檢查送出命令的使用者是否有權執行它們?我怎樣才能讓他們要求輸入密碼或要求 sudo?
在
systemd
相關實用程序中,可能需要特權訪問的操作通過 PolicyKit 進行路由。pkaction
不帶任何參數執行以查看 PolicyKit 處理的所有可能操作的列表。要查看特定操作的目前策略,請使用pkaction --verbose --action-id <action identifier
。例如,更改主機名:# pkaction | grep host org.freedesktop.hostname1.set-hostname org.freedesktop.hostname1.set-machine-info org.freedesktop.hostname1.set-static-hostname # pkaction --verbose --action-id org.freedesktop.hostname1.set-hostname org.freedesktop.hostname1.set-hostname: description: Set host name message: Authentication is required to set the local host name. 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: auth_admin_keep
因此,我係統上用於更改主機名的目前策略是
auth_admin_keep
- 也就是說,需要管理員的密碼,除非使用者最近成功通過了類似的檢查(就像sudo
它可以避免連續的密碼請求一樣)。誰是管理員,其密碼可以授權這些操作?在我的 Debian 9 系統上,這是由目錄中的文件決定的
/etc/polkit-1/localauthority.conf.d/
- 預設情況下,只有 root 和sudo
使用者組的成員才有資格。如果您不喜歡這個策略,您可以通過編寫一些自定義 PolicyKit 配置文件來輕鬆更改它。
PolicyKit 可以配置為對它管理的任何操作要求以下任何“安全級別”:
yes
- 使用者可以隨時做到,不問任何問題auth_self_keep
- 如果使用者最近沒有做任何需要密碼檢查的事情,請求使用者的密碼以確保它真的是他/她。如果在幾分鐘的視窗內執行了此級別的多個連續操作,則可以跳過第一個之後的檢查。auth_self
- 總是要求使用者的密碼檢查auth_admin_keep
- 需要管理員使用者的密碼。就像auth_self_keep
,在輸入一次密碼(以及可選的管理員使用者名)後,使用者可以在短暫的時間視窗內執行此級別的多個操作,而無需進一步的密碼請求auth_admin
- 始終需要密碼檢查,響應密碼檢查的使用者必須是管理使用者之一no
- 該行動被拒絕,沒有任何進一步的問題。維護結果的時間
..._keep
顯然是在 PolicyKit 上游程式碼中硬編碼的:這裡是 PolicyKit Git 的連結。/* TODO: right now the time the temporary authorization is kept is hard-coded - we * could make it a propery on the PolkitBackendInteractiveAuthority class (so * the local authority could read it from a config file) or a vfunc * (so the local authority could read it from an annotation on the action). */ expiration_seconds = 5 * 60;
目前似乎沒有任何規定可以在執行時配置此值,也沒有在設置後擴展身份驗證時間戳。
OpenSuSE 似乎已經擴展了這一點
...keep_session
並取得了...keep_always
成果。顯然,他們還重新解釋了這些...keep
動作,以表示“只要詢問過程繼續執行,就記住結果”。