更新

更新

我希望默认用户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>来运行配置验证。(我们的首席系统管理员提供了第二条知识)。

参考:https://www.sudo.ws/man/1.8.13/visudo.man.html

相关内容