4.7. SELinux コンテキスト - ファイルのラベル付け
SELinux を実行しているシステムでは、セキュリティー関連の情報を表す方法で、すべてのプロセスとファイルにラベルが付けられます。この情報は SELinux コンテキストと呼ばれます。ファイルの場合は、ls -Z コマンドを使用して表示されます。
ls -Z file1 -rw-rw-r-- user1 group1 unconfined_u:object_r:user_home_t:s0 file1
~]$ ls -Z file1
-rw-rw-r-- user1 group1 unconfined_u:object_r:user_home_t:s0 file1
この例では、SELinux はユーザー (
unconfined_u)、ロール (object_r)、タイプ (user_home_t)、およびレベル (s0) を提供します。この情報は、アクセス制御の決定を行うために使用されます。DAC システムでは、アクセスは Linux ユーザーおよびグループ ID に基づいて制御されます。SELinux ポリシールールは、DAC ルールの後にチェックされます。DAC ルールがアクセスを拒否する場合は、SELinux ポリシールールは使用されません。
注記
デフォルトでは、新規作成されたファイルおよびディレクトリーは親ディレクトリーの SELinux タイプを継承します。たとえば、
etc_t タイプのラベルが付けられた /etc ディレクトリーに新しいファイルを作成する場合、新しいファイルは同じタイプを継承します。
ls -dZ - /etc drwxr-xr-x. root root system_u:object_r:etc_t:s0 /etc
~]$ ls -dZ - /etc
drwxr-xr-x. root root system_u:object_r:etc_t:s0 /etc
touch /etc/file1
~]# touch /etc/file1
ls -lZ /etc/file1 -rw-r--r--. root root unconfined_u:object_r:etc_t:s0 /etc/file1
~]# ls -lZ /etc/file1
-rw-r--r--. root root unconfined_u:object_r:etc_t:s0 /etc/file1
SELinux は、chcon、semanage fcontext、restorecon、および
matchpathcon など、ファイルシステムのラベリングを管理するための複数のコマンドを提供します。
4.7.1. 一時的な変更: chcon リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
chcon コマンドは、ファイルの SELinux コンテキストを変更します。ただし、chcon コマンドを使用して行った変更は、ファイルシステムのラベル変更や restorecon コマンドの実行後も維持されません。SELinux ポリシーは、ユーザーが任意のファイルの SELinux コンテキストを変更できるかどうかを制御します。chcon を使用すると、ユーザーは変更する SELinux コンテキストのすべてまたは一部を提供します。ファイルタイプは、SELinux がアクセスを拒否する一般的な原因です。
クイックリファレンス
- chcon -t type file-name コマンドを実行して、ファイルタイプを変更します。type は SELinux タイプです。たとえば、
httpd_sys_content_tで、file-name はファイルまたはディレクトリー名になります。chcon -t httpd_sys_content_t file-name
~]$ chcon -t httpd_sys_content_t file-nameCopy to Clipboard Copied! Toggle word wrap Toggle overflow - chcon -R -t type directory-name コマンドを実行して、ディレクトリーのタイプとそのコンテンツを変更します。type は SELinux タイプです。たとえば、
httpd_sys_content_tで、directory-name はディレクトリー名になります。chcon -R -t httpd_sys_content_t directory-name
~]$ chcon -R -t httpd_sys_content_t directory-nameCopy to Clipboard Copied! Toggle word wrap Toggle overflow
手順4.6 ファイルまたはディレクトリーのタイプの変更
次の手順は、タイプの変更を示しており、SELinux コンテキストの他の属性は示していません。このセクションの例では、
file1 がディレクトリーである場合など、ディレクトリーに対して同じように動作します。
- ホームディレクトリーに移動します。
- 新しいファイルを作成して、その SELinux コンテキストを表示します。
touch file1
~]$ touch file1Copy to Clipboard Copied! Toggle word wrap Toggle overflow ls -Z file1 -rw-rw-r-- user1 group1 unconfined_u:object_r:user_home_t:s0 file1
~]$ ls -Z file1 -rw-rw-r-- user1 group1 unconfined_u:object_r:user_home_t:s0 file1Copy to Clipboard Copied! Toggle word wrap Toggle overflow この例では、file1の SELinux コンテキストには、SELinux のunconfined_uユーザー、object_rロール、user_home_tタイプ、およびs0レベルが含まれます。SELinux コンテキストの各部分の説明は、2章SELinux コンテキスト を参照してください。 - 次のコマンドを実行して、タイプを
samba_share_tに変更します。-tオプションはタイプを変更します。次に、変更を表示します。chcon -t samba_share_t file1
~]$ chcon -t samba_share_t file1Copy to Clipboard Copied! Toggle word wrap Toggle overflow ls -Z file1 -rw-rw-r-- user1 group1 unconfined_u:object_r:samba_share_t:s0 file1
~]$ ls -Z file1 -rw-rw-r-- user1 group1 unconfined_u:object_r:samba_share_t:s0 file1Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 以下のコマンドを使用して、
file1ファイルの SELinux コンテキストを復元します。変更を確認するには、-vオプションを使用します。restorecon -v file1 restorecon reset file1 context unconfined_u:object_r:samba_share_t:s0->system_u:object_r:user_home_t:s0
~]$ restorecon -v file1 restorecon reset file1 context unconfined_u:object_r:samba_share_t:s0->system_u:object_r:user_home_t:s0Copy to Clipboard Copied! Toggle word wrap Toggle overflow この例では、前のタイプsamba_share_tは正しいタイプuser_home_tタイプに復元されます。Targeted ポリシー (Red Hat Enterprise Linux のデフォルトの SELinux ポリシー) を使用する場合、restorecon コマンドは/etc/selinux/targeted/contexts/files/ディレクトリーのファイルを読み取り、どの SELinux コンテキストファイルが存在するかを確認します。
手順4.7 ディレクトリーとそのコンテンツタイプの変更
以下の例は、新しいディレクトリーを作成し、そのディレクトリーのファイルタイプを Apache HTTP Server が使用するタイプに変更します。この例での設定は、Apache HTTP サーバーが、(
/var/www/html/ の代わりに) 別のドキュメント root を使用する場合に使用します。
- root ユーザーとして、このディレクトリー内に新しい
web/ディレクトリーを作成し、3 つの空のファイル (file1、file2、およびfile3) を作成します。web/ディレクトリーおよびそのファイルには、default_tタイプのラベルが付けられます。mkdir /web
~]# mkdir /webCopy to Clipboard Copied! Toggle word wrap Toggle overflow touch /web/file{1,2,3}~]# touch /web/file{1,2,3}Copy to Clipboard Copied! Toggle word wrap Toggle overflow ls -dZ /web drwxr-xr-x root root unconfined_u:object_r:default_t:s0 /web
~]# ls -dZ /web drwxr-xr-x root root unconfined_u:object_r:default_t:s0 /webCopy to Clipboard Copied! Toggle word wrap Toggle overflow 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
~]# 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 file3Copy to Clipboard Copied! Toggle word wrap Toggle overflow - root で次のコマンドを実行して、
web/ディレクトリー (とそのコンテンツ) のタイプをhttpd_sys_content_tに変更します。chcon -R -t httpd_sys_content_t /web/
~]# chcon -R -t httpd_sys_content_t /web/Copy to Clipboard Copied! Toggle word wrap Toggle overflow ls -dZ /web/ drwxr-xr-x root root unconfined_u:object_r:httpd_sys_content_t:s0 /web/
~]# ls -dZ /web/ drwxr-xr-x root root unconfined_u:object_r:httpd_sys_content_t:s0 /web/Copy to Clipboard Copied! Toggle word wrap Toggle overflow ls -lZ /web/ -rw-r--r-- root root unconfined_u:object_r:httpd_sys_content_t:s0 file1 -rw-r--r-- root root unconfined_u:object_r:httpd_sys_content_t:s0 file2 -rw-r--r-- root root unconfined_u:object_r:httpd_sys_content_t:s0 file3
~]# ls -lZ /web/ -rw-r--r-- root root unconfined_u:object_r:httpd_sys_content_t:s0 file1 -rw-r--r-- root root unconfined_u:object_r:httpd_sys_content_t:s0 file2 -rw-r--r-- root root unconfined_u:object_r:httpd_sys_content_t:s0 file3Copy to Clipboard Copied! Toggle word wrap Toggle overflow - デフォルトの SELinux コンテキストを復元するには、root で
restoreconユーティリティーを使用します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow
chcon の詳細は、chcon(1) man ページを参照してください。
注記
Type Enforcement は、SELinux の Targeted ポリシーで使用される主要なパーミッション制御です。ほとんどの場合、SELinux のユーザーとロールは無視できます。
4.7.2. 永続的な変更 - semanage fcontext リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
semanage fcontext コマンドは、ファイルの SELinux コンテキストを変更するのに使用します。新しく作成したファイルおよびディレクトリーのコンテキストを表示するには、root で以下のコマンドを実行します。
semanage fcontext -C -l
~]# semanage fcontext -C -l
semanage fcontext が加えた変更は、以下のユーティリティーで使用されます。
setfiles ユーティリティーは、ファイルシステムに再ラベル付けされ、restorecon ユーティリティーがデフォルトの SELinux コンテキストを復元するときに使用されます。つまり、ファイルシステムが再ラベル付けされても、semanage fcontext による変更は永続します。SELinux ポリシーは、ユーザーが任意のファイルの SELinux コンテキストを変更できるかどうかを制御します。
クイックリファレンス
ファイルシステムの再ラベル付け後に SELinux コンテキストを変更するには、以下のコマンドを実行します。
- 次のコマンドを入力します。ファイルまたはディレクトリーのフルパスを使用することを忘れないでください。
semanage fcontext -a options file-name|directory-name
~]# semanage fcontext -a options file-name|directory-nameCopy to Clipboard Copied! Toggle word wrap Toggle overflow restoreconユーティリティーを使用して、コンテキストの変更を適用します。restorecon -v file-name|directory-name
~]# restorecon -v file-name|directory-nameCopy to Clipboard Copied! Toggle word wrap Toggle overflow
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
~]# touch /etc/file1Copy to Clipboard Copied! Toggle word wrap Toggle overflow ls -Z /etc/file1 -rw-r--r-- root root unconfined_u:object_r:etc_t:s0 /etc/file1
~]$ ls -Z /etc/file1 -rw-r--r-- root root unconfined_u:object_r:etc_t:s0 /etc/file1Copy to Clipboard Copied! Toggle word wrap Toggle overflow ディレクトリーの情報をリスト表示するには、次のコマンドを使用します。ls -dZ directory_name
~]$ ls -dZ directory_nameCopy to Clipboard Copied! Toggle word wrap Toggle overflow - root で次のコマンドを実行して、
file1タイプをsamba_share_tに変更します。-aオプションは新しいレコードを追加し、-tオプションはタイプ (samba_share_t) を定義します。このコマンドを実行すると、タイプを直接変更しません。file1には、まだetc_tタイプのラベルが付けられています。semanage fcontext -a -t samba_share_t /etc/file1
~]# semanage fcontext -a -t samba_share_t /etc/file1Copy to Clipboard Copied! Toggle word wrap Toggle overflow ls -Z /etc/file1 -rw-r--r-- root root unconfined_u:object_r:etc_t:s0 /etc/file1
~]# ls -Z /etc/file1 -rw-r--r-- root root unconfined_u:object_r:etc_t:s0 /etc/file1Copy to Clipboard Copied! Toggle word wrap Toggle overflow semanage fcontext -C -l /etc/file1 unconfined_u:object_r:samba_share_t:s0
~]$ semanage fcontext -C -l /etc/file1 unconfined_u:object_r:samba_share_t:s0Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 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
~]# restorecon -v /etc/file1 restorecon reset /etc/file1 context unconfined_u:object_r:etc_t:s0->system_u:object_r:samba_share_t:s0Copy to Clipboard Copied! Toggle word wrap Toggle overflow
手順4.9 ディレクトリーとそのコンテンツタイプの変更
以下の例は、新しいディレクトリーを作成し、そのディレクトリーのファイルタイプを Apache HTTP サーバーが使用するタイプに変更します。この例の設定は、Apache HTTP サーバーで、
/var/www/html/ の代わりに別のドキュメント root を使用する場合に使用します。
- root ユーザーとして、このディレクトリー内に新しい
web/ディレクトリーを作成し、3 つの空のファイル (file1、file2、およびfile3) を作成します。web/ディレクトリーおよびそのファイルには、default_tタイプのラベルが付けられます。mkdir /web
~]# mkdir /webCopy to Clipboard Copied! Toggle word wrap Toggle overflow touch /web/file{1,2,3}~]# touch /web/file{1,2,3}Copy to Clipboard Copied! Toggle word wrap Toggle overflow ls -dZ /web drwxr-xr-x root root unconfined_u:object_r:default_t:s0 /web
~]# ls -dZ /web drwxr-xr-x root root unconfined_u:object_r:default_t:s0 /webCopy to Clipboard Copied! Toggle word wrap Toggle overflow 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
~]# 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 file3Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 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(/.*)?"
~]# semanage fcontext -a -t httpd_sys_content_t "/web(/.*)?"Copy to Clipboard Copied! Toggle word wrap Toggle overflow ls -dZ /web drwxr-xr-x root root unconfined_u:object_r:default_t:s0 /web
~]$ ls -dZ /web drwxr-xr-x root root unconfined_u:object_r:default_t:s0 /webCopy to Clipboard Copied! Toggle word wrap Toggle overflow 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
~]$ 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 file3Copy to Clipboard Copied! Toggle word wrap Toggle overflow semanage 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
/web(/.*)? system_u:object_r:httpd_sys_content_t:s0Copy to Clipboard Copied! Toggle word wrap Toggle overflow - root で
restoreconユーティリティーを使用して、web/のタイプと、その中のすべてのファイルを変更します。-Rは再帰用です。これは、web/の下にあるすべてのファイルおよびディレクトリーにhttpd_sys_content_tタイプのラベルが付けられることを意味します。semanageにより、/web(/.*)?のfile.contexts.localにエントリーが追加されたため、restoreconによりタイプがhttpd_sys_content_tに変わります。Copy to Clipboard Copied! Toggle word wrap Toggle overflow デフォルトでは、新規作成されたファイルおよびディレクトリーは親ディレクトリーの SELinux タイプを継承する点に注意してください。
手順4.10 追加したコンテキストの削除
以下の例では、SELinux コンテキストの追加および削除を示しています。
/web(/.*)? のように、コンテキストが正規表現の一部である場合は、正規表現を引用符で囲んでください。
semanage fcontext -d "/web(/.*)?"
~]# semanage fcontext -d "/web(/.*)?"
- コンテキストを削除するには、root で次のコマンドを実行します。
file_contexts.localの最初の部分は file-name|directory-name です。semanage fcontext -d file-name|directory-name
~]# semanage fcontext -d file-name|directory-nameCopy to Clipboard Copied! Toggle word wrap Toggle overflow 以下は、file_contexts.localのコンテキストの例になります。/test system_u:object_r:httpd_sys_content_t:s0
/test system_u:object_r:httpd_sys_content_t:s0Copy to Clipboard Copied! Toggle word wrap Toggle overflow 最初のパートはtestです。restorecon の実行後、またはファイルシステムの再ラベル付け後に、test/ディレクトリーにhttpd_sys_content_tのラベルが付けられないようにするには、root で次のコマンドを実行して、file_contexts.localからコンテキストを削除します。semanage fcontext -d /test
~]# semanage fcontext -d /testCopy to Clipboard Copied! Toggle word wrap Toggle overflow - root で、
restoreconユーティリティーを使用して、デフォルトの SELinux コンテキストを復元します。
semanage の詳細は、semanage(8) および semanage-fcontext(8) の man ページを参照してください。
重要
semanage fcontext -a で SELinux コンテキストを変更する場合は、ファイルシステムの再ラベル付け後や restorecon コマンドの実行後にファイルに間違ったラベル付けが行われないように、ファイルまたはディレクトリーのフルパスを使用します。
4.7.3. ファイルコンテキストの決定方法 リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
ファイルコンテキストの判断は、システムセキュリティーポリシー (
.fcファイル) で指定されているファイルコンテキスト定義に基づいて行われます。semanage は、システムポリシーに基づいて、file_contexts.homedirs ファイルと file_contexts ファイルを生成します。
システム管理者は、semanage fcontext コマンドを使用して、ファイルコンテキストの定義をカスタマイズできます。このようなカスタマイズは、
file_contexts.local ファイルに保存されます。
matchpathcon または restorecon などのラベリングユーティリティーが、指定されたパスに適したラベルを決定する場合は、最初にローカル変更 (file_contexts.local) を検索します。一致するパターンが見つからない場合は、file_contexts.homedirsファイルが検索され、最後にfile_contextsファイルが検索されます。ただし、指定したファイルパスに一致するものが見つかると、検索が終了します。このユーティリティーは、追加の file-context 定義を検索します。つまり、ホームディレクトリー関連のファイルコンテキストの優先度は、その他のファイルコンテキストの優先度よりも高く、ローカルのカスタマイズによりシステムポリシーが上書きされます。
system policy で指定されるファイルコンテキストの定義 (file_contexts.homedirs ファイルおよび file_contexts ファイルのコンテンツ) は、評価前に stem (ワイルドカードの前のパスの接頭辞) の長さでソートされます。つまり、最も具体的なパスが選択されます。ただし、semanage fcontext を使用して指定したファイルコンテキスト定義は、定義された方法とは逆の順序で評価されます。つまり、直近のエントリーは、stem の長さに関係なく最初に評価されます。
詳細は、以下を参照してください。
chconを使用してファイルコンテキストを変更する方法は、「一時的な変更: chcon」 を参照してください。- semanage fcontext を使用したファイルコンテキストの定義の変更および追加は、「永続的な変更 - semanage fcontext」 を参照してください。
- システムポリシーオペレーションを介してファイルコンテキスト定義を変更して追加する場合は、「SELinux ラベルの維持」 または 「SELinux ポリシーモジュールの優先付けと無効化」 を参照してください。