我希望默认用户ubuntu
能够运行特定服务而无需输入密码。
具体来说systemctl restart unicorn_my_app.service
。
已遵循说明这里将用户添加ubuntu
到新创建的组,LimitedAdmins
确认方式如下:
$ getent group LimitedAdmins
LimitedAdmins:x:1001:ubuntu
在包含以下文本的目录中创建了一个新文件limitedadmins
(使用sudo vim
) :/etc/sudoers.d
%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
不是注释,而是#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
尝试755
在应用程序上进行 chmodding,但认为这不会有什么区别,因为ubuntu
无论如何它都拥有它。
甚至尝试重启系统也没有任何变化。我是不是漏掉了某个步骤(例如重启/重新加载)?配置有什么问题吗?
我还应该提到,我曾经vim
在其中创建新文件,因为该命令/etc/sudoers.d
似乎是visudo
仅有的进行编辑/etc/sudoers
。
更新
看起来您可以使用 编辑其他 sudo 配置文件visudo
。见下文。
答案1
sudoers 文件相当灵活,但也因此而复杂。这里你需要的是允许访问命令/bin/systemctl
,并带有特定参数:
%LimitedAdmins ALL=NOPASSWD: /bin/systemctl restart unicorn_my_app.service
基本上,您只需采用您要输入的确切命令行,为安全起见对路径名进行硬编码,然后将其放入您的 sudoers 文件(或/etc/sudoers.d
)。请注意,就 sudo 而言,“start”和“restart”完全不同;允许其中一个不会授予另一个访问权限。
答案2
我也以为 visudo 只能工作于/etc/sudoers
但幸运的是,我错了。
visudo
可用于修改现有文件/etc/sudoers.d
或创建新文件。-f 参数允许这样做。如果命令像这样调用:
visudo -f /etc/sudoers.d/permissions_for_subset_of_users
您可以使用 visudo 的验证功能来允许安全地编辑 sudoers。
此外,如果您正在使用某种 CI/CD 或配置管理,则可以使用它visudo -cf <name_of_file>
来运行配置验证。(我们的首席系统管理员提供了第二条知识)。