/etc/sudoers は、ユーザーに一般的な sudo の使用を許可し、1 つのコマンドのみパスワードプロンプトを表示しないように設定します。

/etc/sudoers は、ユーザーに一般的な sudo の使用を許可し、1 つのコマンドのみパスワードプロンプトを表示しないように設定します。

すべてのコマンドに対して sudo を実行できるユーザーのエントリが /etc/sudo にあります。

フレッド ALL=(ALL:ALL) ALL

ドキュメントによれば、最後の ALL はすべてのコマンドへのアクセスを許可する役割を担っています。

私はfredがUbuntu 14.04でsudoパスワードを入力せずにnginxの再起動を実行できるようにしたいのですが、他のコマンドでsudoを呼び出す機能は保持しています。sudo ユーザドキュメントは明確ではありませんが、

fred ALL=(ALL) NOPASSWD: /usr/sbin/service

fred は 1 つのコマンドのみを実行できます。fred に、sudo 経由ですべてのコマンドを root として実行できる権限を与えたいと思います。/usr/sbin/service を除くすべてのコマンドにはパスワードが必要です。

ドキュメントのBNFを見てみると

User_Spec ::= User_List Host_List '=' Cmnd_Spec_List  (':' Host_List '=' Cmnd_Spec_List)*   

Cmnd_Spec_List ::= Cmnd_Spec | Cmnd_Spec ',' Cmnd_Spec_List

Cmnd_Spec ::= Runas_Spec? SELinux_Spec? Solaris_Priv_Spec? Tag_Spec* Cmnd 
 
Runas_Spec ::= '(' Runas_List? (':' Runas_List)? ')' 

SELinux_Spec ::= ('ROLE=role' | 'TYPE=type') 

Solaris_Priv_Spec ::= ('PRIVS=privset' | 'LIMITPRIVS=privset')   

Tag_Spec ::= ('EXEC:' |
              'NOEXEC:' | 'FOLLOW:' | 'NOFOLLOW' |
              'LOG_INPUT:' | 'NOLOG_INPUT:' | 'LOG_OUTPUT:' |
              'NOLOG_OUTPUT:' | 'MAIL:' | 'NOMAIL:' | 'PASSWD:' |
              'NOPASSWD:' | 'SETENV:' | 'NOSETENV:')

複数のCmnd_Spec_Listsを使用できる可能性があるようです。

fred ALL=(ALL : ALL) ALL、NOPASSWD: /usr/sbin/service

しかし、ドキュメントには、後者の NOPASSWD: Cmnd_Spec がそのコマンドに対してのみ ALL コマンドのルート アクセスを上書きするとは書かれていません。

これは最初から正しく行いたい種類のものなので、最後の行が特定の目的に対して機能するかどうか(または機能しないかどうか)を誰か確認してもらえませんか?

さらに、fred が sudo パスワードなしでサービスを実行できるように機能する場合、fred がサービス nginx でパスワードなしでのみ機能するように、またはさらに良いことに、fred がパスワードなしでのみそのサーバーを再起動できるように、サービスへの引数を制限する方法はありますか?

ありがとう。

答え1

設定の下部にあるコマンドは、上部のコマンドを上書きします。これは、次のドキュメントに記載されています。https://www.sudo.ws/man/1.8.15/sudoers.man.html#SUDOERS_FILE_FORMAT最も具体的なものから最も具体的でないものまで、そのように順序付けない限り、そのようにはなりません。

私はこれを複数行で行います。複数行とルールがあると、将来、物事が複雑になったときに読みやすく理解しやすくなります。複数行を使用すると、順序を設定するのに役立ちます。

# I don't know what order this is interpreted in:
fred ALL=(ALL : ALL) ALL, NOPASSWD: /usr/sbin/service

# I do know what order this is interpreted in:
fred ALL=(ALL) ALL
fred ALL=(ALL) NOPASSWD: /usr/sbin/service

次の行は私の sudoers ファイルからのものです。グループのメンバーがすべてのコマンドを実行できるようにし、次にパスワードなしでエイリアスwheel内のコマンドを具体的に実行します。REBOOT

Cmnd_Alias      REBOOT = /sbin/halt, /sbin/reboot, \
                         /sbin/poweroff, /sbin/shutdown
%wheel ALL=(ALL) ALL
%wheel ALL=(ALL) NOPASSWD: REBOOT

残念ながら、皆さんに紹介できるような公開ドキュメントはあまりありません。sudoers のマニュアルページはひどいです。少し前に、これに関する素晴らしい(読みやすい)本を読みました(須藤マスター(Michael W. Lucas 著) この例は複数の Linux および BSD マシンで動作しました。

答え2

こんにちは、これはうまくいくかもしれません。ルートとしてログインし、以下のコマンドを実行してみてください。$sudoersファイルに以下の行を追加します。

フレッド ALL=(ALL)NOPASSWD:ALL

関連情報