この質問は、Sudoers ファイルと sudo コマンド全般に関連する、かなり複雑な質問です。
注: この変更は、Ubuntu Desktop 13.04が動作する専用マシンで行いました。NOPASSWDのsudoを有効にすることは大きなセキュリティリスクがあることは理解しています。
当初、私がsudoersファイル(/etc/sudoers)に加えたのは1行だけで、そのユーザー指定によって 'nicholsonjf'がパスワードを入力せずにsudoですべてのコマンドを実行できるようになっているはずでした( 'nicholsonjf'で始まる行を参照)。
# 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
nicholsonjf ALL=NOPASSWD: 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
しかし、これではうまくいかず、 'nicholsonjf'としてコマンドを実行するたびに、パスワードの入力を求められました。sudoグループとadminグループから 'nicholsonjf'を削除して初めて、sudoコマンドを 'nicholsonjf'として実行できるようになりました。
どなたか、なぜこれがうまくいったのか説明できますか?
ユーザー 'nicholsonjf'が、2つのグループ指定 'admin'と 'sudo'(sudoersファイルの下記参照)からsudo権限を継承していて、それらが設定ファイルのさらに下にあるために 'nicholsonjf'のユーザー指定よりも優先されていたからでしょうか?
追加した行が上書きされてしまいました。man sudoers`より。
一人のユーザーに対して複数のエントリがマッチした場合、それらは順番に適用されます。複数の項目がマッチした場合、最後にマッチした項目が使用されます(必ずしも最も具体的なマッチではありません)。
あなたのケースでは、nicholsonjf
はグループsudo
のメンバーでしたので、彼にはこの行が適用されます。
%sudo ALL=(ALL:ALL) ALL
もし、/etc/sudoers
のエントリーを上書きしたい場合は、新しいエントリーをその後ろに置くだけです。
新しいエントリは次のようになります。
myuser ALL=(ALL) NOPASSWD: ALL` シングルユーザーの場合は、以下のようになります。
グループの場合は「%sudo ALL=(ALL) NOPASSWD: ALL」となります。
シングルユーザーの場合は、sudo visudo
を使って、sudoers
ファイルの最後に以下の行を追加します。
superuser ALL=(ALL) NOPASSWD: ALL
グループの場合
%supergroup ALL=(ALL) NOPASSWD: ALL