ユーザーとして実行できるようにしたい簡単なコマンドがありますが、root権限が必要です。これは「SUID」ビットの場合だと思いますが、使ったことがありません。
これは私が試したものです:
aioobe@e6510:~/bin$ Sudo -s
root@e6510:~/bin# cat -> spindown_baydrive
#!/bin/bash
/sbin/hdparm -Y /dev/sdb
root@e6510:~/bin# chmod +x spindown_baydrive
root@e6510:~/bin# chmod ug+s spindown_baydrive
root@e6510:~/bin# exit
aioobe@e6510:~/bin$ ./spindown_baydrive
/dev/sdb: Permission denied
aioobe@e6510:~/bin$
aioobe@e6510:~/bin$ ls -la spindown_baydrive
-rwsr-sr-x 1 root root 37 2011-01-31 09:59 spindown_baydrive
助言がありますか?
これはまさに Sudo が設計された種類のものです。 visudoを使用してsudoerを編集し、特権のないユーザーがスクリプトをrootとして実行できるようにします。
visudo
このような行を追加します
aioobe ALL=NOPASSWD: /path/to/spindown_baydrive
ファイルを保存します
これで、コマンドを使用してファイルをrootとして実行できます。
Sudo /path/to/spindown_baydrive
スクリプトを実行するためにパスワードの入力を要求する場合は、上のsudoers行を次のように変更します。
aioobe ALL= /path/to/spindown_baydrive
ユーザーにパスワードの入力を強制せずに、/ etc/sudoersでスクリプトを構成することにより、ユーザーにSudoを介してrootとしてスクリプトを実行させることができます(NOPASSWDオプションを参照)。
Bashスクリプトをsuidするには、こちらで詳細をお読みください: (Ubuntu)setuid bashが機能しません
-rwsr-sr-x1ルートルート372011-01-31 09:59 spindown_baydrive
37バイトで、これはシェルスクリプトだと思います。 setuidとして実行すると、シェルは元のuidとして新しいプロセスを開始します。 「シェルスクリプトsetuid」をグーグルで検索すると、なぜそれが機能しないのか、そして問題を解決するための多くの方法が表示されます。明らかなものは、Sudoを使用しているか、Cでラッパープログラムを作成しています。