ユーザーがパスワードなしで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.dvisudo/etc/sudoers


回答:


38

sudoersファイルはかなり柔軟であり、それに伴って複雑になります。ここで必要なのは/bin/systemctl、特定のパラメーターを使用して、コマンドへのアクセスを許可することです。

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

基本的には、入力するコマンドラインをそのまま使用し、安全のためにパス名をハードコーディングし、それをsudoersファイル(または/etc/sudoers.d)に入れます。また、sudoに関する限り、「start」と「restart」は完全に異なることに注意してください。一方を許可しても、他方へのアクセスは許可されません。


1
動作していないようです。ファイル/bin/systemctl restart unicorn_my_app.serviceから直接コピー/etc/sudoers.d/limitedadminsしてCLIで実行すると、パスワードの入力を求められます。ユーザーubuntuはどこかでtpを指定する必要がありますか、それともALLすべてのドメインのすべてのユーザーに対してtpを開きますか?
MikeiLL

5
実行するsudo /bin/systemctl restart unicorn_my_app.serviceと、パスワードなしで実行されるはずです。(PsiOpsの答えがこれから分離されている場合のコメントとして投稿)
rosuav

1
我々は次のようにそれを直接実行できるように@rosuavは、どのような方法がありますsystemctl restart myapp.service使用しないでsudo
kabirbaidhya

実際はそうではありませんが、コマンドをスクリプトに挿入して(sudoプレフィックスを付けて)、そのスクリプトを$ PATHに配置することができます。または、シェルエイリアスにします。
rosuav

3
注意:他のディストリビューションではsystemctl である/usr/bin。:-(
guettli
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.