[英]Using PolicyKit to allow non-root users to start and stop a service
我需要允許非根用戶啟動和停止服務。 建議我使用PolicyKit
而不是我熟悉的sudoers.d
。
由於我沒有使用PolicyKit
的經驗,我想我會嘗試並創建一個規則來允許非 root 用戶啟動和停止 Docker 服務。 我創建了一個文件/etc/polkit-1/rules.d/10-docker.rules
包含:
polkit.addRule(function(action, subject) {
if (action.id == "org.freedesktop.systemd1.manage-units" &&
action.lookup("unit") == "docker.service")
{
return polkit.Result.YES;
}
})
但是,每當我執行systemctl start|stop|restart docker.service
時,我都會收到輸入密碼的提示。 我錯過了什么?
另外,我想限制非 root 用戶控制特定組中的此服務,例如blah
。 我如何將其納入我的規則?
我的目標操作系統是 RHEL 7.7。
在 CentOS7 上, action
無權訪問unit
信息。 這是在后來的 systemd 版本 v226 中引入的。
https://github.com/systemd/systemd/commit/88ced61bf9673407f4b15bf51b1b408fd78c149d
我也被這個擊中了。 您將需要允許用戶管理所有單元或 go 回到在 sudoers 上擁有 shell 腳本的石器時代。
此外,我想限制非 root 用戶控制特定組中的此服務,例如 blah。 如何將其納入我的規則?
使用subject.isInGroup("group")
。
看:
/etc/polkit-1/rules.d/10-docker.rules
polkit.addRule(function(action, subject) {
if (action.id == "org.freedesktop.systemd1.manage-units" &&
action.lookup("unit") == "docker.service") &&
subject.isInGroup("mygroup"))
{
return polkit.Result.YES;
}
})
您還需要運行visudo
並添加這些行
%mygroup ALL= NOPASSWD: /usr/bin/systemctl restart docker.service
%mygroup ALL= NOPASSWD: /usr/bin/systemctl stop docker.service
%mygroup ALL= NOPASSWD: /usr/bin/systemctl start docker.service
%mygroup ALL= NOPASSWD: /usr/bin/systemctl status docker.servicee
教程: https://keshavarzreza.ir/create-linux-systemd-service-runable-for-non-root-users/
正如 Simão 所指出的,RHEL 7 上的 systemd 沒有向 polkit 提供單元信息。解決該問題的一種方法是使用 pkexec 包裝對 systemctl 的調用。 您需要一個用於特定服務的包裝腳本,然后將規則應用於 pkexec。 用戶將執行命令
pkexec /path/to/script
polkit 規則看起來像這樣:
polkit.addRule(
function(action,subject)
{
if ( (action.id == "org.freedesktop.policykit.exec") &&
(action.lookup("user") == "root") &&
(action.lookup("program") == "/path/to/script") &&
(subject.isInGroup("someGroup") ) )
return polkit.Result.YES;
return polkit.Result.NOT_HANDLED;
}
);
在實際意義上,這只是使用 polkit 框架重新創建 sudo 和腳本。 這是否比使用 sudo “更好”是我將留給其他人的價值判斷。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.