一部のユーザーに管理者権限を必要とするスクリプトを実行させたいのですが、もちろん管理者権限を与えたくはありません。このスクリプトを安全に実行できるようにするにはどうすればよいでしょうか?
更新: これは Ubuntu 9.10 システムです。
答え1
/etc/sudoers
sudo を使用するだけです。次のようにで sudo を設定する必要があります。
fred ALL = (root) NOPASSWD: /path/to/command
fred をユーザー名に置き換えるか、グループの場合は %group を使用します。NOPASSWD: オプションを削除すると、毎回パスワードの入力を求められます。
スクリプト上の setuid は安全ではなく、Linux では動作しません。
答え2
sudoとSUIDはどちらも非常に不安どちらの場合も、スクリプト言語によっては簡単に回避できます。SUID ははるかに最悪で、一部のスクリプト言語では SUID が実行されると実行すらできなくなります。
安全に行う方法についてのブログ記事があります。これは私が最初に書いたものです。Nagios チェックプラグインを root として実行するしかし、ここでも完全に適用できます。スクリプトのラッパーとして機能する小さな C プログラム (Linux 管理者の世界で何年も使われてきました) があります。C プログラムのソースを編集してスクリプトへのフル パスを含め、コンパイルして、SUID を設定する (または sudo にアクセス権を与える) だけです。ソースは私のサイトにあります:setuid-prog.c。
スクリプトをルート(非ルートユーザー)として実行することの本質的な問題は、多くの言語で、さまざまなテクニック(貧弱な入力チェックからオーバーフローまで)を使用して、実行中のスクリプトから抜け出し、完全なルートアクセスを取得する可能性があるということです。多くの古いUnixの人たちは、必要なことを行うためにCプログラムを書くことを推奨していますが、繰り返しになりますが、それらのほとんどはSAでした。必要C を適切に記述できるようになる。
答え3
どのOSですか?
Linux/Unix では、sudo 経由で実行することを許可できます。/etc/sudoers ファイルを変更して、特定の ID (ユーザー) に、指定されたコマンドに対する特定の権限を付与できます。
あるいは、SUID ビットを設定し、スクリプトの所有者を特権ユーザーに変更することもできます。これにより、スクリプトは、それを実行しているユーザーではなく、そのユーザーとして実行されるように設定されます。ただし、これはスクリプトを実行しているすべてのユーザーに適用されます。
答え4
方法は2つあります:
最善の方法は、SUID ビットを設定することですchown root yourscript; chmod a+s yourscript
。
あるいは、を実行して指示に従うことsudo
で、を使用して変更するアクセス権を付与することもできます。ただし、これはSUID ビットを持つ を実行することで機能するため、不要です。visudo
sudo