web-dev-qa-db-ja.com

パスワードなしでSudoを実行しますか?

これに触発された 質問 ....

12.04でシステムを使用するのは私だけです。
毎回Sudoコマンドを発行します。システムはユーザーパスワードを要求します(独自の方法で有効です)。
しかし、私は考えていました。 rootアカウントをアクティブ化せずに;認証にユーザーパスワードを要求しないSudoコマンドを実行するにはどうすればよいですか。

注:パスワードで認証せずにSudoコマンドを実行したい。ターミナルを介して実行される場合のみ。
「Ubuntu Software Center」を使用しているときや、端末に何かをドラッグアンドドロップしてbashスクリプトを実行しているときなど、この余分なセキュリティ層を他の機能から削除したくありません。

289
Bhavesh Diwan

Sudo -iは、システム(または他のシステム)の変更中に10分ごとにパスワードを入力したくない場合、およびシステムファイルを変更したくない場合に使用する方法です。

コンソールを閉じるかSudoと入力すると、exitユーザーパスワードを使用してrootに切り替わり、通常のユーザーに戻ります。

82
Bruno Pereira

パスワードを要求しないようにSudoを構成できます。

ターミナルウィンドウを開き、次のように入力します。

Sudo visudo

ファイルの下部に、次の行を追加します。

$USER ALL=(ALL) NOPASSWD: ALL

$USERはシステム上のユーザー名です。 sudoersファイルを保存して閉じます(デフォルトのターミナルエディターを変更していない場合(変更されているかどうかがわかります)、ctl + xを押してnanoを終了すると、保存するように求められます)。

Ubuntu 19.04の時点で、ファイルは次のようになります。

#
# 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:/snap/bin"

# Host alias specification

# User alias specification

# Cmnd alias specification

# User privilege specification
root    ALL=(ALL:ALL) 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

YOUR_USERNAME_HERE ALL=(ALL) NOPASSWD: ALL

この後、パスワードの入力を求められることなく、ターミナルウィンドウでSudo <whatever you want>と入力できます。

これは、ターミナルでSudoコマンドを使用する場合にのみ適用されます。 (たとえば)ソフトウェアセンターからパッケージをインストールしようとすると、パスワードの入力を求められます。

gui password Prompt

ルートSudoタイムアウトは、これを行う最も簡単で安全な方法です。すべての例をレイアウトしますが、この方法ははるかに安全ですが、これを行う方法は非常に危険です。

Sudo visudo

これによりエディターが開き、sudoersファイルがポイントされます。Ubuntuはデフォルトでnanoであり、他のシステムではViが使用されます。これで、システム上の最も重要なファイルの1つを編集するスーパーユーザーになりました。ストレスがない!

(Vi固有の指示は(vi!)で示されています。nanoを使用している場合は無視してください。)

矢印キーを使用して、Defaults行の最後に移動します。

(vi!) A(大文字の「a」)キーを押して現在の行の最後に移動し、編集モードに入ります(行の最後の文字の後に追加します)。

次のように入力します:

,timestamp_timeout=X

ここで、Xは分単位のタイムアウト有効期限です。 0を指定すると、常にパスワードが要求されます。 負の値を指定した場合、タイムアウトは期限切れになりません。Defaults env_reset,timestamp_timeout=5

(vi!) Escapeキーを押してコマンドモードに戻ります。編集に満足したら、:wと入力します Enter ファイルと:qを書き込む Enter viを終了します。間違えた場合、おそらく最も簡単な方法は、最初からやり直し、保存せずに終了することです(ヒット Escape コマンドモードを開始するには)を入力してから:q! Enter

ヒット Ctrl+X、その後 Y、その後 Enter ファイルを保存してnanoを終了します。

追加情報については、sudoersおよびviのマニュアルページを参照してください。

man sudoers
man vi

次を使用してタイムアウト値をリセットします。

Sudo -k

これらの手順は、Sudoコマンドを使用するときにパスワードのプロンプトを削除することです。ただし、rootアクセスにはSudoコマンドを使用する必要があります。

Sudoersファイルを編集します

ターミナルウィンドウを開きます。 Sudo visudoと入力します。ファイルのENDに次の行を追加します(最後にない場合は、後のエントリで無効にすることができます)。

