我有一个非 root 用户,我想授予他们 sudo 权限来启动和停止(等等)systemd 服务文件,而不需要密码。
我尝试在/etc/sudoers.d/servicename
(其中[username]
和[servicename]
为实际名称):
[username] ALL=(root) NOPASSWORD: systemctl start [servicename]
[username] ALL=(root) NOPASSWORD: systemctl stop [servicename]
[username] ALL=(root) NOPASSWORD: systemctl restart [servicename]
(重复许多系统命令,例如reload
/ try-restart
/ enable
/…)
但visudo
告诉我这是语法错误。我该如何修复?
我想要输入脚本(以非 root 用户身份运行)sudo systemctl stop [servicename]
。
Ubuntu Linux 18.04,来自 ubuntu 的 systemd(对于此版本为 v245)。我也希望它能在 Ubuntu 20.04 上运行。
答案1
您可以使用以下命令实现您想要的功能:
Cmnd_Alias USER_SERVICES = /usr/bin/systemctl start [servicename], /usr/bin/systemctl stop [servicename], /usr/bin/systemctl restart [servicename]
[username] ALL=(ALL) NOPASSWD:USER_SERVICES
您可以通过在命令之间添加逗号 (,) 来向 USER_SERVICES 添加更多命令。始终使用命令的完整路径。
答案2
您需要在sudoers
文件中添加具有所需权限/命令的用户/组。执行以下命令打开sudoers
文件(执行此命令需要 root 权限或 sudo 访问权限)
> sudo visudo
然后在末尾添加以下行并保存文件(要保存更改并退出 vim,请按ESC
,然后输入:wq
--> 按enter
)
%[group] ALL=([username]) NOPASSWD: ALL
%[group] ALL=NOPASSWD: /bin/systemctl start [servicename],/bin/systemctl stop [servicename],/bin/systemctl restart [servicename]