Show Table of Contents
このページには機械翻訳が使用されている場合があります (詳細はこちら)。
4.9. ファイルシステムのマウント
デフォルトでは、拡張属性をサポートするファイルシステムがマウントされる際は、各ファイルのセキュリティー-コンテキストがファイルの security.selinux 拡張属性から取得されます。拡張属性をサポートしないファイルシステムのファイルは、ファイルシステムタイプに基づいて、ポリシー設定から単一のデフォルト設定コンテキストが割り当てられます。
既存の拡張属性を上書きしたり、拡張属性をサポートしないファイルシステムの異なるデフォルトコンテキストを特定するには、
mount -o context
コマンドを使います。例えば、複数システムで使用するリムーバブルメディアなどの正しい属性を提供するファイルシステムを信頼できない場合に、これは便利です。mount -o context
コマンドは、File Allocation Table (FAT) や NFS ボリュームなど、拡張属性をサポートしないファイルシステムのラベル付けのサポートにも使用できます。context
オプションで指定されたコンテキストは、ディスクに書き込まれません。最初にファイルシステムが拡張属性を持っている場合、オリジナルのコンテキストは保持され、context
なしでマウントされるとこれを見ることができます。
ファイルシステムのラベル付けに関する情報については、James Morris の記事「Filesystem Labeling in SELinux」(http://www.linuxjournal.com/article/7426) を参照してください。
4.9.1. コンテキストのマウント
ファイルシステムを指定されたコンテキストでマウントする、または既存のコンテキストがある場合はこれを上書きする、拡張属性をサポートしないファイルシステムの異なるデフォルトのコンテキストを指定するには、必要なファイルシステムのマウント時に root で
mount -o context=SELinux_user:role:type:level
コマンドを実行します。コンテキストの変更は、ディスクに書き込まれません。デフォルトでは、クライアント側の NFS マウントは、NFS ボリュームのポリシーで定義されたデフォルトのコンテキストでラベル付けされます。共通ポリシーでは、このデフォルトのコンテキストは nfs_t
タイプを使います。追加のマウントオプションがないと、これによって Apache HTTP Server などの他のサービスを使用する NFS ボリュームを共有することが妨げられる可能があります。以下の例では NFS ボリュームをマウントすることで、Apache HTTP Server を使用して共有できるようになっています。
~]#
mount server:/export /local/mount/point -o \ context="system_u:object_r:httpd_sys_content_t:s0"
このファイルシステムにある新規作成ファイルおよびディレクトリーには、
-o context
で指定された SELinux コンテキストがあるように見えます。しかし、これらの変更はディスクに書き込まれていないため、このオプションで指定されたコンテキストは新たなマウントがあると維持されません。このため、このオプションのコンテキストを保持するには、マウント時に指定されたものと同一のコンテキストと使用する必要があります。コンテキストを新たなマウントの後にも維持する方法は、「コンテキストのマウントを永続的にする」を参照してください。
Type Enforcement は、SELinux ターゲットポリシーで使われる主要なパーミッション制御です。ほとんどの場合、SELinux ユーザーとロールは無視することができます。このため、
-o context
で SELinux コンテキストを上書きする際は、SELinux system_u
ユーザーと object_r
ロールを使って、このタイプに集中させます。MLS ポリシーや複数カテゴリのセキュリティーを使用していない場合は、s0
レベルを使います。
注記
ファイルシステムを
context
オプションでマウントする場合は、ユーザーやプロセスによるコンテキスト変更は禁止されます。例えば、context
オプションでマウントされたファイルシステム上で chcon
コマンドを実行すると、Operation not supported
エラーが出ます。
4.9.2. デフォルトコンテキストの変更
「file_t および default_t タイプ」の説明にあるように、拡張属性をサポートするファイルシステムでは、ディスク上に SELinux コンテキストがないファイルにアクセスがあった場合、SELinux ポリシーが定義するデフォルトのコンテキストを持っているものとして扱われます。共通ポリシーでは、このデフォルトのコンテキストは
file_t
タイプを使います。別のデフォルトコンテキストが望ましい場合は、defcontext
オプションでファイルシステムをマウントします。
以下の例では、
/dev/sda2
上で新規作成されたファイルを新規作成の test/
ディレクトリーにマウントします。ここでは、test/
ディレクトリーを定義するルールが /etc/selinux/targeted/contexts/files/
にないことを前提としています。
~]#
mount /dev/sda2 /test/ -o defcontext="system_u:object_r:samba_share_t:s0"
この例では、以下のように設定されています。
- マウント時に、ファイルシステムの root ディレクトリー (
test/
) は、defcontext
が指定するコンテキストでラベル付けされたかのように扱われます (このラベルはディスク上で保存されない)。これは、test/
下で作成されたファイルのラベリングに影響します。新規作成ファイルはsamba_share_t
タイプを継承し、これらのラベルはディスク上で保存されます。 defcontext
オプションでファイルシステムがマウントされている間にtest/
下で作成されたファイルは、そのラベルを保持します。
4.9.3. NFS ボリュームのマウント
デフォルトでは、クライアント側の NFS マウントは、NFS ボリュームのポリシーで定義されたデフォルトのコンテキストでラベル付けされます。共通ポリシーでは、このデフォルトのコンテキストは、
nfs_t
タイプを使用します。ポリシー設定によっては、Apache HTTP Server や MariaDB などのサービスは nfs_t
タイプのラベルが付けられたファイルを読み取れない場合もあります。これにより、このタイプのラベルが付いたファイルシステムがマウントされて、他のサービスがこれを読み取ったりエクスポートしたりすることを防ぐことができます。
NFS ボリュームをマウントし、別のサービスでこれを読み取ったりエクスポートしたい場合は、マウントの際に
context
オプションを使って nfs_t
タイプを上書きします。以下のコンテキストオプションを使って NFS ボリュームをマウントすることで、Apache HTTP Server を使用して共有することが可能になります。
~]#
mount server:/export /local/mount/point -o context="system_u:object_r:httpd_sys_content_t:s0"
これらの変更はディスクに書き込まれないため、このオプションで指定されたコンテキストは新たなマウントがあると維持されません。このため、このオプションのコンテキストを保持するには、マウント時に指定されたものと同一のコンテキストと使用する必要があります。コンテキストを新たなマウントの後にも維持する方法は、「コンテキストのマウントを永続的にする」を参照してください。
context
オプションを使ったファイルシステムのマウントの代替方法として、ブール値を有効にして nfs_t
タイプのラベルが付いたファイルシステムへのサービスのアクセスを許可することもできます。nfs_t
タイプへのサービスのアクセスを許可するブール値の設定については、パートII「制限のあるサービスの管理」を参照してください。
4.9.4. 複数の NFS マウント
同一の NFS エクスポートから複数のマウントを行う場合、各マウントの SELinux コンテキストを異なるコンテキストで上書きしようとすると、マウントコマンドの失敗につながります。以下の例では、NFS サーバーには単一エクスポートである
export/
があり、これには web/
と database/
の 2 つのサブディレクトリーがあります。以下のコマンドで単一 NFS エクスポートから 2 つのマウントを試みて、それぞれのコンテキストを上書きしようとします。
~]#
mount server:/export/web /local/web -o context="system_u:object_r:httpd_sys_content_t:s0"
~]#
mount server:/export/database /local/database -o context="system_u:object_r:mysqld_db_t:s0"
2 つ目のマウントコマンドが失敗し、以下が
/var/log/messages
にログ記録されます。
kernel: SELinux: mount invalid. Same superblock, different security settings for (dev 0:15, type nfs)
コンテキストが異なる複数のマウントを単一 NFS エクスポートから行うには、
-o nosharecache,context
オプションを使用します。以下の例では、コンテキストが異なる複数のマウントを単一 NFS エクスポートから行います (各マウントへの単一サービスアクセスを許可)。
~]#
mount server:/export/web /local/web -o nosharecache,context="system_u:object_r:httpd_sys_content_t:s0"
~]#
mount server:/export/database /local/database -o \ nosharecache,context="system_u:object_r:mysqld_db_t:s0"
この例では、
server:/export/web
がローカルで /local/web/
にマウントされ、すべてのファイルが httpd_sys_content_t
タイプでラベル付けされており、Apache HTTP Server へのアクセスを許可しています。server:/export/database
はローカルで /local/database
にマウントされ、すべてのファイルが mysqld_db_t
タイプでラベル付けされており、MariaDB へのアクセスを許可しています。これらのタイプ変更はディスクに書き込まれません。
重要
nosharecache
オプションを使うと、/export/web/
を複数回マウントするなど、あるエクスポートの同一のサブディレクトリーを異なるコンテキストで複数回マウントすることができます。ファイルが 2 つの異なるコンテキストでアクセス可能な場合は、エクスポートの同一のサブディレクトリーを異なるコンテキストで複数回マウントしないでください。重複するマウントを作成することになってしまいます。
4.9.5. コンテキストのマウントを永続的にする
コンテキストのマウントを再マウントや再起動後も維持するには、
/etc/fstab
ファイル内のファイルシステムのエントリーまたは自動マウント機能のマップを追加し、ひつようなコンテキストをマウントオプションとして使用します。以下の例では、NFS コンテキストマウントでエントリーを /etc/fstab
に追加します。
server:/export /local/mount/ nfs context="system_u:object_r:httpd_sys_content_t:s0" 0 0
[5]
James Morris 著「Filesystem Labeling in SELinux」2004 年 10 月 1 日公開、2008 年 10 月 14 日アクセス (http://www.linuxjournal.com/article/7426)
このページには機械翻訳が使用されている場合があります (詳細はこちら)。