誰が実行した場合でも、スクリプトをrootとして実行するにはどうすればよいですか?
私はsetuidについて読みましたが、これを行う方法がわかりません。
Linux、Ubuntu 12.04 LTSを使用しています。
本当に注意してください:setuidと組み合わせたスクリプトは危険です!
まず、 この質問/回答 、特に この回答とセキュリティ警告 をご覧ください。
それでもsetuid
を設定してスクリプトを実行する場合は、短いCプログラムをラッパーとして記述し、コンパイルされたバイナリにsetuid
ビットを設定できます。
ラッパーの例:
int main(void) {
setuid(0);
clearenv();
system("/absolute/path/to/your/script.sh");
}
Sudo
を使用した別のソリューション(言及 ここ ):
Rootとして、スクリプトへの書き込み(およびその他のアクセス)を禁止します。
chown root /absolute/path/to/your/script.sh chmod 700 /absolute/path/to/your/script.sh
root以外の誰もスクリプトを置き換えることができないことを確認します。親フォルダのアクセス権を変更する:
chown root /absolute/path/to/your/ chmod 755 /absolute/path/to/your/
visudo
を使用して/etc/sudoers
のSudoアクセス権を変更します。
ALL ALL =(root)NOPASSWD:/absolute/path/to/your/script.sh
設定の詳細(特定のユーザーまたはグループへのアクセスの制限など)は、sudoersのマンページにあります。
その後、すべてのユーザーがパスワードなしでrootとしてスクリプトを実行できます。
Sudo /absolute/path/to/your/script.sh
これは、上記のラッパー/ setuidソリューションの使用に似ています。
最も簡単で安全な方法は、ファイル許可でSETUIDビットを使用することです。これにより、コマンドの権限がファイル所有者の権限に昇格します。
スクリプトが編集されないようにするために、全員に書き込みを設定しないでください。
これが役立つかどうかはわかりませんが、スクリプトをrootとしてのみ実行するには、スクリプトの最初の行でこのシバンを使用できます。
#!/bin/su root