web-dev-qa-db-ja.com

ユーザーにシャットダウン特権を与える方法は?

Ubuntu 11.04を使用しています。実行中のプロセスをチェックし、そのプロセスが終了したときにシステムをシャットダウンするスクリプトを実行したい。これを行うには、パスワードを必要とせずにスクリプトを実行できるように、ユーザーはシャットダウンアクセスが必要です。

このページ を参照し、sudoersファイルにテキストを追加しました。ただし、Sudo shutdown -h nowを実行するたびにパスワードを尋ねられます。また、Sudoを使用せずにシャットダウンを実行すると、ルート権限が必要であるというエラーが表示されます。

私のsudoersファイルは次のようになります。

# Cmnd alias specification
Cmnd_Alias      SHUTDOWN = /sbin/shutdown

# User privilege specification
root    ALL=(ALL:ALL) ALL
myusername    ALL = NOPASSWD: SHUTDOWN

ユーザーにパスワードを手動で入力せずにシャットダウンコマンドを実行する許可を与えるにはどうすればよいですか?

ありがとう。

9
Amey Jah

HALまたはConsoleKitを使用してシャットダウンまたは再起動できますが、ユーザー名/パスワードを入力する必要はありません。

HAL(古いUbuntuバージョン):

dbus-send --system --print-reply --dest=org.freedesktop.Hal /org/freedesktop/Hal/devices/computer org.freedesktop.Hal.Device.SystemPowerManagement.Shutdown

ConsoleKit(新しいUbuntuバージョン、Ubuntu 11.04でテスト済み):

dbus-send --system --print-reply --dest=org.freedesktop.ConsoleKit /org/freedesktop/ConsoleKit/Manager org.freedesktop.ConsoleKit.Manager.Stop
6
Alin Andrei

this answerのようにしたので、完璧に機能します。たぶんあなたのアプローチはvisudoの部分を見逃していますか?

コマンドラインを開き、次のように入力します。

Sudo visudo 

開いたファイルで、最後に次の行を追加します。

yourusername ALL=NOPASSWD: /sbin/halt

次に、エディターを終了して安全にします(CTRL + x)。

これで、コマンドラインからコンピューターをシャットダウンできます。何かをダウンロードした後:

wget UrlOfTheFileYouWantToDownload ; Sudo halt
7
Christoph

しばらく前に、suid(Set User ID)を設定してこれを行いました。これにより、プログラムは、ファイルを実行しているユーザーではなく、ファイルの所有者として実行されます。シャットダウンはrootが所有しているため、Sudoなしでシャットダウンできます。

chmod u+s /sbin/shutdown

ただし、だれでもシャットダウンを実行できるため、セキュリティへの影響があります。 http://en.wikipedia.org/wiki/Setuid

1
turbo

スクリプト自体をルートとして実行したいようです。何かが完了するのを待ってからコンピューターの電源を切るスクリプトを実行する場合は、Sudoを使用してスクリプトを実行するだけです。これにより、スクリプトを実行するときにパスワードが要求されますが、それ以降は、スクリプト自体が介入なしでシステムを自由にシャットダウンします。

0