web-dev-qa-db-ja.com

シンボリックリンクのあるパスにSELinuxファイルコンテキストを適用できません

エンタープライズ環境にインストールされているソリューションがあります。ソリューションとその展開ガイドは、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を使用してシンボリックリンクに割り当て、再ラベル付け後も持続するようにするにはどうすればよいですか? コンテキストをに適用するのではなく、シンボリックリンクされたディレクトリからサブディレクトリ内のファイルにコンテキストを適用することに関するものなので、シンボリックリンクファイル自体。

2
prcjac

デプロイメントガイドのrealpathコマンドを使用して、手順が一般的であることを確認できますが、実際のファイルシステムの場所にコンテキストを適用できます。

`realpath "/opt/product/wwwstatic"`
4
Stephen White

SELinuxファイルコンテキストは、実際のファイルシステムパスに基づいて一致します。 「シンボリックリンクをたどる」というものはありません。したがって、カスタムコンテキストは、ディスク上の実際の場所を参照する必要があります。

サードパーティアプリケーションの標準的な場所is/opt、あなたはここで正しいです。標準外のことをしたいクライアントがいる場合は、彼らが間違ったことをしていることと、その追加コスト(時間とお金)がどうなるかを明確にする必要があります。

3
Michael Hampton

Chconで-hフラグを使用します。

chcon -h -v system_u:object_r:httpd_sys_content_t:s0 *