SL6.4(RHEL 6.4再構築)Webサーバー上のさまざまなPHPアプリケーションを区分して、互いのデータにアクセスできないようにしたい。SELinuxはこれを実行できるようですが、詳細はわかりませんが、質問には2つの部分があります。
httpd_unified
をオフにし、httpd_ttrss_*
とhttpd_opencloud_*
と並行して、個別のhttpd_user_foo
とhttpd_sys_foo
のコンテキストセットを提供することでこれを実行できるはずです。使用できるアプリの数を考えると、新しいコンテキストなしでsys /ユーザーの区別を使用するだけで十分かもしれません。しかし、httpd_unified
をオフにすることの意味や、さまざまなHTTPコンテキストを設定する方法についてのドキュメントはあまり見つかりませんでした。特にPHPスクリプトはmod_php
を介して実行されます。新しいSELinuxポリシーモジュールを作成することは問題ありませんが、新しいポリシーを実行するために必要なことと、SELinuxターゲットポリシーとうまく統合する方法を示すドキュメントが必要です。
SELinuxだけでこの分離を行おうとすることが失われた原因であり、異なるコンテキストで別々のhttpdを起動する必要がある場合、またはLXCコンテナーでさえも、それも有用な答えになります。
このレベルの分離を実現する最良の方法は、タイプ遷移ではなく、カテゴリ/ MCS遷移を使用することです。これは、libvirt KVMのもののsvirt
実装のように少し機能します。
OK、最初に行う必要があるのは、mod_selinux
というhttpdモジュールをダウンロードすることです。それはかなり長い間Fedoraリポジトリに浮かんでいましたが、残念ながら実際にEL6システムに組み込まれたことはありません。
いずれの場合も、Fedoraソースからパッケージを再構築できます。私はFedoraマシンでこれを行いましたが、ミラーから同じパッケージをダウンロードすることができます。 httpd-2.2
を実行するため、ベースとしてF16を使用しました。
yumdownloader --source mod_selinux --releaserver=16
...
mod_selinux-2.2.2454-3.fc15.src.rpm | 23 kB 00:00
次に、ダウンロードしたら、EL6ボックスで再構築します。
rpmbuild --rebuild mod_selinux-2.2.2454-3.fc15.src.rpm
...
Wrote: /home/build/rpmbuild/RPMS/x86_64/mod_selinux-2.2.2454-3.el6.x86_64.rpm
最後にモジュールをインストールします。
rpm -i /home/build/rpmbuild/RPMS/x86_64/mod_selinux-2.2.2454-3.el6.x86_64.rpm
RPMは、必要なhttpd
のモジュールと、これを実行するためにも必要なhttpd
のポリシーをインストールします。
このモジュールのファイルは/etc/httpd/conf.d/mod_selinux.conf
にインストールされています。
このプロセスの最初の段階は、メインのhttpdプロセスが実行されるカテゴリの数を増やして、正しい範囲にまたがる子スレッドを生成できるようにすることです。ファイルの変更:
selinuxServerDomain *:s0
に
selinuxServerDomain *:s0-s0:c0.c1023
ここで、Apacheの各仮想ホストにカテゴリを割り当てる必要があります。これは、以下の例のようにselinuxDomainVal
という行を追加することによって行われます。
<VirtualHost *:80>
DocumentRoot /var/www/vhosts/Host1
ServerName Host1.virtual
selinuxDomainVal *:s0:c0
</VirtualHost>
<VirtualHost *:80>
DocumentRoot /var/www/vhosts/Host2
ServerName Host2.virtual
selinuxDomainVal *:s0:c1
</VirtualHost>
次に、各ホストのドキュメントルートで、ドキュメントルートのラベルをhttpd構成でラベル付けされたものと同じ同じカテゴリに変更します。
chcon -R -l s0:c0 /var/www/vhosts/Host1
chcon -R -l s0:c1 /var/www/vhosts/Host2
システムのラベルを変更した場合にラベルが適用されるようにする場合は、ローカルポリシーも更新することをお勧めします。
semanage fcontext -a -t httpd_sys_content_t -r s0-s0:c0 '/var/www/vhosts/Host1(/.*)?'
semanage fcontext -a -t httpd_sys_content_t -r s0-s0:c1 '/var/www/vhosts/Host2(/.*)?'
以上です!ドキュメントのルートを離れて、今すぐ他の人を探索することは不可能です。
この質問は7年前のものですが、上記の@MatthewIfeによる回答は役に立ちましたが、いくつかの追加手順が必要でした。箱から出してまだmod_selinux
が含まれていないCentOS8を使用しているので、上記の答えはそれをインストールするのに完璧でした。
ただし、インストール後、および正しいセットアップの後、ApacheはAVCテストに失敗し、起動しませんでした。 /var/log/httpd/error.log
、/var/log/messages
、および/var/log/audit/audit.log
で利用可能なエラーはあまり役に立ちませんでした。
最終的に、selinux AVCエラーのトラブルシューティングを可能にする2つの追加ユーティリティをインストールする必要がありました。これは、httpd
サービスがsetcurrent
コマンドにアクセスできるようにするカスタムポリシーを作成する必要があることを示しています。 selinuxで。
ここで解決策を見つけることができます: CentOS8でSELinuxコンテキストを使用したApache vhost特権分離
それが他の誰かがこれに出くわすのを助けることを願っています。