パスワードなしでsudoコマンドを実行する方法は?


235

ubuntuUbuntu Server 12.04のAWSイメージのユーザーは、設定がない場合、どのようにしてsudoすべてのコマンドに対してパスワードなしになります/etc/sudoersか?

AmazonでUbuntuサーバー12.04を使用しています。デフォルトのUbuntuユーザーと同じ動作を持つ新しいユーザーを追加したい。具体的にはsudo、この新しいユーザーにはパスワードなしが必要です。

そこで、新しいユーザーを追加し、編集しました/etc/sudoers(もちろんvisudoを使用)。そのファイルを読んでみると、デフォルトのubuntuユーザーはグループのsudoメンバーであるためパスワードなしであるように見えましたadmin。そこで、新しいユーザーを追加しました。うまくいきませんでした。次に、にNOPASSWDディレクティブを追加してみましたsudoers。これも機能しませんでした。

とにかく、今私は興味があります。でubuntu定義されていない場合、ユーザーはどのようにしてパスワードなしの特権を取得しますか/etc/sudoers。これを可能にするメカニズムは何ですか?


回答:


332

OK 最後に、/etc/sudoers私は単なるコメントだと思ったものがあります:

#includedir /etc/sudoers.d

ただし、これには実際にはそのディレクトリの内容が含まれます。内部はファイルです /etc/sudoers.d/90-cloudimg-ubuntu。期待される内容を持っている

# ubuntu user is default user in cloud-images.
# It needs passwordless sudo functionality.
ubuntu ALL=(ALL) NOPASSWD:ALL

そのため、デフォルトのubuntuユーザーのsudo設定が存在します。

このファイルは、visudoを使用して編集する必要があります。次のコマンドを使用すると、visudoで正しいファイルを編集できます。

sudo visudo -f /etc/sudoers.d/90-cloudimg-ubuntu

そして、次のような行を追加します。

aychedee ALL=(ALL) NOPASSWD:ALL

最後に。


4
完全に再起動する必要があると確信しています。
-aychedee

2
新しいsudoルールは、すべての新しいログインユーザーに使用されます-したがって、少なくとも再ログインが必要です
-bluszcz

32
「sudo service sudo restart」は機能します:)
Laice

4
それ以降のバージョン(たとえば、14.04)に含まれるファイルは/etc/sudoers.d/90-cloud-init-users(編集するためです。. sudo visudo -f /etc/sudoers.d/90-cloud-init-users)。ただし、生成されたファイルを編集するよりも、追加のファイルを作成する方がきれいです。ファイルが含むことに注意してください.またはで終わる~だろうではない含めること。
モロンビー

