允许用户无需密码即可运行systemctl / systemd服务


25

我希望默认用户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


Answers:


38

sudoers文件非常灵活,随之而来的是复杂性。您想要的是允许/bin/systemctl使用特定参数访问命令:

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

基本上,您只需要输入确切的命令行,为安全起见将路径名硬编码,然后将其放入sudoers文件(或/etc/sudoers.d)中。并且请注意,就sudo而言,“启动”和“重新启动”完全不同。允许一个不会授予对另一个的访问权限。


1
似乎没有用。我可以/bin/systemctl restart unicorn_my_app.service直接从/etc/sudoers.d/limitedadmins文件复制并在CLI中运行它,并提示输入密码。用户是否ubuntu需要在某处指定tp或是否ALL向所有域的所有用户开放tp ?
MikeiLL,2015年

5
您将运行sudo /bin/systemctl restart unicorn_my_app.service,然后它将在没有密码的情况下运行。(以示评论,以防PsiOps的答案与此分开)
rosuav

1
@rosuav有什么办法可以让我们像systemctl restart myapp.service不使用一样直接运行它sudo
kabirbaidhya

并非如此,但是您可以将命令放入脚本中(使用sudo前缀完成),然后将该脚本放入$ PATH中。或使其成为外壳程序别名。
rosuav '16

3
注意:其他发行版systemctl 位于/usr/bin:
。– guettli
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.