1

CentOS を実行するデータ サーバー アプライアンスを管理するための Web サイト GUI を作成しています。多くのアプライアンスがこれを行います。ベンダーは基本的に、特定の構成パラメーターのみを変更するための GUI を構築し、それ以外はすべてロックダウンします。しかし、私はパーミッションに問題があると確信しており、これを行うための最も安全な方法を探しています. つまり、ユーザーが GUI を介してホスト名の変更を送信すると、shell_exec コマンドが apache として実行されているように見えます。Apache にはおそらくホスト名を変更する権限がないため、これが機能していません。Apache にこれらの権利を付与することは、安全ではない可能性があります。それで、解決策は何ですか?すべてのアプライアンス ベンダーは、ホスト名を変更する GUI をどのように作成できますか? また、どのように (安全に) 行うのでしょうか?

コードの抜粋:

                <form action="Settings.php" method="get">
                <div class="box">
                    <h1>Device Settings</h1>    
                     Hostname: <input type="text" name="Hostname" label="Hostname" value="<?php echo $Hostname; ?>"><br />
                     <input type="submit" value="Set"><br />
                </div>           
            </form> 
            $Hostname=shell_exec("hostname"); /*gethostname**/

            if (isset($_GET['Hostname'])){
                $Hostname=$_GET['Hostname'];
                $output1=shell_exec("sudo hostname ". $Hostname. " 2>&1");*/

            }   
4

3 に答える 3

1

もちろん、apache にそのような特権を与えるのは安全ではありません。この場合、このサーバー上のすべてのユーザーが sudo を実行して、必要なものを作成できます。最善の方法は、別のセキュアなサーバーから制御されるシステム デーモンを作成することです。

1 サーバー ソリューションが必要な場合は、ユーザーの仮想ホストにサービスを提供しない別の特権 apache を実行できます。これにより、はるかに安全になります。

于 2015-05-21T14:32:15.530 に答える
1

Apache をシステム コマンドに直接結び付けることはありません。の使用は、コードの匂いshell_exec()と見なす必要があります. GUIに何もせずに、その値を単純な非特権ストアに保存することでこれを実現します.JSONファイルをどこかの専用ディレクトリに保存するか、おそらくSQLiteデータベースに保存します. これにより、Apache に特別なパーミッションを与える必要がなくなり、構成の複数のタイムスタンプ付きバージョンを保存できるという利点が追加されます。これにより、エラーが発生した場合に以前の構成に簡単に戻すことができます。次に、Web サービスとは関係なく、構成を読み取り、適切なシステム レベルの変更を行う別のプロセスを作成します。Web サーバー全体ではなく、このプロセスのみに高い権限が必要です。好きな言語で書くことができ、必要に応じて手動で実行することも、一定の間隔で実行される cron として、または変更をアクティブに監視するデーモンとして実行することもできます。

于 2015-05-21T16:02:22.957 に答える
-1

sudoパスワードを要求せずに、すべてのコマンド、特定の 1 つのコマンドまたはコマンド パターン (正規表現も使用できます) を別のユーザー (たとえば www-data) の名前で実行できるように構成できます。

マニュアルを確認してください。

于 2015-05-21T14:20:47.247 に答える