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


292

この質問に触発されて....

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

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


2
そのため、ターミナルでパスワードを求められ、他のことは求められない、または他の方法で求められますか?!両方の方法で、私はその高いセキュリティ侵害を考える
Dr_Bunsen

端末にいるときだけシステムがパスワードを要求しないようにします...他の目的のために、システムはパスワードを要求する必要があります。この要件は一時的なものであり、新しいサーバーのインストール中に設定する際に使用します。新規サーバーのインストール中は、sudoコマンドで設定するのに本当に時間がかかります。15分ごとにパスワードを発行します。頭痛です。ルートアカウントを使用したくありません。
バベシュディワン

あなたが議論を読んでする必要があります。askubuntu.com/questions/135428/...
david6

1
確かにタイムアウトを延長できます。また、サーバーの新規セットアップを頻繁に行う場合は、プロセスの自動化を検討する必要があります。あなたはタイプするために支払われるのではなく、あなたは問題を解決し、sh * tを終わらせるために支払われます。
MauganRa

回答:


82

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

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


2
これは、パスワードを1回だけ入力するということと、終了しないときまで同じです。天気5時間。または15 .... sudoコマンドが発行されると、システムはパスワードによる認証を要求しません。
バベッシュディワン

2
入力するexitか、ターミナルエミュレータウィンドウを閉じるまで@ Z9iT 。
ブルーノペレイラ

2
ありがとう。この答えを受け入れたのは、パスワード認証なしでsudoコマンドを発行する目的を、終了しないまでn時間実行するためです。システムファイルを変更しないことはプラスです。
バベシュディワン

3
その時点でrootになるためにパスワードを入力する必要があるため、これは実際には質問に答えません。
アダムF

2
セキュリティで保護された環境で仮想マシンを実行していて、何かをすぐに実行したいだけで、パスワードを処理したくない場合はそうではありません。この回答は質問に答えるものではありませんが、間違いなく有用な情報です。アダムFに同意します
ジョナサンKomar

573

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パスワードプロンプト


15
sudo visudo直接編集する代わりに使用することをお勧めします。また、sudoersの権限を変更すると、ロックアウトされる可能性があります。で編集する場合はvim:wq!読み取り専用ファイルに書き込み、エディターを終了するために使用します。そのように、許可644は必要ありません。
レーケンシュタイン

8
これは深刻なセキュリティリスクです。sudo権限を持つアカウントを引き継ぐユーザーは、完全なシステムを制御し、このコンピューターへのアクセスをロックできます。
ブルーノペレイラ

6
@ wil93あなたはポイントを失っています:sudo install crapwareこの場合、呼び出すスクリプトはパスワードを要求せず、あなたが持っているすべてを台無しにする可能性があり、前回チェックしたときにスクリプトを配布するために物理的にマシンの隣にいる必要はありません。 ..これは単なる例です。
ブルーノペレイラ14

12
@BrunoPereira信頼できないスクリプトの実行を計画している場合、それはセキュリティリスクです(たとえsudoがパスワードを要求したとしても、悪意のあるスクリプトは常にrm -rf ~かなりのことを台無しにする可能性があります)。全体として、私は«深刻なセキュリティリスク»をsudoからのパスワードプロンプトの単純な削除と呼びません。
wil93 14

5
@ wil93に同意します。信頼できないスクリプトを実行する場合、パスワードを入力することはプロセスをキャンセルするチャンスに過ぎませんが、ほとんどの人にとっては役に立たないことを疑います。ポイントは、スクリプトの作成元と実行内容を知っていることです。
チャド

36

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

sudo visudo

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

(Viの具体的な手順と注意(VI!) 。あなたは、ナノを使用している場合は、これらを無視します。)

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

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

次のように入力します:

,timestamp_timeout=X

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

