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
ユーザーにパスワードを手動で入力せずにシャットダウンコマンドを実行する許可を与えるにはどうすればよいですか?
ありがとう。
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
this answerのようにしたので、完璧に機能します。たぶんあなたのアプローチはvisudo
の部分を見逃していますか?
コマンドラインを開き、次のように入力します。
Sudo visudo
開いたファイルで、最後に次の行を追加します。
yourusername ALL=NOPASSWD: /sbin/halt
次に、エディターを終了して安全にします(CTRL + x)。
これで、コマンドラインからコンピューターをシャットダウンできます。何かをダウンロードした後:
wget UrlOfTheFileYouWantToDownload ; Sudo halt
しばらく前に、suid(Set User ID)を設定してこれを行いました。これにより、プログラムは、ファイルを実行しているユーザーではなく、ファイルの所有者として実行されます。シャットダウンはrootが所有しているため、Sudoなしでシャットダウンできます。
chmod u+s /sbin/shutdown
ただし、だれでもシャットダウンを実行できるため、セキュリティへの影響があります。 http://en.wikipedia.org/wiki/Setuid
スクリプト自体をルートとして実行したいようです。何かが完了するのを待ってからコンピューターの電源を切るスクリプトを実行する場合は、Sudoを使用してスクリプトを実行するだけです。これにより、スクリプトを実行するときにパスワードが要求されますが、それ以降は、スクリプト自体が介入なしでシステムを自由にシャットダウンします。