2
@ Phil_1984_ほとんどの場合、他の(標準?)バージョンのsudoとの互換性を可能にするためにコメントとして追加されました。(標準は難しいです!
;

94

複数のサーバー間でこの動作を簡単に複製するために、最も簡単なことは次のとおりであることがわかりました。

sudo visudo

この行を変更します。

# Members of the admin group may gain root privileges
%admin  ALL=(ALL) ALL

この行に:

# Members of the admin group may gain root privileges
%admin  ALL=(ALL) NOPASSWD:ALL

そしてこの行の下に移動します:

# Allow members of group sudo to execute any command
%sudo   ALL=(ALL:ALL) ALL

あなたは今これを持っているはずです:

# 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

# Allow members of group sudo to execute any command
%sudo   ALL=(ALL:ALL) ALL

# Members of the admin group may gain root privileges
%admin  ALL=(ALL) NOPASSWD:ALL

# See sudoers(5) for more information on "#include" directives:

#includedir /etc/sudoers.d

次に、パスワード付きの sudoアクセスが必要なすべてのユーザーに対して:

sudo adduser <user> sudo

パスワードなしで sudoアクセスを必要とするすべてのユーザーに対して:

sudo adduser <user> admin

そして最後に、これを実行します:

sudo service sudo restart

以上です!

編集:デフォルトでは存在しないと思われるため、管理グループを追加する必要があります。

sudo groupadd admin

次のコマンドをubuntu使用して、デフォルトのAWS ユーザーをadminグループに追加することもできます。

sudo usermod ubuntu -g admin

注:@hataが述べたように、使用admしているUbuntuのバージョンによっては、管理グループ名として使用する必要がある場合があります。


3
自己への注意:スタック内でより制限の少ないパーミッションをより低く移動することは慣例です。しかし、それを行わなくても機能には影響しません。
poweratom 14

2
jiminikizが説明したように、Ubuntu GNOME 16.04 LTSでは%sudoの後に%adminを配置する必要がありました。さらに、管理者グループIDは正確ではありません管理者が、ADM、私のUbuntuの上。再起動は必要ありませんでした。

5

/etc/sudoers.d/ディレクトリの下に独自のファイルを作成します-Amazon Cloudによって作成されたファイルは、更新の場合に上書きされる可能性があります。/etc/sudoers.dにファイルを作成した後、このエントリを追加し、

<your user name> ALL=(ALL) NOPASSWD:ALL

システムを再起動すると、これが機能します。


2

エディターを使用しない短い回答(bashでテスト済み、リモートホストで実行するのは非常に危険)。

現在のユーザーのパスワードなしで動作するようにsudoを構成します。

echo "$USER ALL=(ALL) NOPASSWD:ALL" | sudo tee -a /etc/sudoers

以下を使用して編集を確認します。

sudo visudo -c

パスワードなしでsudoを使用できるかどうかを確認します。

sudo cat /etc/sudoers | grep "$USER"

...または単に試してみてください:

sudo <anything>

21
これはかなり危険なアドバイスです...これを間違ってコピーして貼り付けると、自分のサーバーからロックアウトされます。したがって、visudoを使用することをお勧めします。ディスクに保存する前に構文が正しいことを確認します。だから、これを使いたい人のために。気になるリモートサーバーでは実行しないでください。あなたはあなたの答えにそれに関する警告を含めたいかもしれません。
aychedee

8
visudoを使用しないのは恐ろしい考えです。私を信じて、私は知っています。
トログナンダ

1
私見、コピー&ペーストは手動での編集よりも安全です。マイナーな単純化:echo "$USER ALL=(ALL) NOPASSWD:ALL" | sudo tee -a /etc/sudoers
theartofrain

4
@theartofrain-通常、私は同意しvisudoますが、sudoersファイルを壊さないようにして、マシンから(または少なくともsudo)ロックアウトしないようにすることは特に素晴らしいことです。
ジョンV

3
@JonV経由でvisudoも管理者権限を失う可能性がありますが、sudoersファイルの文法visudoに従って整形式の変更のみを保存するため、通常は偶然ではありません。ほとんどの間違いは構文的に間違っているため、を使用しても害はありません。場合や、ファイルがされて病気に形成され、使用していないが、なぜあるセキュリティ対策として、誰のための権限を昇格することを拒否危険です。(ただし、再起動せずに修正できる場合もあります。)visudo/etc/sudoers/etc/sudoers.d sudovisudopkexec
エリアケイガン

0

これは、CICDパイプラインで使用するために、一時的なDockerイメージに非ルート、パスワードなしのユーザーを実装した方法です。

RUN \
    groupadd -g 999 foo && useradd -u 999 -g foo -G sudo -m -s /bin/bash foo && \
    sed -i /etc/sudoers -re 's/^%sudo.*/%sudo ALL=(ALL:ALL) NOPASSWD: ALL/g' && \
    sed -i /etc/sudoers -re 's/^root.*/root ALL=(ALL:ALL) NOPASSWD: ALL/g' && \
    sed -i /etc/sudoers -re 's/^#includedir.*/## **Removed the include directive** ##"/g' && \
    echo "foo ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers && \
    echo "Customized the sudoers file for passwordless access to the foo user!" && \
    echo "foo user:";  su - foo -c id
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.