fastcgiサーバー(またはネットワークプロキシサーバー)を刑務所に入れる方法は?

fastcgiサーバー(またはネットワークプロキシサーバー)を刑務所に入れる方法は?

Webサーバー(nginxなど)がある場合は、通常、fast-cgiサーバーまたは他のアプリケーションhttpサーバーを使用して動的コンテンツを取得します。これは、どちらの場合も、Webサーバープロセスとfast-cgi(またはアプリケーションhttpサーバープロセス - 以下ではスレーブプロセスと呼ばれる)の間でプロセスがうまく分離されていることを意味します。

Webサーバーは、fast-cgiがソケットまたはプロキシを介してhttp要求を処理するように構成されています。

スレーブプロセスにセキュリティ上の問題がある場合は、スレーブサーバーとWebサーバーに対して異なるユーザーを作成してファイルシステムの場所を保護できます。

しかし、Linuxでスレーブプロセスをさらに制限する方法は?

(たとえば、インターネットにアクセスできない場合や電子メールを送信できない場合など)

次のパスを考えてみましょう。

  • SELinux
  • Linuxシステムの名前空間(「コンテナ」、cgroup)

現在のディストリビューション(Debianなど)で最も便利な方法は何ですか?実際の運営ではどうすればいいですか?構成例はありますか?

答え1

Ubuntuで投獄するもう1つの方法は次のとおりです。アパモア

パスベースの必須アクセス制御(MAC)Linuxセキュリティモジュール(LSM)。 Ubuntu 10.04では、選択したサービスに対してデフォルトで有効になっています。

文書はかなり散らばっています。 Ubuntuのドキュメントが良いかもしれません。 〜でもアップストリーム文書紹介がうまくいかなかったですね。これ参考ページの現状:

警告:この文書は作成の初期段階にあり、まだリファレンスマニュアルとして使用できる形式ではありません。

しかし、始めるのは比較的簡単です。 AppAmor プロファイルは実行可能なパスと一致します/var/www/slave/slave(たとえば、. プロファイル拒否ルールは常に許可ルールの前に一致します。空のプロファイルはすべてを無効にします。

さまざまなバイナリのプロファイルがに保存されます/etc/apparmor.dapparmor_status有効なプロファイル、強制モード(良好)、または不平モード(ログメッセージのみを印刷)のプロファイルを表示します。

新しいプロファイルを作成する方法は/var/www/slave/slave次のとおりです。

aa-genprof /var/www/slave/slave

別の端末から始めて、/var/www/slave/slave一般的なユースケースを実行します。完了したら、前の端末でキーを押しますsf

これで/etc/apparmor.d設定ファイルが含まれていますvar.www.slave.slave。スレーブが一部のブランチを実行すると、プロファイルは非常に希薄になり、子へのすべてのアクセスは無視されます。

それにもかかわらず、プロファイルは強制モードでアクティブになり、スレーブデバイスでタスクを繰り返しトリガーし、違反をtail -f /var/log/messages監視できるようになりました。他の端末では、構成ファイルを編集し、aa-enforce var.www.slave.slave各変更後に実行します。これにより、ログに以下が表示されます。

audit(1308348253.465:3586):  operation="profile_replace" pid=25186 name="/var/www/slave/slave"

違反は次のとおりです。

operation="open" pid=24583 parent=24061 profile="/var/www/slave/slave" 
  requested_mask="::r" denied_mask="::r" fsuid=10004 ouid=10000 name="/var/www/slave/config"

構成ファイルの規則は次のとおりです。

/var/www/slave/config r,

今後のアクセスが許可されます。

それはすべて非常に簡単です。

AppAmorは、次のようなおおよそのネットワークルールをサポートしています。

network inet stream,

このルールがないと、インターネット(localhostを含む)にアクセスできません。このルールを使用しても、iptablesより細かいルール(スレーブuidベースなど)を使用できます。

別の文書フラグメントには、次の情報が含まれています。サブ構成ファイルPHPスクリプトの場合。

var.www.slave.slave 構成ファイルのスケルトンは次のとおりです。

#include <tunables/global>

/var/www/gapapp/gap.wt {

  #include <abstractions/base>

  network inet stream,

  /var/www/slave/config r,
  /var/www/slave/exehelper/foo ix,
  /var/www/slave/db/* rw,

  ...
}

これらの設定ファイルを使用すると、スレーブはもはやmail同じユーティリティを呼び出すことはできませんsendmail

答え2

刑務所に閉じ込める別の方法があります。iptablesオーナーマッチング拡張機能を使用してください!

iptablesを使用すると、ユーザーに属するすべてのプロセスに対して発信(OUTPUT)ネットワークトラフィックをブロックできます。設定はとても簡単です。つまり、とても便利です。

これは、この簡単な設定により、ファイルシステムの場所とネットワーク上のスレーブプロセスを刑務所に配置できることを意味します。

$ iptables -N slave_chain
$ iptables -A slave_chain -m owner --uid-owner 10004 -p tcp --dport 1:1024 -j REJECT
$ iptables -A slave_chain -m owner --uid-owner 10004 -p tcp -d 127.0.0.1 -j ACCEPT
$ iptables -A slave_chain -m owner --uid-owner 10004 -j REJECT
$ iptables -A OUTPUT -j slave_chain

ここで、10004 は子ユーザーの uid です。スレーブはプロキシWebサーバー要求にのみ応答できます。スパムを送信するためにlocalhostポート25でMTAに接続しようとするなど、他のすべては拒否されます。

スレーブはmail、またはif availableなどのコマンドを介してメールを送信できますsendmail。これを行うには、fsの場所(chroot / cgroupsなど)に追加の脱獄が必要な場合、またはスレーブユーザーがメールを送信できないようにMTAを構成する必要があります。

答え3

Cgroupは投獄の一形態です。 2007年から、cgroupサブシステムにはいわゆるネットワークネームスペース

現在の配送船Linuxコンテナユーザースペースツールlxc-*、コマンドラインツールバー()、およびサンプル構成ファイル。また、ネットワーク名前空間の例も含まれています。

残念ながらUbuntu 10.04(LTS)最近のカーネルの更新により、ネットワーク名前空間が破損しています。

全体的に、lxcのドキュメントはそれほど長くなく、いくつかのサンプル設定ファイルを詳しく見てください。

ルートレスコンテナを設定するベストプラクティスが何であるかは不明です。

関連情報