允许用户在没有密码的情况下运行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’完全不同; 允许一个人不允许访问另一个人。