8

ちょっとした Web ベースの Linux コントロール パネルを作成することを考えていました (ただの楽しみです)。

最初に頭に浮かんだ潜在的な問題は、これらのコマンドを実行するために Apache のユーザーに root レベルのアクセス許可を与える必要があるということでした。これにより、システム全体のセキュリティが損なわれる可能性があります。

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

2 番目の Apache インスタンスを実行することもできますが (1 番目のインスタンスは通常のユーザー用に保持します)、可能かどうかさえわかりません。

それで、あなたはどう思いますか?ここでの最良の選択肢は何ですか?

ご意見をお寄せいただきありがとうございます。

編集:わかりました、すべての提案をありがとう、私はそれらを心に留めておきます。

4

3 に答える 3

5

root として実行できる特定のスクリプトを作成し、それを行うために setuid ビットを使用して、Apache がそれらのスクリプトだけを root として実行できるようにします。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.
?>

次に、そのスクリプトがルートによって所有され、Apache が実行されるユーザーによってグループ化されていることを確認します。

chown root:www-data myscript.php

次に、所有者として実行します。

chmod u+s myscript.php

そして、Apacheがそれを実行できることを確認してください:

chmod g+x myscript.php
于 2012-05-05T21:54:44.367 に答える
3

ウェブサーバー経由でルート コマンドを実行するのは、私にはばかげた考えのように思えますが、とにかく。

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

ここから取った小さな例、sudo config:

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 ユーザーはコマンドを直接使用することはできません (もちろん、レコードを読み取るときにアクションを簡単に制限できます)。

于 2012-05-05T21:59:15.047 に答える
2

私は最近、PHP が実際の Bash シェルを取得して対話できるようにするプロジェクトを公開しました (必要に応じて root として)。これにより、exec() と shell_exec() の制限が解決されます。ここから入手してください: https://github.com/merlinthemagic/MTS

ダウンロードしたら、次のコードを使用するだけです。

$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;

セキュリティの面では、root として apache を実行するよりもはるかに優れています。しかし、PHP を root の近くに配置するのは常に注意が必要です。

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

1)Apacheにsudo pythonの権利を許可します。

また

2) root セットアップのシェルが必要になるたびに、root 資格情報をオブジェクトに渡します。

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

于 2016-05-20T10:01:49.353 に答える