<username> ALL=NOPASSWD: ALL

<username>をユーザー名に置き換えます(<>なし)。これは、Ubuntuがユーザー名と同じ名前のグループを作成したことを前提としています。これは一般的です。代わりに、グループユーザーまたは他のグループを使用することもできます。そのグループにいることを確認してください。これは、[システム]-> [管理]-> [ユーザーとグループ]に移動して確認できます。

例:

michael ALL=NOPASSWD: ALL

^ X(Ctrl+X) 出る。これにより、ファイルを保存するオプションが表示され、Yを入力して保存します。

ログアウトしてから再度ログインします。これにより、パスワードの入力を求められることなく、Sudoコマンドを実行できるようになります。

ルートアカウント

ルートアカウントを有効にする

ルートアカウントを有効にする必要はほとんどありません。 Ubuntuシステムの管理者として行う必要があるほとんどすべてのことは、Sudoまたはgksudoを介して実行できます。永続的なルートログインが本当に必要な場合、最良の代替方法は、次のコマンドを使用してルートログインシェルをシミュレートすることです。

Sudo -i

ただし、mustルートログインを有効にする必要がある場合は、次のように実行できます。

Sudo passwd root

ルートアカウントを再度無効にする

何らかの理由でルートアカウントを有効にし、再度無効にする場合は、ターミナルで次のコマンドを使用します。

Sudo passwd -dl root

システム全体のグループSudo

root$ echo "%Sudo ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers

ログアウトしてから、再度ログインします。

Sudoタイムアウトのリセット

次を実行することで、Sudoが次回パスワードを要求することを確認できます。

Sudo -k
36
user209328

個人(またはグループ)のアクセス許可を付与する好ましい方法は、/etc/sudoers.dの下にファイルを追加することです

これにより、ローカルの変更がデフォルトポリシーから分離され、配布がファイルを変更した場合に時間を節約できます。

現在ログインしているユーザーをsudoerにし、Sudoがパスワードを要求しないようにするには、次を使用します。

echo "$USER ALL=(ALL:ALL) NOPASSWD: ALL" | Sudo tee /etc/sudoers.d/$USER

これにより、/etc/sudoers.d/$USER$USERはコマンドを実行したときにログインしたユーザーのユーザー名)というファイルが作成され、どのユーザーに許可が与えられているかが明確になります。

別のユーザーに対してこれを行う場合は、上記のコマンドで$USERの両方のインスタンスを他のユーザー名に置き換えてください。

echo "otheruser ALL=(ALL:ALL) NOPASSWD: ALL" | Sudo tee /etc/sudoers.d/otheruser

同様に、1つのファイルを使用して複数のディレクティブを管理できます。

echo "username ALL=(ALL:ALL) NOPASSWD: ALL" | Sudo tee -a /etc/sudoers.d/local

詳細については、/etc/sudoers.d/READMEおよびman sudoersを参照してください。

25
user1656671

現在のユーザーのSudoプロンプトを削除する素敵なワンライナー

Sudo bash -c 'echo "$(logname) ALL=(ALL:ALL) NOPASSWD: ALL" | (EDITOR="tee -a" visudo)'
7
Eric Landry

もちろん、やりたいことはお勧めしません。しばらくすると、Sudoと入力すると自動的になり、その有用性が低下します。

もう1つの方法は、sudoersファイルをそのままにして、数え切れないほどのサーバーに対して複雑なことをしながら、Sudo bashと入力することです。これにより、終了するまでルートとして認証されるシェルが提供されます。

6
John S Gruber

Super User から良い答えが出ます:

STDINからパスワードを読み取る-Sスイッチを使用します。

echo <password> | Sudo -S <command>

<password>をパスワードに置き換えます。

3

これは、/etc/sudoer.d/READMEに記載されているようにファイルのアクセス許可も変更する1行のソリューションです。

Sudo sh -c 'echo "$(logname) ALL=(ALL:ALL) NOPASSWD: ALL" > /etc/sudoers.d/$(logname)' & Sudo chmod 440 /etc/sudoers.d/$(logname)
2
paradroid

一発ギャグ

Sudo sed -i /etc/sudoers -re 's/^%Sudo.*/%Sudo ALL=(ALL:ALL) NOPASSWD: ALL/g'

2
upteryx