web-dev-qa-db-ja.com

SUIDの問題

ユーザーとして実行できるようにしたい簡単なコマンドがありますが、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

助言がありますか?

3
aioobe

これはまさに 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

7
user9517

ユーザーにパスワードの入力を強制せずに、/ etc/sudoersでスクリプトを構成することにより、ユーザーにSudoを介してrootとしてスクリプトを実行させることができます(NOPASSWDオプションを参照)。

Bashスクリプトをsuidするには、こちらで詳細をお読みください: (Ubuntu)setuid bashが機能しません

4
3molo

-rwsr-sr-x1ルートルート372011-01-31 09:59 spindown_baydrive

37バイトで、これはシェルスクリプトだと思います。 setuidとして実行すると、シェルは元のuidとして新しいプロセスを開始します。 「シェルスクリプトsetuid」をグーグルで検索すると、なぜそれが機能しないのか、そして問題を解決するための多くの方法が表示されます。明らかなものは、Sudoを使用しているか、Cでラッパープログラムを作成しています。

1
symcbean