允许用户在没有密码的情况下运行systemctl / systemd服务

我希望默认用户ubuntu能够在不提示输入密码的情况下运行特定服务。

特别是systemctl restart unicorn_my_app.service

按照此处的说明将用户ubuntu添加到新创建的组, LimitedAdmins ,其中已确认:

 $ getent group LimitedAdmins LimitedAdmins:x:1001:ubuntu 

/etc/sudoers.d目录中创建了一个包含以下文本的新文件limitedadmins (使用sudo vim ):

%LimitedAdmins ALL=NOPASSWD: /etc/init.d/unicorn_ofn_america restart, /etc/init.d/unicorn_ofn_america start

我也尝试过:

%LimitedAdmins ALL=NOPASSWD: /bin/systemctl/unicorn_ofn_america restart, /bin/systemctl/unicorn_ofn_america start

(和/bin/systemd

/etc/sudoers/sudo visudo (或sudo cat /etc/sudoers )确认的默认值:

  # # This file MUST be edited with the 'visudo' command as root. # # Please consider adding local content in /etc/sudoers.d/ instead of # directly modifying this file. # # See the man page for details on how to write a sudoers file. # Defaults env_reset Defaults mail_badpass Defaults secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin" # Host alias specification # User alias specification # Cmnd alias specification # User privilege specification root ALL=(ALL:ALL) ALL # Members of the admin group may gain root privileges %admin ALL=(ALL) ALL # Allow members of group sudo to execute any command %sudo ALL=(ALL:ALL) ALL # See sudoers(5) for more information on "#include" directives: #includedir /etc/sudoers.d 

#includedir中的#includedir不是注释,而是#include指令语法的一部分 )。

但是,在运行systemctl restart unicorn_my_app.service之后仍然有密码提示

init.d目录中有服务:

 $ ls -l /etc/init.d | grep unicorn -rwxr--r-- 1 ubuntu ubuntu 1874 Oct 29 06:47 unicorn_my_app 

在应用程序上尝试chmodding 755 ,但不认为这应该有所作为,因为ubuntu无论如何都拥有它。

甚至尝试重启系统没有区别。 我错过了一个步骤,比如重启/重装)? 配置错误?

我还应该提一下,我使用vim/etc/sudoers.d创建了新文件,因为似乎visudo命令用于编辑/etc/sudoers

sudoers文件相当灵活,随之而来的是复杂性。 你想要的是允许访问命令/bin/systemctl ,具体参数:

%LimitedAdmins ALL=NOPASSWD: /bin/systemctl restart unicorn_my_app.service

基本上你只需要输入你要输入的确切命令行,为安全起见硬编码路径名,然后将它放入你的sudoers文件(或/etc/sudoers.d )。 请注意,就sudo而言,’start’和’restart’完全不同; 允许一个人不允许访问另一个人。