通過 nmcli 對 NetworkManager 進行更改需要 root 的正確方法
使用單個命令或添加少量 polkit 來限制所有非特權使用者只讀使用 nmcli的正確方法是什麼?
**編輯:**除了 root 之外,只允許特權 unix 組,例如“netadmins”,也會很好。然而,主要問題是阻止一般非特權使用者進行的所有非只讀更改。
背景
像我認識的大多數係統管理員一樣,對於伺服器部署,我通常禁用 NetworkManager 並執行“網路”服務,而不是使用配置文件和網路腳本來配置介面、網橋、綁定等,這很簡單、可重複、可靠且非常不可靠-black-boxy 即使是高級配置。
在 EL 8 中,不推薦使用傳統的網路配置,取而代之的是 NetworkManager。同時,EL 發行版(目前為 EL 7.5)現在發布,允許非 root 使用者創建、修改和刪除介面,並對現有配置進行幾乎無限的更改。對於充當計算頭節點的伺服器,這允許一個使用者干擾整個機器的有效操作。對於提供邊界服務的伺服器,這增加了非特權妥協的潛在嚴重性和安全隱患。
我已經閱讀了一些關於更改 NetworkManager 的 polkit 配置的文件,但其中大部分是為了解決筆記型電腦上的一些無線問題。
顯然我們可以編寫 Javascript。這不是很有趣嗎?
我認為這會起作用:
# /etc/polkit-1/rules.d/10-disable-networkmanager.rules polkit.addRule(function(action, subject) { if (action.id.indexOf("org.freedesktop.NetworkManager.") == 0) { return polkit.Result.NO; } });
https://doc.opensuse.org/documentation/leap/security/html/book.security/cha.security.policykit.html
https://wiki.archlinux.org/index.php/Polkit#Examples
https://blog.christophersmart.com/2014/01/06/policykit-javascript-rules-with-catchall/
快速
rpm -q --dump NetworkManager | grep -i pol
顯示策略文件是/usr/share/polkit-1/actions/org.freedesktop.NetworkManager.policy
. 搜尋它<allow_inactive>yes
會指出已知遠端登錄使用者允許的操作。例如在 Fedora Workstation 29 上,這些似乎是
- org.freedesktop.NetworkManager.network-control
- org.freedesktop.NetworkManager.settings.modify.own
- org.freedesktop.NetworkManager.settings.modify.system
<allow_active>
大致對應於本地登錄的使用者。<allow_any>
對應於未登錄的使用者。“登錄”是指pam_systemd
。基本上“登錄”將意味著 GUI 或 shell 登錄,但可能不是當您為 Apache 等其他東西配置 PAM 登錄時:-)。