ubuntu:ユーザーにroot権限でスクリプトを実行させます


9

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

私自身、sudoができます。

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

明確化:ユーザーが自分のパスワードを入力する必要があるので、私はsudoでそれをしたくありません。彼らにスクリプトをrootとして実行してもらいたいのです。

回答:


23

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

# chmod u+s /path/to/binary

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

#!/bin/bash

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

/bin/bash /path/to/script

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

visudoを実行して/ etc / sudoersファイルに次のように入力することにより、sudoでこれを行うことができます。

ALL ALL=NOPASSWD: /path/to/script

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

$ sudo /path/to/script

これにより、パスワードを入力しなくてもスクリプトを実行できます。

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


これが私が探していた答えだと思います。バイナリだけでbashスクリプトを設定できませんか?(もちろん、私はそれを編集不可能にするための対策を講じます)
flybywire

いいえ、スクリプトをsetuidすることはできません。
wfaulk

wfaulk:以前は可能でしたが、最近のほとんどのLinuxディストリビューションではこれを許可していません。shcのようなツールを使用してスクリプトを「コンパイル」してから、それをsetuidにすることができます。
カイル・ブラント

wfaulk:もちろん、それは意図的に無効化されていることを行うのに邪魔になるので、おそらく悪い考えです:-)
Kyle Brandt

ALL単語をユーザー名に置き換えて、その1つのsudoerがパスワードを入力せずに実行できるようにします。
hdave 2013年

3

私は、その行を挿入するために必要なEND ATのは/ etc / sudoersファイル:ALL ALL = NOPASSWD: <filename> どうやら、後で%admin ALL=(ALL) ALLオーバーライドは、管理者ユーザーのパスワードを必要としていました。

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

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

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

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


マシンのroot以外のユーザーがそのスクリプトを編集できる場合は、そのユーザーがマシンを引き継ぐことができます。その同じユーザーのパスワードが弱い場合、マシンが完全に危険にさらされるのを防ぐものは何もありません。
hdave 2013年

2

デフォルトでは、wheelグループのメンバーはとしてsudo任意のコマンドを実行できrootます。これはおそらくあなたがsudo今まで使ってきた方法です。

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

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

ユーザーが許可するmickey.mouseコマンドを実行する/usr/local/bin/test.shroot、追加のパスワードプロンプトを必要としません。

詳細については、このドキュメントをお読みください。


Debian / Ubuntuはwheelではなくadminグループを使用します。それはおそらく少し正確な名前です。
David Pashley、

私は旧式コールが、..;)
ダン・カーリー

1
昔ながらの:P
David Pashley

0

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

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

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

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


0

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

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

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.