エンタープライズ環境にインストールされているソリューションがあります。ソリューションとその展開ガイドは、SELinuxが有効になっているRHEL7/CentOS7サーバーにインストールされ、コンポーネントがファイルシステム階層標準に従って場所にインストールされるように設計されています。
しかし、クライアントの1人は、すべてのサードパーティソリューションをポリシーに従ってバックアップするため、/apps
ディレクトリにインストールする必要があると述べて驚いています。
この特定のクライアントの逸脱を回避するために、ソリューションに大幅な変更が必要になるため、/apps
ディレクトリに/opt
の新しいディレクトリを作成し、真からシンボリックリンクを事前に作成するのが最善のアプローチであると判断しました。 /opt
そして同じSELinuxコンテンツをそれに適用します(usr_t
)例:
ls -laZ /appl/opt
drwxr-xr-x. root root unconfined_u:object_r:usr_t:s0 .
drwxr-xr-x. root root unconfined_u:object_r:default_t:s0 ..
drwxr-xr-x. product product unconfined_u:object_r:usr_t:s0 product
la -laZ /opt
drwxr-xr-x. root root system_u:object_r:usr_t:s0 .
dr-xr-xr-x. root root system_u:object_r:root_t:s0 ..
lrwxrwxrwx. root root unconfined_u:object_r:usr_t:s0 product -> /apps/opt/product/
製品の特定のコンポーネントはApacheHTTPDを介してアクセスされ、それらにhttpd_sys_content_t
コンテキストを適用する必要があります。
ファイルは/opt/product/wwwstatic/
(実際には/apps/opt/product/wwwstatic/
)にあります。
展開ガイドでは、実行する次のコマンドを指定しています。
semanage fcontext -a -t httpd_sys_content_t "/opt/product/wwwstatic/*"
restorecon -Rv /opt/product/wwwstatic
これは標準インストールでコンテキストを復元しますが、この環境では、シンボリックリンクが原因で失敗します。
/apps
ディレクトリを含めるようにコマンドを変更すると、機能しますが、一般的なアプローチから逸脱します。
/etc/selinux/targeted/contexts/files/file_contexts.local
の内容は次のとおりです。
# This file is auto-generated by libsemanage
# Do not edit directly.
/appl/opt/.* system_u:object_r:usr_t:s0
/appl/srv/.* system_u:object_r:var_t:s0
/opt/product/wwwstatic/* system_u:object_r:httpd_sys_content_t:s0
semanage
またはrestorecon
コマンドの引数を変更して、これがシンボリックリンク(および通常)で機能するようにする方法はありますか、それともSELinuxがファイルコンテキストを適用する方法について根本的な誤解がありますか?
この質問は SELinuxラベルをsemanageを使用してシンボリックリンクに割り当て、再ラベル付け後も持続するようにするにはどうすればよいですか? コンテキストをに適用するのではなく、シンボリックリンクされたディレクトリからサブディレクトリ内のファイルにコンテキストを適用することに関するものなので、シンボリックリンクファイル自体。
デプロイメントガイドのrealpath
コマンドを使用して、手順が一般的であることを確認できますが、実際のファイルシステムの場所にコンテキストを適用できます。
`realpath "/opt/product/wwwstatic"`
SELinuxファイルコンテキストは、実際のファイルシステムパスに基づいて一致します。 「シンボリックリンクをたどる」というものはありません。したがって、カスタムコンテキストは、ディスク上の実際の場所を参照する必要があります。
サードパーティアプリケーションの標準的な場所is/opt
、あなたはここで正しいです。標準外のことをしたいクライアントがいる場合は、彼らが間違ったことをしていることと、その追加コスト(時間とお金)がどうなるかを明確にする必要があります。
Chconで-hフラグを使用します。
chcon -h -v system_u:object_r:httpd_sys_content_t:s0 *