web-dev-qa-db-ja.com

マルチジェイル/ var分離

動的なWebサイトを提供するために、FreeBSDで複数の刑務所を設定しています。ホスト環境には、HTTPホストヘッダーに基づいて接続をディスパッチするWebサーバーがあり、各jailにはサイトごとのデータを含む/ var/lib/www-dbディレクトリがあります。

問題は、テンプレートjailを実際のjailのディレクトリにmount_nullfsすることで、複数のjailを作成していることです。また、/ var/lib/www-dbを個別にマウントしましたが、jailは/ var/logなどを共有しています。/var階層内のディレクトリ。

これは/ var/logと他のいくつかのディレクトリを共有することでセキュリティ上の懸念があることを理解しているので、私の質問は

  • 複数の刑務所を設置する際のベストプラクティスは何ですか?

更新

私はZFSを使用しました:刑務所に/ var/lib/www-dbとしてマウントされるサブディレクトリを含む2つの大きなディスクのzpoolがあります。

1
DannyNiu

FreeBSDで「テンプレート」をそのまま維持しながら、jailがそのルート(両方とも重要な/ varと/ tmpを含む)を変更できるようにする簡単な解決策があります。

手順:

  1. ここでは<jail-root>として示されるjailのルートディレクトリを作成します

  2. 次のコマンドを使用して、unionfs "below" <jail-root>を使用してテンプレートディレクトリをマウントします。

    mount_unionfs -o below <template> <jail-root>

このように、各jailにはルート階層全体が使用可能であり、ストレージをあまり消費せずに段階的に書き込むことができます。

参照

FreeBSDのマニュアルページ

Uniondirでオブジェクトを作成または変更する要求は、いくつかの特別な場合を除いて、上位層に渡されます。下位層に存在するファイルを書き込むために開こうとすると、ファイル全体のコピーが上位層に作成され、次に上位層のコピーが開かれます。同様に、下位層のファイルを長さゼロに切り捨てようとすると、上位層に空のファイルが作成されます。最終的に下位層への変更を必要とするその他の操作は、EROFSで失敗します。

1
DannyNiu