Systemd

我們如何允許非 root 使用者控制 systemd 服務?

  • July 27, 2021

有了sysvinit,這樣的sudoers條目就足夠了:

%webteam cms051=/sbin/service httpd *

這將允許以下命令:

  • sudo service httpd status
  • sudo service httpd restart

現在,使用systemd,服務名稱是最後一個參數。即,服務重啟將通過以下方式完成:

systemctl restart httpd.service

自然地,我認為將命令定義為systemctl * httpd.service可以工作,但這將允許一些systemctl restart puppet.service httpd.service不是預期效果的東西。

考慮到這一點,那麼允許非 root 使用者控制systemd服務的最佳方式是什麼?這不需要sudoers;也許文件權限更改就足夠了?

只需將所有需要的命令sudoers分別添加到:

%webteam cms051=/usr/bin/systemctl restart httpd.service
%webteam cms051=/usr/bin/systemctl stop httpd.service
%webteam cms051=/usr/bin/systemctl start httpd.service 
%webteam cms051=/usr/bin/systemctl status httpd.service

@jofel 的回答正是我獲得工作設置所需要的。為其他遇到此問題的人發布此資訊。從我的本地機器部署後,我需要一種方法來capistrano重新啟動我的 Ruby 應用程序。這意味著我需要無密碼訪問重新啟動systemd服務。這就是我所擁有的,而且效果很好!

注意:我的使用者和組稱為deployer

將程式碼放入自定義文件中:/etc/sudoers.d/deployer

程式碼:

%deployer ALL= NOPASSWD: /bin/systemctl start my_app
%deployer ALL= NOPASSWD: /bin/systemctl stop my_app
%deployer ALL= NOPASSWD: /bin/systemctl restart my_app

引用自:https://unix.stackexchange.com/questions/192706