在 CentOS(以及 RHEL 系列)里,trigger 通常出现在两种场景里,授权方式完全不同。先确认你说的是哪一种:
(比如 systemctl trigger、timer 触发 service)
/usr/lib/systemd/system、/etc/systemd/system)
Failed to trigger unit: Access denied
使用 polkit(PolicyKit)
alice trigger nginx.service创建文件:
/etc/polkit-1/rules.d/10-trigger-nginx.rules
内容:
polkit.addRule(function(action, subject) {
if (action.id == "org.freedesktop.systemd1.manage-units" &&
action.lookup("unit") == "nginx.service" &&
action.lookup("verb") == "start" &&
subject.user == "alice") {
return polkit.Result.YES;
}
});
如果需要 trigger(reload / restart),把
verb改成对应动作
visudo
添加:
alice ALL=(root) NOPASSWD: /bin/systemctl start nginx.service
alice ALL=(root) NOPASSWD: /bin/systemctl restart nginx.service
使用:
sudo systemctl restart nginx
(CentOS 上常见)
GRANT TRIGGER ON dbname.* TO 'user'@'host';
查看:
SHOW GRANTS FOR 'user'@'host';
⚠ 注意:
GRANT EXECUTE ON FUNCTION fn_name() TO username;
GRANT INSERT, UPDATE ON TABLE t TO username;
请补充:
centos 7 / 8 / stream)我可以给你更精确的授权方案。