非常にシンプルなPHPベースのWebベースのコントロールパネルを構築して、ユーザーを追加および削除し、linode vps(Ubuntu 8.04 LTS)のnginx構成ファイルにセクションを追加および削除したいと思います。 )。
Webベースのコントロールパネルからの入力に基づいてrootとしてコマンドを実行する最も安全な方法は何ですか?
明らかな理由から、rootとしてPHP(IPテーブルファイアウォールの背後にある場合でも))を実行するのは嫌です。
提案を歓迎します。いくつかの商用(そして私のニーズでは肥大化した)コントロールパネルが同様の機能を提供するので、それは可能でなければなりません。
ありがとう
Webサーバーが実行されるユーザーのSudoルールを作成して、特定のコマンドのみを実行できるようにします。たとえば、ファイルを編集するには、Webサーバーが所有し、Webサーバーのみが書き込み可能なディレクトリにコピーを作成し(悪意のあるローカルユーザーがプロセスの途中で変更を踏むことができないようにする)、Sudoルールを設定します。編集したファイルを所定の位置にコピーします。 Sudoルールをロックして、特定の引数を持つコマンドのみを処理できるようにすることができます。
また、ユーザーを認証していることを確認し、ユーザーからの入力をサニタイズして、シェルのメタ文字などが侵入しないようにします。たとえば、ユーザーを追加するときに、入力が最大長内に収まることを確認し、文字と数字のみで構成されます。 Sudoを使用すると、とにかくそのようなことのほとんどを防ぐことができますが、複数の保護層が適しています。ユーザーの入力に偏執的になりすぎることはあり得ません。 ;)
または、Webminをインストールするだけです。 :)
何をするにしても、それは常にセキュリティホールになる可能性があります。
いくつかの提案:
上記のどれも、単に「コントロールパネル」をrootとして実行することほど、実際に安全であるとは思えません(そして間違いなく単純ではありません)。そして、ほとんどの「コントロールパネル」パッケージ( webmin など)は、これを完全にバイパスして、rootとして実行します。
これらのアイテムを組み合わせて、適切なレベルのセキュリティを実現できると思います。
また、上記のアプローチを好みますが、クライアントにアクションをファイルにダンプしてから、スクリプトにこれらのアクションを処理させる方法を用意しました。スクリプトは5分ごとにcron経由で実行されました。
これにはパブリックアクセスが必要ですか?そうでない場合は、IPtablesとApache独自のAuthconfigを使用して、悪用から保護します。
ファイルをWebルートフォルダにシンボリックリンクし、セミセキュリティ用のhtaccess(php authの上に)を作成し、それをモーフィングするスクリプトを記述します。その後、ファイルが変更されたときにnginxプロセスを再起動する必要があります。
www.cyberciti.biz/faq/freebsd-configure-nginx-php-fastcgi-server/
次のようなものを使用して、変更を監視し、変更があったときに(変更とともに)電子メールを送信し、スクリプトを介してnginxプロセスを再開できます。
http://inotify-tools.sourceforge.net/
Cronを介して毎分かそこらでそれを検出できた場合、やり過ぎかもしれません。
アイデア番号1:puppetを使用して、構成ファイルへの変更を指示します。
ファイルを編集する必要がある場合は、次のことを試してください。独自のローカルコピーを編集するPHPスクリプトを作成します。これは、ローカルSVNリポジトリにチェックインされます。次に、svn-externalsを使用するだけです。 rootは、nginx構成ファイル(もちろんSVNにチェックインしています)とセットでsvn update
を実行する必要があります。
更新スクリプトはcronジョブで実行できます。
これを行うcPannelとWebMinがあり、それらも悪名高いほど安全ではありません。ハッキングの結果も大きく、システム全体が失われ、ハッキングされたときに最初から再インストールする必要があります。
Telnetを使用したくないのと同じように、httpも使用したくありません。必ずHTTPSを使用し、実際の証明書を購入してください。結局、rootパスワードをネット経由でスローすることは重大な間違いであり、正しいサーバーに確実に送信されるようにする必要があります。
EDIT: chrootでcPannelを実行できるため、侵害された場合でも、新しいchrootを作成できます。また、ルートがアクセスできるものを正確に定義できるパッド付きの刑務所でもあります。
pythonでcgiスクリプトを書くと、おそらくもっと簡単だと思います。 Massimoが言ったように、webminを実行する方がはるかに安全ですが...