4.7.2. 永続的な変更 - semanage fcontext
semanage fcontext コマンドは、ファイルの SELinux コンテキストを変更するのに使用します。新しく作成したファイルおよびディレクトリーのコンテキストを表示するには、root で以下のコマンドを実行します。
~]# semanage fcontext -C -l
semanage fcontext が加えた変更は、以下のユーティリティーで使用されます。
setfiles
ユーティリティーは、ファイルシステムに再ラベル付けされ、restorecon
ユーティリティーがデフォルトの SELinux コンテキストを復元するときに使用されます。つまり、ファイルシステムが再ラベル付けされても、semanage fcontext による変更は永続します。SELinux ポリシーは、ユーザーが任意のファイルの SELinux コンテキストを変更できるかどうかを制御します。
クイックリファレンス
ファイルシステムの再ラベル付け後に SELinux コンテキストを変更するには、以下のコマンドを実行します。
- 次のコマンドを入力します。ファイルまたはディレクトリーのフルパスを使用することを忘れないでください。
~]#
semanage fcontext -a options file-name|directory-name restorecon
ユーティリティーを使用して、コンテキストの変更を適用します。~]#
restorecon -v file-name|directory-name
semanage fcontext での正規表現の使用
semanage fcontext が適切に機能するようにするためには、完全修飾パスまたは Perl-compatible regular expressions (PCRE) を使用できます。使用されている唯一のPCRE フラグは
PCRE2_DOTALL
です。これにより、.
ワイルドカードは、改行を含むあらゆるものにマッチします。パスを表す文字列はバイトとして処理されます。つまり、ASCII 以外の文字は、1 つのワイルドカードで一致しません。
semanage fcontext を使用して指定したファイルコンテキストの定義は、定義方法が逆順で評価されることに注意してください。定義方法は、stem の長さに関係なく、直近のエントリーが最初に評価されます。
file_contexts.local
に保存されているローカルファイルコンテキストの変更の優先度は、ポリシーモジュールで指定されているものよりも高くなります。つまり、指定したファイルパスが file_contexts.local
で一致するものが見つかるたびに、その他のファイルコンテキスト定義は考慮されません。
重要
semanage fcontext コマンドを使用して指定したファイルコンテキスト定義は、他のすべてのファイルコンテキスト定義を効果的に上書きします。したがって、ファイルシステムの他の部分に意図せず影響を与えないように、すべての正規表現は可能な限り具体的にする必要があります。
file-context 定義とフラグで使用される正規表現のタイプの詳細は、man ページの
semanage-fcontext(8)
を参照してください。
手順4.8 ファイルまたはディレクトリーのタイプの変更
以下の例は、ファイルのタイプを変更する方法を示していますが、SELinux コンテキストの他の属性はありません。この例は、
file1
がディレクトリーであった場合など、ディレクトリーに対しても同じように機能します。
- root ユーザーで、
/etc
ディレクトリーに新しいファイルを作成します。デフォルトでは、/etc
に新規に作成されたファイルにはetc_t
タイプのラベルが付けられます。~]#
touch /etc/file1~]$
ls -Z /etc/file1 -rw-r--r-- root root unconfined_u:object_r:etc_t:s0 /etc/file1ディレクトリーの情報を一覧表示するには、次のコマンドを使用します。~]$
ls -dZ directory_name - root で次のコマンドを実行して、
file1
タイプをsamba_share_t
に変更します。-a
オプションは新しいレコードを追加し、-t
オプションはタイプ (samba_share_t
) を定義します。このコマンドを実行すると、タイプを直接変更しません。file1
には、まだetc_t
タイプのラベルが付けられています。~]#
semanage fcontext -a -t samba_share_t /etc/file1~]#
ls -Z /etc/file1 -rw-r--r-- root root unconfined_u:object_r:etc_t:s0 /etc/file1~]$ semanage fcontext -C -l /etc/file1 unconfined_u:object_r:samba_share_t:s0
- root で
restorecon
ユーティリティーを使用してタイプを変更します。semanage
により、/etc/file1
のfile_contexts.local
にエントリーが追加されたため、restorecon
によりタイプがsamba_share_t
に変わります。~]#
restorecon -v /etc/file1 restorecon reset /etc/file1 context unconfined_u:object_r:etc_t:s0->system_u:object_r:samba_share_t:s0
手順4.9 ディレクトリーとそのコンテンツタイプの変更
以下の例は、新しいディレクトリーを作成し、そのディレクトリーのファイルタイプを Apache HTTP サーバーが使用するタイプに変更します。この例の設定は、Apache HTTP サーバーで、
/var/www/html/
の代わりに別のドキュメント root を使用する場合に使用します。
- root ユーザーとして、このディレクトリー内に新しい
web/
ディレクトリーを作成し、3 つの空のファイル (file1
、file2
、およびfile3
) を作成します。web/
ディレクトリーおよびそのファイルには、default_t
タイプのラベルが付けられます。~]#
mkdir /web~]#
touch /web/file{1,2,3}~]#
ls -dZ /web drwxr-xr-x root root unconfined_u:object_r:default_t:s0 /web~]#
ls -lZ /web -rw-r--r-- root root unconfined_u:object_r:default_t:s0 file1 -rw-r--r-- root root unconfined_u:object_r:default_t:s0 file2 -rw-r--r-- root root unconfined_u:object_r:default_t:s0 file3 - root で次のコマンドを実行して、
web/
ディレクトリーのタイプとその中のファイルをhttpd_sys_content_t
に変更します。-a
オプションは新しいレコードを追加し、-t
オプションはタイプを定義します (httpd_sys_content_t
)。"/web(/.*)?"
正規表現を使用すると、semanage
は、web/
およびその中のファイルに変更を適用します。このコマンドを実行しても、タイプを直接変更しません。web/
ファイルおよびこのファイルには、default_t
タイプのラベルが付けられます。~]#
semanage fcontext -a -t httpd_sys_content_t "/web(/.*)?"~]$
ls -dZ /web drwxr-xr-x root root unconfined_u:object_r:default_t:s0 /web~]$
ls -lZ /web -rw-r--r-- root root unconfined_u:object_r:default_t:s0 file1 -rw-r--r-- root root unconfined_u:object_r:default_t:s0 file2 -rw-r--r-- root root unconfined_u:object_r:default_t:s0 file3semanage fcontext -a -t httpd_sys_content_t "/web(/.*)?" コマンドは、以下のエントリーを/etc/selinux/targeted/contexts/files/file_contexts.local
に追加します。/web(/.*)? system_u:object_r:httpd_sys_content_t:s0
- root で
restorecon
ユーティリティーを使用して、web/
のタイプと、その中のすべてのファイルを変更します。-R
は再帰用です。これは、web/
の下にあるすべてのファイルおよびディレクトリーにhttpd_sys_content_t
タイプのラベルが付けられることを意味します。semanage
により、/web(/.*)?
のfile.contexts.local
にエントリーが追加されたため、restorecon
によりタイプがhttpd_sys_content_t
に変わります。~]#
restorecon -R -v /web restorecon reset /web context unconfined_u:object_r:default_t:s0->system_u:object_r:httpd_sys_content_t:s0 restorecon reset /web/file2 context unconfined_u:object_r:default_t:s0->system_u:object_r:httpd_sys_content_t:s0 restorecon reset /web/file3 context unconfined_u:object_r:default_t:s0->system_u:object_r:httpd_sys_content_t:s0 restorecon reset /web/file1 context unconfined_u:object_r:default_t:s0->system_u:object_r:httpd_sys_content_t:s0デフォルトでは、新規作成されたファイルおよびディレクトリーは親ディレクトリーの SELinux タイプを継承する点に注意してください。
手順4.10 追加したコンテキストの削除
以下の例では、SELinux コンテキストの追加および削除を示しています。
/web(/.*)?
のように、コンテキストが正規表現の一部である場合は、正規表現を引用符で囲んでください。
~]#
semanage fcontext -d "/web(/.*)?"
- コンテキストを削除するには、root で次のコマンドを実行します。
file_contexts.local
の最初の部分は file-name|directory-name です。~]#
semanage fcontext -d file-name|directory-name以下は、file_contexts.local
のコンテキストの例になります。/test system_u:object_r:httpd_sys_content_t:s0
最初のパートはtest
です。restorecon の実行後、またはファイルシステムの再ラベル付け後に、test/
ディレクトリーにhttpd_sys_content_t
のラベルが付けられないようにするには、root で次のコマンドを実行して、file_contexts.local
からコンテキストを削除します。~]#
semanage fcontext -d /test - root で、
restorecon
ユーティリティーを使用して、デフォルトの SELinux コンテキストを復元します。
semanage の詳細は、semanage(8) および semanage-fcontext(8) の man ページを参照してください。
重要
semanage fcontext -a で SELinux コンテキストを変更する場合は、ファイルシステムの再ラベル付け後や restorecon コマンドの実行後にファイルに間違ったラベル付けが行われないように、ファイルまたはディレクトリーのフルパスを使用します。