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


142

序文

これは、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」を削除すると、「nicholsonjf」としてsudoコマンドの実行を開始できました。

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

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


7
注:ALL = NOPASSWD:ALLはALL =(ALL)NOPASSWDなければならない:ALLまたはそうでなければ...動作しません
アンドレ・Verwijs


回答:


164

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

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

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

%sudo   ALL=(ALL:ALL) ALL

エントリをオーバーライドする場合/etc/sudoersは、新しいエントリをそれらの後に配置します。

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

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

%sudo ALL=(ALL) NOPASSWD: ALL グループ用。


6
私はについて何かを見たいのですが、完全な解決策についてはNOPASSWD、この答えに...
ダニエル・アルダー

22
私が思うに、解決策は次のようになります%sudo ALL=(ALL) NOPASSWD:ALL
ダニエル・アルダー

3
@DanielAlder:質問の仕様行nicholsonjf ALL=NOPASSWD: ALLは正しいです。私が答えで説明したように、それはちょうど間違った場所にありました。------ Runas仕様(あなたの場合(ALL))はオプションです。仕様を省略すると、コマンドをasとして実行でき、and オプションをroot使用できません。-u-gsudo
パブーク14

これは、複数のユーザーにパスワードなしのアクセスを許可するため、より深刻なセキュリティリスクです。それがあなたのパーソナルPCである場合、それは重要ではありません-おそらく。最後に個人的なラインを移動するだけです。
マークウィリアムズ14

4
debian / ubuntuベースのものを使用する場合は、修正ではなく追加(一般的に適用される場合があり、他では見られません)あなたの絶対的な最善策は、/ etc / sudoers.d /のファイルにカスタムコマンドを追加し、sudoersを残すことですパッケージマネージャーによって管理される自体。
アクエリオン

120

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

superuser ALL=(ALL) NOPASSWD: ALL

グループ向け

%supergroup  ALL=(ALL) NOPASSWD: ALL

8
この回答を読む前に、私は%sudo ALL=NOPASSWD: ALLそれを実行しました。Extended Backus-Naur Formを理解するのが本当に難しいと感じるのは私だけですか?
ビンス

4
@Vinceコマンドを使用すると、sudosudo権限のないユーザーとしてパスワードなしではできません。たとえば、sudo -u root -i動作しますが、sudo -u git -i動作しません。
NeverEndingQueue

これは、受け入れられているものよりもはるかに有用な回答です。OPの質問には回答していますが、ほとんどの人はGoogleを介してこのページにアクセスしているのではないでしょう。
マフムードアルクシ

3

現在のユーザーがsudodo を使用するときにパスワードの入力を決して求めないようにするには

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コマンドを実行したときにパスワードの入力を求められないため、そのコマンドを実行したユーザーが意味するようになります。Ubuntu Softwareグラフィカルアプリからのものをインストールするなど、他のコンテキストでもパスワードの入力を求められます。

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

  1. /etc/sudoersシステムの更新によって変更されることがありますが、ファイルは変更され/etc/sudoers.dません
  2. sudo visudo/コマンドを貼り付けるコピーすることは台無しにはるかに困難であるのに対し、この方法は、(これは非常に問題でも明らかなように)エラーを起こしやすいです

よるとsudo cat /etc/sudoers.d/README、この機能(に余分sudoerファイルを置くこと/etc/sudoers.d)のDebian 1.7.2p1-1、以降はデフォルトで有効になった1990年代後半に出てきた(UbuntuのがされてDebianベース)。


(より良いファイル名を思い付くことができるなら、私の答えを編集してください)
ボリス

0

以下のようヴィンスがいるコメントで述べた、あなたはこのラインを使用することができます。

%sudo ALL=NOPASSWD: ALL

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


@Eliahこれは他の答えとそれほど違いはありません。supergroupFedirの答えのプレースホルダーをに置き換えるだけsudoです。次に、グループの別のユーザーは何wheelですか?または、ユーザーが使用している他のグループはありますか?
ムル

1
@muru supergroupFedirの回答のプレースホルダーをに置き換えるだけsudoです」 何?行ので置換するsupergroupsudo、ではなくが%supergroup ALL=(ALL) NOPASSWD:ALL生成されます。%sudo ALL=(ALL) NOPASSWD:ALL%sudo ALL=NOPASSWD: ALL
エリアケイガン

これは間違いなく、NOPASSWDがターゲットユーザーとしてのroot専用であるためです。したがって、質問に正しく答えることさえできません!
ムル

@muru何があることはないとしても、間違いなく、しかし、の置換であるsupergroupsudo。これは独自の回答であり、感謝の投稿や別の回答のコピーではありません。しかし、はい、私は同意します:彼らがそうすることを意図しない限り、これはほとんどのユーザーにとって他の答えの方法ほど良くありません。(ただし、「すべてのターゲットユーザー」ではなく「すべてのコマンド」という質問を特に考慮すると、これは質問された質問に答えようとしても効果的ではないと思います。)
Eliah Kagan

これは私のために働いたし、他のユーザーと共有したかった:)(必要に応じて私のコメントを削除します)。
E.フォルテ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.