web-dev-qa-db-ja.com

Sudoersファイル、ユーザーのNOPASSWDの有効化、すべてのコマンド

序文

これは、Sudoersファイルと一般的なSudoコマンドに関連するかなり複雑な質問です。

注:Ubuntu Desktop 13.04を実行している専用マシンでこれらの変更を行いました。これは純粋に学習目的で使用します。 NOPASSWD Sudoを有効にすると、セキュリティ上の大きなリスクになることを理解しています。

質問

最初は、sudoersファイル(/ etc/sudoers)への唯一の変更は1行でした。これは、パスワードを入力せずにSudoですべてのコマンドを実行するために「nicholsonjf」を有効にするユーザー仕様です(「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」を削除すると、「nicholsonjf」としてSudoコマンドの実行を開始できました。

なぜこれが機能したのか説明できますか?

これは、ユーザー「nicholsonjf」が「admin」と「Sudo」の2つのグループ仕様(sudoersファイルで下に表示)からSudo権限を継承していたためです。設定ファイル?

135
James Nicholson

追加した行は上書きされました。 man sudoersから:

ユーザーに対して複数のエントリが一致する場合、それらは順番に適用されます。複数の一致がある場合、最後の一致が使用されます(必ずしも最も具体的な一致とは限りません)。

あなたの場合、nicholsonjfはグループSudoのメンバーだったので、彼には次の行が適用されました。

%Sudo   ALL=(ALL:ALL) ALL

/etc/sudoersのエントリを上書きする場合は、それらの後に新しいエントリを追加します。

新しいエントリは次のようになります

myuser ALL=(ALL) NOPASSWD: ALL単一ユーザーの場合、または

グループの%Sudo ALL=(ALL) NOPASSWD: ALL

155
pabouk

単一ユーザーの場合、Sudo visudoを使用してsudoersファイルの最後にこの行を追加します

superuser ALL=(ALL) NOPASSWD: ALL

グループ向け

%supergroup  ALL=(ALL) NOPASSWD: ALL
117
Fedir RYKHTIK

現在のユーザーがSudoを使用しているときにパスワードの入力を求めない

echo "$USER ALL=(ALL:ALL) NOPASSWD: ALL" | Sudo tee /etc/sudoers.d/dont-Prompt-$USER-for-password

これにより、/etc/sudoers.d/dont-Prompt-<YOUR USERNAME>-for-Sudo-passwordというファイルが作成され、Sudoコマンドの実行時にパスワードを要求されないため、そのコマンドを実行したユーザーが意味するようになります。 buntu Software グラフィカルアプリからのものをインストールするなど、他のコンテキストでもパスワードの入力を求められます。

/etc/sudoersを使用してechoコマンドの行をSudo visudoに追加するよりも、この方法で行うことの利点は(他の回答で示唆されています)

  1. /etc/sudoersはシステムの更新によって変更されることがありますが、/etc/sudoers.dのファイルは変更されません
  2. Sudo visudoメソッドはエラーになりやすい(この質問からもわかるように)が、コマンドのコピー/貼り付けは混乱しにくい

Sudo cat /etc/sudoers.d/READMEによると、この機能(/etc/sudoers.dに追加のsudoerファイルを配置する機能)はDebian 1.7.2p1-1以降、デフォルトで有効になっています。これは 1990年代後半に登場 ( Ubuntuは Debianベース )です。

2
Boris

Vince には コメントで言及 があるため、次の行を使用できます。

%Sudo ALL=NOPASSWD: ALL

(これは thoseanswers に示されている行とは異なり、問題を解決しました。)

0
E. Fortes