web-dev-qa-db-ja.com

ubuntu:root権限でユーザーがスクリプトを実行できるようにします

私はubuntu 8.04を持っていて、すべてのユーザーが実行できるrootとして実行されるbashスクリプトを書きたいのですが。

私自身も須藤ができる。

それ、どうやったら出来るの?

[〜#〜] clarification [〜#〜]:ユーザーがパスワードを入力する必要があるため、Sudoを使用したくない。私は彼らにrootとしてスクリプトを実行してもらいたいと思っています。

9
flybywire

これが通常のバイナリの場合は、次のコマンドを実行してsetuidできます。

# chmod u+s /path/to/binary

残念ながら、スクリプトはsetuidできません。 (まあできますが、無視されます)。これは、スクリプトの最初の行で、スクリプトを実行するインタープリターをOSに指示するためです。たとえば、次のスクリプトがあるとします。

#!/bin/bash

あなたは実際に走ってしまうでしょう

/bin/bash /path/to/script

明らかに、インタープリターをsetuidにする必要があります。これは、すべてのスクリプトがsetuidになることを意味します。これは悪いでしょう。

Sudoでこれを行うには、visudoを実行して/ etc/sudoersファイルに次のように記述します。

ALL ALL=NOPASSWD: /path/to/script

そして今、すべてのユーザーが実行できます

$ Sudo /path/to/script

これにより、パスワードを入力せずにスクリプトを実行できます。

コマンドにSudoを必要としない代替方法があります。スクリプトを実行する小さなsetuidバイナリを作成する必要がありますが、setuidバイナリを追加するたびに、別の潜在的なセキュリティ問題が追加されます。

23
David Pashley

その行を挿入する必要がありましたAT THE END of/etc/sudoers:_ALL ALL = NOPASSWD: <filename>_どうやら、後の%admin ALL=(ALL) ALLオーバーライドでは、管理ユーザーのパスワードが必要でした。

スクリプトが十分に決定された無害な許可されたアクションを実行し、パラメータの値がスクリプトの誤動作を引き起こさない限り、スクリプトをrootとして実行することを許可するセキュリティ上の問題はありません。

しかし、落とし穴があります...

コマンド名とファイル名には常にフルパスを使用してください。 myrootscriptに_echo Hello world!_のようなものを書くと、誰かが_~/bin/echo script_を書く可能性があり、myrootscriptはその中の何でもrootとして実行されます。

_/bin/echo "Hoping this will keep you safe"_ :-)

3
André

デフォルトでは、wheelグループのメンバーは、任意のコマンドをSudoとしてrootすることができます。これはおそらく、現在までSudoを使用している方法です。

別のユーザーを許可するには、sudoersルールを作成する必要があります。例えば:

mickey.mouse ALL = (root) NOPASSWD: /usr/local/bin/test.sh

ユーザーを許可しますmickey.mouseコマンドを実行するには/usr/local/bin/test.sh as root追加のパスワードプロンプトは必要ありません。

詳細は このドキュメント を参照してください。

2
Dan Carley

使用する chmod +s <filename> suidビットを設定します。これは、ファイルが実行されると、ファイルの所有者の権限で実行されることを意味します(そのため、ファイルをrootに移動して、そのように実行します)。

ただし、これはbashスクリプトのようなものでは非常に危険です。ユーザーが変更する方法を見つけたので、ルートシェルを簡単に取得できます。 root以外は誰にも書き込めないことを確認してください。

Linuxでは、スクリプトのsetuidを許可していません。これを行うには、プログラムとしてコンパイルする必要があります。代わりに、sudoersファイル(/ etc/sudoers)を使用して、次のような行を追加できます。

<username> ALL = NOPASSWD: /path/to/script

0
Dentrasi

別の代替策:そのスクリプトの周りに小さなsetuid Cラッパーを実行して、

  • 実施したい制限(ユーザーリスト、時間、システム負荷など)をチェックします
  • 必要に応じて実行をログ/監査します
  • スクリプトを実行する

Sudoの複数の機能の独自のサブセットのようなものです。

0
mpez0