すべてのコマンドに対して 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