パスワードなしで特定のsudoコマンドを実行するにはどうすればよいですか?


211

特定のマシンでは、sudoコマンドを時々実行する必要があります。sudoほとんどの場合、パスワードを入力しても大丈夫です。

ただし、パスワードを入力せずに実行する3つのsudoコマンドがあります

  • sudo reboot
  • sudo shutdown -r now
  • sudo shutdown -P now

これらのコマンドをパスワード保護から除外するにはどうすればよいsudoですか?


回答:


283

NOPASSWDディレクティブを使用する

ファイルでNOPASSWDディレクティブを使用でき/etc/sudoersます

ユーザーが呼び出さuserれ、ホストが呼び出されたhost場合、次の行を追加できます/etc/sudoers

user host = (root) NOPASSWD: /sbin/shutdown
user host = (root) NOPASSWD: /sbin/reboot

これにより、ユーザーはパスワードを入力せずにuser目的のコマンドを実行できhostます。他のすべてのsudoedコマンドには、引き続きパスワードが必要です。

sudoersファイルで指定されたコマンドは、manページで説明されているように、完全に修飾されている(つまり、実行するコマンドへの絶対パスを使用している)必要ありsudoersます。相対パスを指定すると、構文エラーと見なされます。

コマンドが末尾の/文字で終了し、ディレクトリを指している場合、ユーザーはそのディレクトリ内のコマンドを実行できます(ただし、サブディレクトリ内のコマンドは実行できません)。次の例では、ユーザーuserはディレクトリ内の任意のコマンドを実行できます/home/someuser/bin/

user host = (root) NOPASSWD: /home/someuser/bin/

注意:必ず、コマンドを使用しvisudo編集することsudoersは、システムの外に自分自身をロックしないことを確認するためにファイルを-念のためにあなたが偶然に間違って何か書きsudoersファイルを。visudo変更されたファイルを一時的な場所に保存し、変更されたファイルをエラーなしで解析できる場合にのみ、実際のsudoersファイルを上書きします。

/etc/sudoers.d変更する代わりに使用する/etc/sudoers

/etc/sudoersファイルを編集する代わりに、/etc/sudoers.dたとえばの新しいファイルに2行を追加できます/etc/sudoers.d/shutdown。これは、sudo権利に対するさまざまな変更を分離するエレガントな方法であり、sudoersアップグレードを容易にするために元のファイルをそのまま残します。

注:繰り返しますが、コマンドvisudoを使用してファイルを編集し、システムからロックアウトされないようにする必要があります。

sudo visudo -f /etc/sudoers.d/shutdown 

また、これにより、新しいファイルの所有者と権限が正しく設定されます。

sudoers混乱した場合

visudoファイルの編集に使用せずに誤ってファイルを台無しにし/etc/sudoersたり、ファイルを台無しにした/etc/sudoers.d場合、ロックアウトされsudoます。

解決策pkexecは、を使用してファイルを修正することですsudo

修正するには/etc/sudoers

pkexec visudo

修正するには/etc/sudoers.d/shutdown

pkexec visudo -f /etc/sudoers.d/shutdown

いずれかのsudoersファイルの所有権やアクセス権が正しくない場合、ファイルは無視されるsudoため、この状況でロックアウトされる可能性があります。繰り返しますが、pkexecこれを修正するために使用できます。

正しい許可は次のようになります。

$ ls -l /etc/sudoers.d/shutdown 
-r--r----- 1 root root 86 Jul 16 15:37 /etc/sudoers.d/shutdown

次のpkexecように使用して、所有権と権限を修正します。

pkexec chown root:root /etc/sudoers.d/shutdown
pkexec chmod 0440 /etc/sudoers.d/shutdown

2
2行は、これらの2つのコマンドを具体的に示しています。user他の方法でsudo権限が付与されていない場合、このユーザーは他のコマンドをsudoできません。見ているman sudoman sudoers
mgd

4
@StanKurdziel Mac OS X Yosemiteでこの行を試してみましたが、うまくいきましたmgd ALL=(root) NOPASSWD: /var/root/test。私はユーザーでmgdあり、「すべてのホストから」ALLという意味です。は、アクセス許可を持つ単純な「Hello World」シェルスクリプトです。私はシステムに他の変更を加えませんでした/var/root/test-rwx------ 1 root wheel 27 12 Jun 09:54 /var/root/test
mgd

2
hostsudoersファイルには何が含まれていますか?
user106563

1
これは答えではなく、NOPASSWDディレクティブに関するほぼ完全なガイドです。ありがとうございました。
-Eray

1
@Michaelはmanページを読んでください。それはすべてそこに書かれています。引用するには:ただし、コマンドライン引数(ワイルドカードを含む)を指定することもできます。または、 ""を指定して、コマンドライン引数なしでのみコマンドを実行できることを示すことができます。
-mgd

3

申し訳ありませんが、これといくつかの本当に複雑な答えについては非常に混乱しているので、誰かが誤解して何かおかしなことをする前にここで計量しなければならないと感じます。

visudo !!を使用する

構成に次の行を追加します。

ALL ALL=NOPASSWD: /sbin/reboot,/sbin/shutdown

これにより、コマンド、リブート、およびシャットダウンをパラメーターを使用して、任意のユーザーから実行できます。

スタック交換してください、単純な簡潔な答えを与えてください。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.