(vi!) Escapeキーを押してコマンドモードに戻ります。編集に満足したら:w Enter、ファイルを書き込んで:q Enterviを終了するために入力します。間違いを犯した場合、おそらく最も簡単な方法は、最初からやり直し、保存せずに終了して(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

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

sudo passwd root

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

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

sudo passwd -dl root

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

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

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

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

sudoが次回パスワードを要求することを確認するには、次を実行します。

sudo -k

追加する前にこれを投稿しました。これを行うためのシステム全体の方法および他の人がここで読むためです
。– user209328

これは遅い回答でしたが、提供するオプションに関しては最も包括的なものです。
ジェミング

1
うーん、Ubuntu 18.04 MATEではこれは完全に機能しますが、Ubuntu 18.04 GNOMEでも同じことをすると、「ユーザー名がsudoersファイルにありません...」という問題が発生します。非常に多くのppleはLinuxだけを嫌い、なぜ今、これがある-それは稀に「因果」ではないのcuz:念のためにUこれは、あなたが問題解決方法です...同じに実行D:tecmint.com/...を
ピーター

EDITOR環境変数は、使用するエディターを設定できます。たとえば、nanoでsudo env EDITOR=/bin/nano visudo確実に編集sudoersする場合。(エディターの設定にもupdate-alternativesを使用できます)
Gert van den Berg

29

個人(またはグループ)のアクセス許可を付与する好ましい方法は、以下にファイルを追加することです /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を参照してください。


私はrootですが、echoコマンドは失敗しました。しかし、私はファイルを追加して直接編集しましたが、これは最新のubuntuで機能しました(ユーザーをsudoersに直接追加しませんでした!)
scape

1
正しい方法は、teeコマンドで実行することです。
woto

1
これはより良い方法です:sudo sh -c 'echo "$(logname) ALL=(ALL:ALL) NOPASSWD: ALL" > /etc/sudoers.d/$(logname)'、その後にsudo chmod 440 /etc/sudoers.d/$(logname)
パラドロイド

sudo ... >file、それはrootシェルでのみ動作することができるようにシェルのリダイレクトは、オリジナルのシェルで実行されます。
コンスタンチンペリペリン

T方式、許可なしの問題:echo "username ALL=(ALL:ALL) NOPASSWD: ALL" | sudo tee /etc/sudoers.d/username
カーソンIp

7

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

sudo bash -c 'echo "$(logname) ALL=(ALL:ALL) NOPASSWD: ALL" | (EDITOR="tee -a" visudo)'

2
私はあなたがちょうどできると思います:echo "$USER ALL=(ALL:ALL) NOPASSWD: ALL" | sudo env EDITOR="tee -a" visudo、結局はvisudo必要なだけですsudo(そしてenvデフォルトの設定、IIRCでは必要ありません)。
ムル

ここで間違いが発生する可能性があるので(もちろんすべてのユーザーエラー)、非常に謙虚な意見でsudo visudoは、結果をテストしながら(エディターを開いたまま)sudoerファイルを直接編集することをお勧めします(この「ワンライナー」を試してみたいと思われるかもしれない新しいユーザーのために。
マイケル

フィードバックをお寄せいただきありがとうございます!揮発性のテストVMでsudoパスワードプロンプトの削除をスクリプト化しようとしていたのです。改善を提案すること自由に感じてください:)
エリックランドリー

sudo chmod 440 /etc/sudoers.d/$(logname)そのディレクトリのREADMEに記載されているファイルのアクセス許可を修正する必要があります。
パラドロイド

6

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

もう1つの方法は、sudoersファイルをそのままにして、数百台のサーバーにとって複雑なことをしながら、と入力することsudo bashです。これにより、終了するまでrootとして認証されるシェルが提供されます。


12
sudo -sまたはsudo -i、おそらくsudo bash環境よりも適切なものであることを保証するため、どちらもより良いアイデアです。
ダラエル

2
「正気と物事」は一般に「より良いアイデア」の領域ではありません。誰かがsudo -sまたはsudo -iがsudo bashよりも優れている理由について技術的な説明をすることができますか?(編集:ここでは、関連する質問ですaskubuntu.com/questions/376199/...は
Nuzzolilo

2
コマンドを適切に実行するには、いくつかのsudoコマンド(特にsudo pip ...)が必要ですsudo -H(HOMEを設定)。その他の場合、sudo -E(envを保持)が必要になる場合があります。sudo bashほとんどの場合、実行はおそらく動作しますが、すべてではありません。動作しない場合、その理由は明らかではありません。
マイケル

1
sudo suは、ロールを切り替えてシステム管理者の役割を開始する従来の方法です。
user1656671

3

スーパーユーザーに良い答えが来ます:

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

echo <password> | sudo -S <command>

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


2
パスワードはシェル履歴ファイルのcleartypeのままなので、これは推奨されません。代わりに他のソリューションを適用してください。
HappyCactus

1
@HappyCactusはecho、履歴の前に表示されないようにスペースを1つ前に配置できますか?
WinEunuuchs2Unix

はい、これにより、クリアテキストパスワードが履歴ファイルに公開されるのを防ぎます。しかし、あなたはいつもそれを追加することを覚えていますか?:-)
HappyCactus

@HappyCactus誤って先頭のスペースを追加し、履歴を思い出せない場合はイライラする傾向があります:)とにかく、スーパーユーザーは129の賛成票を持っているので、ここを離れるのは良い答えだと思います。人々は私たちのコメントを読み、リスクとリスク回避のステップを知っています。
WinEunuuchs2Unix

全くもって同じ意見です。ごきげんよう!
HappyCactus


2

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

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

0
  • @upteryxのアイデアを拡張します。

  • これは、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.