2012-05-05 13 views
8

私はちょっとウェブベースのLinuxコントロールパネルを作ろうと考えていました。PHPからのrootコマンドの実行...安全な方法はありますか?

私の心には、システム全体のセキュリティを脅かすようなコマンドを実行するために、Apacheのユーザーにroot権限を与える必要があるという問題がありました。

システム用の専用Webサーバーをインストールすることは、実際の選択ではありません。

おそらく、私は2番目のApacheインスタンスを実行することができます(通常のユーザーの場合は1番目のインスタンスを維持します)。

あなたの意見は? 私の最高のオプションは何ですか?

事前にお問い合わせいただきありがとうございます。

編集:すべての提案をいただきありがとうございます。私はそれらを念頭に置いておきます。

+6

考慮する必要がある、回避する、または克服する必要があるセキュリティ機能は多数あります。あなたがLinuxシステムのセキュリティに関する深刻な広範な知識を持っていない限り、これを試みることについても考えないでください。 –

+0

**この**のような行為をしたいと思う時はいつでも、Pleskの人々に「安全な」Webベースのシステム管理パネルを作るのがどれほど楽しいか質問してみてください(http://arstechnica.com/ビジネス/ニュース/ 2012/02/plesk-control-panel-bug-left-ftc-sites-and-thousand-more-to-anon.ars)を使用しています。 – rdlowrey

+0

私はちょっとウェブベースのLinuxコントロールパネルを作ろうと考えていましたが、もっと楽しくなるべきだと思っていますが、もう一度私は不眠症について何かすべきです! –

答えて

5

rootで実行できる特定のスクリプトを作成し、setuidビットを使用してApacheがこれらのスクリプトをrootとして実行できるようにします。その後

chown root:www-data myscript.php 

それが所有者として実行します:IE

#! /usr/bin/php (or wherever your php binary is) 
<?php 
    // Some PHP code that takes in very limited user input, 
    // validates it carefully, and does a sequence of actions 
    // that you need to run as root. 

    // This could easily be a shell script (or whatever else you want) 
    // instead of PHP. That might be preferable in many situations. 
?> 

は、そのスクリプトはrootが所有し、としてApacheを実行、ユーザーによってgroup'dされていることを確認し

chmod u+s myscript.php 

Apacheが実行できることを確認してください。

chmod g+x myscript.php 
+0

setuidでPHPを実行すると、潜在的なセキュリティ問題が発生するだけですが、OPが望んでいるのはそうです。 – Tibor

+0

Linuxは、非常に安全でないと考えられるため、解釈された言語のsetuidビットを無視します。 http://unix.stackexchange.com/questions/364/allow-setuid-on-shell-scripts/2910#2910 –

3

Webサーバー経由でrootコマンドを実行することは、私にとっては非常識な考えですが、とにかくです。

sudoを使用すると、不要なコマンドを実行しないようにすることができます。 hereから取ら

リトルたとえば、sudoの設定ファイル:

peter, %operator ALL= /sbin/, /usr/sbin, /usr/local/apps/check.pl 

とPHPで:

exec('sudo /usr/local/apps/check.pl ...'); 

が正しくというようにすべての引数をエスケープしてください。

それとも、むしろこのようにdbテーブルを構築することができます:

commands (
    action, 
    serialized_parameters. 
    result, 
    return_code 
) 

使用しPHPは、この表と異なるユーザーでのcronで実行される別のスクリプトにコマンドを挿入します。リアルタイムの結果は得られませんが、30秒前に実行できますが、apacheユーザーはコマンドを直接使用することはできません(もちろん、レコードを読むときにアクションを簡単に制限できます)。

1

私は最近、PHPが実際のBashシェル(要求されればrootとして)を取得して対話できるプロジェクトを公開しました。これはexec()とshell_exec()の制限を解決します。ここでそれを取得します。それはルートとしてApacheを実行しているよりもはるかに優れているセキュリティの面では

$shell = \MTS\Factories::getDevices()->getLocalHost()->getShell('bash', true); 
$return1 = $shell->exeCmd('yourFirstCommand'); 
//the return will be a string containing the return of the command 
echo $return1; 

:あなたは、単に次のコードを使用しますダウンロードした後https://github.com/merlinthemagic/MTS

を。しかし、rootに近いところにPHPを置くことは、常に難しいです。

1)あなたはsudoのパイソンの権利を許可するのapache:

私が構築されたプロジェクトは、2のいずれかの方法で、ルートbashシェルを実現しています。

OR )あなたがオブジェクトを使用すると、ルート設定でシェルを必要とするたびに、ルート資格情報を渡します。

あなたの毒を選んでください。 :)ドキュメントをお読みください。

関連する問題