SELinux ユーザーおよび管理者のガイド
SELinux (Security-Enhanced Linux) の基本設定および高度な設定
概要
パート I. SELinux リンクのコピーリンクがクリップボードにコピーされました!
第1章 導入部分 リンクのコピーリンクがクリップボードにコピーされました!
_t を付けます。たとえば、Web サーバーのタイプ名は httpd_t です。/var/www/html/ にあるファイルおよびディレクトリーのタイプコンテキストは、通常 httpd_sys_content_t です。/tmp および / var /tmp / にあるファイルおよびディレクトリーのタイプコンテキストは、通常 tmp_t です。Web サーバーポートのタイプコンテキストは http_port_t です。
httpd_t として実行する Web サーバープロセス) を許可するポリシールールがあります。このルールでは、通常 /var/www/html/ にあるコンテキストを持つファイルおよびディレクトリーと、その他の Web サーバーディレクトリー (httpd_sys_content_t) へのアクセスを許可します。通常、/tmp および / var /tmp / に含まれるファイルのポリシーには、許可ルールがないため、アクセスは許可されません。SELinux を使用すれば、Apache が危険にさらされ、悪意のあるスクリプトがアクセスを得た場合でも、/tmp ディレクトリーにアクセスすることはできなくなります。
図1.1 SELinux は、httpd_t として実行している Apache プロセスが /var/www/html/ ディレクトリーにアクセスするのは許可しますが、同じ Apache プロセスが /data/mysql/ ディレクトリーにアクセスするのは拒否します。これは、httpd_t タイプコンテキストと mysqld_db_t タイプコンテキストに許可ルールがないのが原因です。一方、mysqld_t として実行する MariaDB プロセスは /data/mysql/ ディレクトリーにアクセスでき、SELinux は、mysqld_t タイプを持つプロセスが、httpd_sys_content_t というラベルが付いた /var/www/html/ ディレクトリーにアクセスすることも適切に拒否します。
[D]
関連情報
- apropos
selinuxコマンドで表示される man ページの selinux (8) - selinux-policy-doc パッケージをインストールしている場合は、man -k _selinux コマンドで表示される man ページ。詳細は、「サービスの man ページ」 を参照してください。
1.1. SELinux を実行する利点 リンクのコピーリンクがクリップボードにコピーされました!
- プロセスとファイルにはすべてラベルが付いています。SELinux ポリシーにより、プロセスがファイルと相互作用する方法と、プロセスが互いに相互作用する方法が定義されます。アクセスは、それを特別に許可する SELinux ポリシールールが存在する場合に限り許可されます。
- アクセス制御がより詳細に設定できるようになりました。SELinux のアクセスは、ユーザーの裁量と、Linux のユーザー ID およびグループ ID に基づいて制御される従来の UNIX アクセス権だけでなく、SELinux のユーザー、ロール、タイプなど (必要に応じてセキュリティーレベルも) の、入手可能なすべての情報に基づいて決定されます。
- SELinux ポリシーは管理者が定義し、システム全体に適用されます。
- 権限昇格攻撃に対する軽減策が向上しました。プロセスはドメインで実行するため、互いに分離しています。SELinux ポリシールールは、プロセスがどのようにファイルやその他のプロセスにアクセスするかを定義します。プロセスへのアクセスが不正に行われても、攻撃者は、そのプロセスの通常の機能と、そのプロセスがアクセスするように設定されているファイルにしかアクセスできません。たとえば、Apache HTTP Server へのアクセスが不正に行われても、そのアクセスを許可する特別な SELinux ポリシールールが追加されたり、設定された場合を除き、ユーザーのホームディレクトリーにあるファイルを読み込むプロセスを攻撃者が利用することはできません。
- SELinux は、データの機密性と完全性、並びに信頼されていない入力からの保護プロセスを強化するのに使用できます。
- ウイルス対策ソフトウェア
- パスワード、ファイアウォールなどのセキュリティーシステムの代替
- 一体型のセキュリティーソリューション
1.2. 例 リンクのコピーリンクがクリップボードにコピーされました!
- デフォルトのアクションは拒否です。アクセスを許可する SELinux のポリシールール (ファイルを開くプロセスなど) が存在しない場合は、アクセスが拒否されます。
- SELinux は、Linux ユーザーに制限をかけられます。SELinux ポリシーには、制限がかけられた SELinux ユーザーが多数含まれます。Linux ユーザーを、制限がかけられた SELinux ユーザーにマッピングして、SELinux ユーザーに適用されているセキュリティールールおよびメカニズムを利用できます。たとえば、Linux ユーザーを SELinux
user_uユーザーにマッピングすると、sudo や su などのユーザー ID (setuid) アプリケーションを設定しない限り、Linux ユーザーを実行できなくなります。詳細は、「制限のあるユーザーおよび制限のないユーザー」 を参照してください。 - プロセスとデータの分離が向上します。プロセスは独自のドメインで実行され、プロセスが他のプロセスによって使用されているファイルにアクセスできないようにします。また、プロセスが他のプロセスにアクセスできないようにします。たとえば、SELinux を実行している場合に、(許可が設定されていない限り) 攻撃者は Samba サーバーを危険にさらすことはできず、その Samba サーバーを攻撃ベクトルとして使用して、その他のプロセス (MariaDB など) が使用するファイルの読み書きを行うことはできません。
- SELinux は、設定ミスによるダメージを軽減します。Domain Name System (DNS) サーバーはゾーン転送として知られている機能で、互いに頻繁に情報を複製します。攻撃者は、ゾーン転送を使用して、虚偽の情報で DNS サーバーを更新できます。Red Hat Enterprise Linux で BIND (Berkeley Internet Name Domain) を DNS サーバーとして実行すると、ゾーン転送を実行できるサーバーを管理者が制限した場合でも、デフォルトの SELinux ポリシーによりゾーンファイルが阻止されます。 [1] BIND
namedデーモン自体、およびその他のプロセスによって、ゾーン転送を使用して更新中です。 - NetworkWorld.com の記事 A seatbelt for server software: SELinux blocks real-world exploits を参照してください。[2]SELinux に関する背景情報と、SELinux が阻止したさまざまな不正使用に関する情報です。
1.3. SELinux Architecture リンクのコピーリンクがクリップボードにコピーされました!
1.4. SELinux のステータスおよびモード リンクのコピーリンクがクリップボードにコピーされました!
getenforce Enforcing
~]# getenforce
Enforcing
setenforce 0 getenforce Permissive
~]# setenforce 0
~]# getenforce
Permissive
setenforce 1 getenforce Enforcing
~]# setenforce 1
~]# getenforce
Enforcing
httpd_t ドメインを Permissive に設定するには、以下のコマンドを実行します。
semanage permissive -a httpd_t
~]# semanage permissive -a httpd_t
1.5. 関連情報 リンクのコピーリンクがクリップボードにコピーされました!
第2章 SELinux コンテキスト リンクのコピーリンクがクリップボードにコピーされました!
ls -Z file1 -rwxrw-r-- user1 group1 unconfined_u:object_r:user_home_t:s0 file1
~]$ ls -Z file1
-rwxrw-r-- user1 group1 unconfined_u:object_r:user_home_t:s0 file1
- SELinux ユーザー
- SELinux ユーザー ID は、特定のロールセットと特定の MLS/MCS 範囲に対して承認されるポリシーに既知の ID です。各 Linux ユーザーは、SELinux ポリシーを使用して SELinux ユーザーにマッピングされます。これにより、Linux ユーザーは SELinux ユーザーの制限を継承できます。マップされた SELinux ユーザー ID は、開始できるロールとレベルを定義するために、そのセッションのプロセスに対して SELinux コンテキストで使用されます。root で以下のコマンドを入力して、SELinux と Linux ユーザーアカウントのマッピングのリストを表示します (policycoreutils-pythonパッケージがインストールされている必要があります)。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力は、システムごとにわずかに異なる場合がありますLogin Name列には、Linux ユーザーがリスト表示されます。SELinux User列には、Linux ユーザーがマッピングされている SELinux ユーザーがリスト表示されます。プロセスの場合、SELinux ユーザーはアクセス可能なロールとレベルを制限します。MLS/MCS Range列は、MLS(Multi-Level Security) および Multi-Category Security(MCS) で使用されるレベルです。Service列は、Linux ユーザーがシステムにログインする予定の正しい SELinux コンテキストを決定します。デフォルトでは、任意のサービスを表すアスタリスク (*) 文字が使用されます。
- role
- SELinux の一部は、ロールベースのアクセス制御 (RBAC) セキュリティーモデルです。ロールは RBAC の属性です。SELinux ユーザーはロールに対して許可され、ロールはドメインに対して承認されます。このロールは、ドメインと SELinux ユーザーの仲介として機能します。入力可能なロールによって入力できるドメインが決まります。最終的には、アクセス可能なオブジェクトタイプを制御します。これにより、権限昇格攻撃への脆弱性が軽減されます。
- type
- タイプは、Type Enforcement の属性です。タイプは、プロセスのドメインとファイルのタイプを定義します。SELinux ポリシールールは、タイプにアクセスするドメインであるか、別のドメインにアクセスするドメインであるかにかかわらず、タイプが相互にアクセスできる方法を定義します。アクセスは、それを許可する特定の SELinux ポリシールールが存在する場合にのみ許可されます。
- level
- このレベルは MLS と MCS の属性です。MLS の範囲はレベルのペアで、レベルが異なる場合は lowlevel-highlevel と記述され、レベルが同一である場合は lowlevel と記述されます (
s0-s0はs0と同じ)。各レベルは機密カテゴリーのペアで、カテゴリーはオプションになります。カテゴリーがある場合、レベルは sensitivity:category-set として記述されます。カテゴリーがない場合は、sensitivity と記述されます。カテゴリーセットが連続したシリーズの場合は、省略できます。たとえば、c0.c3はc0,c1,c2,c3と同じです。/etc/selinux/targeted/setrans.confファイルはレベル (s0:c0) を人間が判読できる形式 (CompanyConfidential) にマップします。Red Hat Enterprise Linux では、Targeted ポリシーが MCS を強制し、MCS では 1 つの機密レベル (s0) があります。Red Hat Enterprise Linux の MCS は、1024 の異なるカテゴリー(c0からc1023まで)に対応しています。s0-s0:c0.c1023は機密レベルs0で、すべてのカテゴリーに対して承認されます。MLS は Bell-La Padula Mandatory Access Model を強制し、LSPP(Labeled Security Protection Profile) 環境で使用されます。MLS の制限を使用するには、selinux-policy-mls パッケージをインストールし、MLS がデフォルトの SELinux ポリシーになるように設定します。Red Hat Enterprise Linux に同梱されている MLS ポリシーは、評価された設定に含まれなかった多くのプログラムドメインを省略するため、デスクトップワークステーションの MLS は使用できません(X Window System のサポートはありません)。ただし、アップストリームの SELinux 参照ポリシー から、すべてのプログラムドメインを含む MLS ポリシーを構築することができます。MLS 設定の詳細は、「Multi-Level Security (MLS)」 を参照してください。
2.1. ドメインの移行 リンクのコピーリンクがクリップボードにコピーされました!
entrypoint タイプを持つアプリケーションを実行することにより、別のドメインに移行します。entrypoint パーミッションは、SELinux ポリシーで使用され、どのアプリケーションがドメインに入るために使用できるかを制御します。以下の例は、ドメイン移行を示しています。
手順2.1 ドメイン移行の例
- ユーザーがパスワードを変更したい。これを実行するには、
passwdユーティリティーを実行します。/usr/bin/passwd実行可能ファイルには、passwd_exec_tタイプのラベルが付けられます。ls -Z /usr/bin/passwd -rwsr-xr-x root root system_u:object_r:passwd_exec_t:s0 /usr/bin/passwd
~]$ ls -Z /usr/bin/passwd -rwsr-xr-x root root system_u:object_r:passwd_exec_t:s0 /usr/bin/passwdCopy to Clipboard Copied! Toggle word wrap Toggle overflow passwdユーティリティーは、shadow_tタイプのラベルが付けられた/etc/shadowにアクセスします。ls -Z /etc/shadow -r--------. root root system_u:object_r:shadow_t:s0 /etc/shadow
~]$ ls -Z /etc/shadow -r--------. root root system_u:object_r:shadow_t:s0 /etc/shadowCopy to Clipboard Copied! Toggle word wrap Toggle overflow - SELinux ポリシールールでは、
passwd_tドメインで実行しているプロセスが、shadow_tタイプのラベルが付けられたファイルに読み取りと書き込みが許可されていることを示しています。shadow_tタイプは、パスワードの変更に必要なファイルにのみ適用されます。これには、/etc/gshadow、/etc/shadow、およびバックアップファイルが含まれます。 - SELinux ポリシールールは、
passwd_tドメインのentrypointパーミッションがpasswd_exec_tタイプに設定されていることを示しています。 - ユーザーが
passwdユーティリティーを実行すると、ユーザーのシェルプロセスはpasswd_tドメインに移行します。SELinux では、デフォルトのアクションは否定することで、passwd_tドメインで実行しているアプリケーションがshadow_tタイプでラベル付けされたファイルにアクセスできるようにするルールが存在するため、passwdアプリケーションは/etc/shadowにアクセスし、ユーザーのパスワードを更新します。
passwd_t ドメインで実行しているサブジェクトが shadow_t ファイルタイプでラベル付けされたオブジェクトにアクセスできるようにする実際のルールがありますが、サブジェクトが新しいドメインに移行する前に、その他の SELinux ポリシールールを満たす必要があります。この例では、Type Enforcement により以下が確保されます。
passwd_tドメインを入力できるのは、passwd_exec_tタイプのラベルが付けられたアプリケーションを実行する場合のみです。これは、lib_tタイプなどの承認された共有ライブラリーからのみ実行でき、他のアプリケーションは実行できません。passwd_tなどの承認されたドメインのみが、shadow_tタイプのラベルが付けられたファイルに書き込みできます。他のプロセスがスーパーユーザー権限で実行されている場合でも、これらのプロセスはpasswd_tドメインで実行されていないため、shadow_tタイプのラベルが付けられたファイルに書き込みできません。- 承認されたドメインのみが
passwd_tドメインに移行できます。たとえば、sendmail_tドメインで実行するsendmailプロセスには passwd を実行する適切な理由がないため、passwd_tドメインに移行することはできません。 passwd_tドメインで実行しているプロセスは、etc_tまたはshadow_tタイプのラベルが付けられたファイルなど、承認されたタイプに対する読み書きのみが可能です。これにより、passwdアプリケーションが任意のファイルの読み書きを行うのを防ぎます。
2.2. プロセスの SELinux コンテキスト リンクのコピーリンクがクリップボードにコピーされました!
手順2.2 passwd ユーティリティーの SELinux コンテキストの表示
- → → などのターミナルを開きます。
passwdユーティリティーを実行します。新しいパスワードは入力しないでください。passwd Changing password for user user_name. Changing password for user_name. (current) UNIX password:
~]$ passwd Changing password for user user_name. Changing password for user_name. (current) UNIX password:Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 新しいタブまたは別の端末を開き、以下のコマンドを入力します。出力は以下の例のようになります。
ps -eZ | grep passwd unconfined_u:unconfined_r:passwd_t:s0-s0:c0.c1023 13212 pts/1 00:00:00 passwd
~]$ ps -eZ | grep passwd unconfined_u:unconfined_r:passwd_t:s0-s0:c0.c1023 13212 pts/1 00:00:00 passwdCopy to Clipboard Copied! Toggle word wrap Toggle overflow - 最初のタブ/ターミナルで
Ctrl+Cを押してpasswdユーティリティーをキャンセルします。
passwd_exec_t タイプのラベルが付けられた) passwd ユーティリティーが実行されると、ユーザーのシェルプロセスは passwd_t ドメインに移行します。タイプはプロセスのドメインとファイルのタイプを定義することに注意してください。
ps ユーティリティーを再度実行します。以下は出力の省略された例であり、お使いのシステムでは異なる場合があります。
system_r ロールは、デーモンなどのシステムプロセスに使用されます。Enforcement と入力してから、各ドメインを分けます。
2.3. ユーザーの SELinux コンテキスト リンクのコピーリンクがクリップボードにコピーされました!
id -Z unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
~]$ id -Z
unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
unconfined_u ユーザーにマッピングされ、unconfined_r ロールとして実行され、unconfined_t ドメインで実行されていることを示しています。s0-s0 は MLS 範囲で、この場合は s0 と同じです。ユーザーがアクセスできるカテゴリーはc0.c1023 で定義されます。これは、すべてのカテゴリー (c0 から c1023) です。
第3章 Targeted ポリシー リンクのコピーリンクがクリップボードにコピーされました!
unconfined_t ドメインで実行され、init によって起動されたシステムプロセスは unconfined_service_t ドメインで実行されます。これらのドメインはどちらも制限されません。
3.1. 制限のあるプロセス リンクのコピーリンクがクリップボードにコピーされました!
sshd や httpd などのネットワーク上でリッスンするほぼすべてのサービスは、Red Hat Enterprise Linux に制限されます。また、root ユーザーで実行され、passwd ユーティリティーなどのユーザーのタスクを実行するほとんどのプロセスには制限があります。プロセスが制限されると、httpd_t ドメインで実行している httpd プロセスのように、独自のドメインで実行されます。制限のあるプロセスが攻撃者によって侵害された場合、SELinux ポリシーの設定に応じて、攻撃者のリソースへのアクセスと、攻撃者が行う可能性のある損害は制限されます。
手順3.1 SELinux の状態を確認する方法
- SELinux が有効になり、Enforcing モードで実行されていること、および Targeted ポリシーが使用されていることを確認します。正しい出力は以下のようになります。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow SELinux モードの変更に関する詳細は、「SELinux のステータスおよびモードの永続的変更」 を参照してください。 - root として、
/var/www/html/ディレクトリーにファイルを作成します。touch /var/www/html/testfile
~]# touch /var/www/html/testfileCopy to Clipboard Copied! Toggle word wrap Toggle overflow - 以下のコマンドを入力して、新規作成されたファイルの SELinux コンテキストを表示します。
ls -Z /var/www/html/testfile -rw-r--r-- root root unconfined_u:object_r:httpd_sys_content_t:s0 /var/www/html/testfile
~]$ ls -Z /var/www/html/testfile -rw-r--r-- root root unconfined_u:object_r:httpd_sys_content_t:s0 /var/www/html/testfileCopy to Clipboard Copied! Toggle word wrap Toggle overflow デフォルトでは、Linux ユーザーは Red Hat Enterprise Linux で制限なしで実行されます。そのため、testfileファイルには SELinuxunconfined_uユーザーのラベルが付けられます。RBAC は、ファイルではなくプロセスに使用されます。ロールには意味がありません。object_rロールはファイル (永続ストレージおよびネットワークファイルシステム上) に使用される汎用ロールです。/procディレクトリー下では、プロセスに関連するファイルはsystem_rロールを使用する場合があります。httpd_sys_content_tタイプを使用すると、httpdプロセスがこのファイルにアクセスできるようになります。
httpd) を防ぐ方法を示しています。これはサンプルであり、本番環境では使用しないでください。httpd パッケージと wget パッケージがインストールされ、SELinux Targeted ポリシーが使用され、SELinux が Enforcing モードで動作していることを前提とします。
手順3.2 競合するプロセスの例
- root で
httpdデーモンを起動します。systemctl start httpd.service
~]# systemctl start httpd.serviceCopy to Clipboard Copied! Toggle word wrap Toggle overflow サービスが実行中であることを確認します。出力には以下の情報が含まれている必要があります (タイムスタンプのみは異なります)。systemctl status httpd.service httpd.service - The Apache HTTP Server Loaded: loaded (/usr/lib/systemd/system/httpd.service; disabled) Active: active (running) since Mon 2013-08-05 14:00:55 CEST; 8s ago
~]$ systemctl status httpd.service httpd.service - The Apache HTTP Server Loaded: loaded (/usr/lib/systemd/system/httpd.service; disabled) Active: active (running) since Mon 2013-08-05 14:00:55 CEST; 8s agoCopy to Clipboard Copied! Toggle word wrap Toggle overflow - Linux ユーザーが書き込み権限を持つディレクトリーに移動し、以下のコマンドを入力します。デフォルト設定が変更されない限り、このコマンドは成功します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - chcon コマンドによってファイルが再ラベル付けされます。ただし、このようなラベルの変更は、ファイルシステムの再ラベル付け時に維持されません。ファイルシステムの再ラベル付け後も存続する永続的な変更については、
semanageユーティリティーを使用します。これについては後述します。root で以下のコマンドを実行して、タイプを Samba が使用するタイプに変更します。chcon -t samba_share_t /var/www/html/testfile
~]# chcon -t samba_share_t /var/www/html/testfileCopy to Clipboard Copied! Toggle word wrap Toggle overflow 以下のコマンドを入力して、変更を表示します。ls -Z /var/www/html/testfile -rw-r--r-- root root unconfined_u:object_r:samba_share_t:s0 /var/www/html/testfile
~]$ ls -Z /var/www/html/testfile -rw-r--r-- root root unconfined_u:object_r:samba_share_t:s0 /var/www/html/testfileCopy to Clipboard Copied! Toggle word wrap Toggle overflow - 現在の DAC パーミッションでは、
httpdプロセスがtestfileにアクセスできるようになります。ユーザーの書き込み権限があるディレクトリーに移動し、以下のコマンドを入力します。デフォルト設定が変更されない限り、このコマンドは失敗します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow - root で
testfileを削除します。rm -i /var/www/html/testfile
~]# rm -i /var/www/html/testfileCopy to Clipboard Copied! Toggle word wrap Toggle overflow httpdを実行する必要がない場合は、root で以下のコマンドを実行して停止します。systemctl stop httpd.service
~]# systemctl stop httpd.serviceCopy to Clipboard Copied! Toggle word wrap Toggle overflow
httpd プロセスが testfile へアクセスすることが許可されましたが、httpd プロセスがアクセス権を持たないタイプでファイルがラベル付けされているため、SELinux ではアクセスが拒否されました。
auditd デーモンが実行している場合は、以下のようなエラーが /var/log/audit/audit.log に記録されます。
type=AVC msg=audit(1220706212.937:70): avc: denied { getattr } for pid=1904 comm="httpd" path="/var/www/html/testfile" dev=sda5 ino=247576 scontext=unconfined_u:system_r:httpd_t:s0 tcontext=unconfined_u:object_r:samba_share_t:s0 tclass=file
type=SYSCALL msg=audit(1220706212.937:70): arch=40000003 syscall=196 success=no exit=-13 a0=b9e21da0 a1=bf9581dc a2=555ff4 a3=2008171 items=0 ppid=1902 pid=1904 auid=500 uid=48 gid=48 euid=48 suid=48 fsuid=48 egid=48 sgid=48 fsgid=48 tty=(none) ses=1 comm="httpd" exe="/usr/sbin/httpd" subj=unconfined_u:system_r:httpd_t:s0 key=(null)
type=AVC msg=audit(1220706212.937:70): avc: denied { getattr } for pid=1904 comm="httpd" path="/var/www/html/testfile" dev=sda5 ino=247576 scontext=unconfined_u:system_r:httpd_t:s0 tcontext=unconfined_u:object_r:samba_share_t:s0 tclass=file
type=SYSCALL msg=audit(1220706212.937:70): arch=40000003 syscall=196 success=no exit=-13 a0=b9e21da0 a1=bf9581dc a2=555ff4 a3=2008171 items=0 ppid=1902 pid=1904 auid=500 uid=48 gid=48 euid=48 suid=48 fsuid=48 egid=48 sgid=48 fsgid=48 tty=(none) ses=1 comm="httpd" exe="/usr/sbin/httpd" subj=unconfined_u:system_r:httpd_t:s0 key=(null)
/var/log/httpd/error_log に記録されます。
[Wed May 06 23:00:54 2009] [error] [client 127.0.0.1] (13)Permission denied: access to /testfile denied
[Wed May 06 23:00:54 2009] [error] [client 127.0.0.1] (13)Permission denied: access to /testfile denied
3.2. 制限のないプロセス リンクのコピーリンクがクリップボードにコピーされました!
init によって実行される制限のないサービスは unconfined_service_t ドメインで実行され、カーネルによって実行される制限のないサービスは kernel_t ドメインで実行され、制限のない Linux ユーザーによって実行される制限のないサービスは、unconfined_t ドメインで実行されます。制限のないプロセスの場合、SELinux ポリシールールが適用されますが、制限のないドメインで実行しているプロセスを許可するポリシールールが存在します。制限のないドメインで実行されているプロセスは、DAC ルールだけを使用するようにフォールバックされます。制限のないプロセスが侵害された場合、SELinux は攻撃者がシステムリソースやデータにアクセスすることを防ぎませんが、もちろん、DAC ルールは引き続き使用されます。SELinux は、DAC ルールに加えたセキュリティー強化です。DAC ルールを置き換えるものではありません。
httpd) が Samba が使用するデータにアクセスする方法を示しています。Red Hat Enterprise Linux では、httpd プロセスはデフォルトで制限のある httpd_t ドメインで実行されます。これはサンプルであり、本番環境では使用しないでください。httpd、wget、dbus、および audit パッケージがインストールされ、SELinux Targeted ポリシーが使用され、SELinux が Enforcing モードで実行されていることを前提としています。
手順3.3 制限のないプロセスの例
- chcon コマンドによってファイルが再ラベル付けされます。ただし、このようなラベルの変更は、ファイルシステムの再ラベル付け時に維持されません。ファイルシステムの再ラベル付け後も存続する永続的な変更については、
semanageユーティリティーを使用します。これについては後述します。root ユーザーとして以下のコマンドを実行し、タイプを Samba が使用するタイプに変更します。chcon -t samba_share_t /var/www/html/testfile
~]# chcon -t samba_share_t /var/www/html/testfileCopy to Clipboard Copied! Toggle word wrap Toggle overflow 変更を表示します。ls -Z /var/www/html/testfile -rw-r--r-- root root unconfined_u:object_r:samba_share_t:s0 /var/www/html/testfile
~]$ ls -Z /var/www/html/testfile -rw-r--r-- root root unconfined_u:object_r:samba_share_t:s0 /var/www/html/testfileCopy to Clipboard Copied! Toggle word wrap Toggle overflow - 以下のコマンドを実行して、
httpdプロセスが実行されていないことを確認します。systemctl status httpd.service httpd.service - The Apache HTTP Server Loaded: loaded (/usr/lib/systemd/system/httpd.service; disabled) Active: inactive (dead)
~]$ systemctl status httpd.service httpd.service - The Apache HTTP Server Loaded: loaded (/usr/lib/systemd/system/httpd.service; disabled) Active: inactive (dead)Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力が異なる場合は、root で以下のコマンドを実行して、httpdプロセスを停止します。systemctl stop httpd.service
~]# systemctl stop httpd.serviceCopy to Clipboard Copied! Toggle word wrap Toggle overflow httpdプロセスが制限なしで実行されるようにするには、root で以下のコマンドを実行して、/usr/sbin/httpdファイルのタイプを、制限のあるドメインに移行しないタイプに変更します。chcon -t bin_t /usr/sbin/httpd
~]# chcon -t bin_t /usr/sbin/httpdCopy to Clipboard Copied! Toggle word wrap Toggle overflow /usr/sbin/httpdにbin_tタイプのラベルが付けられていることを確認します。ls -Z /usr/sbin/httpd -rwxr-xr-x. root root system_u:object_r:bin_t:s0 /usr/sbin/httpd
~]$ ls -Z /usr/sbin/httpd -rwxr-xr-x. root root system_u:object_r:bin_t:s0 /usr/sbin/httpdCopy to Clipboard Copied! Toggle word wrap Toggle overflow - root で、
httpdプロセスを開始して、正常に起動したことを確認します。systemctl start httpd.service
~]# systemctl start httpd.serviceCopy to Clipboard Copied! Toggle word wrap Toggle overflow systemctl status httpd.service httpd.service - The Apache HTTP Server Loaded: loaded (/usr/lib/systemd/system/httpd.service; disabled) Active: active (running) since Thu 2013-08-15 11:17:01 CEST; 5s ago
~]# systemctl status httpd.service httpd.service - The Apache HTTP Server Loaded: loaded (/usr/lib/systemd/system/httpd.service; disabled) Active: active (running) since Thu 2013-08-15 11:17:01 CEST; 5s agoCopy to Clipboard Copied! Toggle word wrap Toggle overflow - 以下のコマンドを入力して、
unconfined_service_tドメインで実行しているhttpdを表示します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow - Linux ユーザーが書き込み権限を持つディレクトリーに移動し、以下のコマンドを入力します。デフォルト設定が変更されない限り、このコマンドは成功します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow httpdプロセスはsamba_share_tタイプのラベル付けされたファイルにアクセスできませんが、httpdは制限のないunconfined_service_tドメインで実行され、DAC ルールの使用にフォールバックします。したがって、wget コマンドは成功します。httpdが制限のあるhttpd_tドメインで実行されていた場合、wget コマンドは失敗していました。 restoreconユーティリティーは、ファイルのデフォルトの SELinux コンテキストを復元します。root で次のコマンドを実行して、/usr/sbin/httpdのデフォルトの SELinux コンテキストを復元します。restorecon -v /usr/sbin/httpd restorecon reset /usr/sbin/httpd context system_u:object_r:unconfined_exec_t:s0->system_u:object_r:httpd_exec_t:s0
~]# restorecon -v /usr/sbin/httpd restorecon reset /usr/sbin/httpd context system_u:object_r:unconfined_exec_t:s0->system_u:object_r:httpd_exec_t:s0Copy to Clipboard Copied! Toggle word wrap Toggle overflow /usr/sbin/httpdにhttpd_exec_tタイプのラベルが付けられていることを確認します。ls -Z /usr/sbin/httpd -rwxr-xr-x root root system_u:object_r:httpd_exec_t:s0 /usr/sbin/httpd
~]$ ls -Z /usr/sbin/httpd -rwxr-xr-x root root system_u:object_r:httpd_exec_t:s0 /usr/sbin/httpdCopy to Clipboard Copied! Toggle word wrap Toggle overflow - root で次のコマンドを実行して
httpdを再起動します。再起動したら、制限のあるhttpd_tドメインでhttpdが実行されていることを確認します。systemctl restart httpd.service
~]# systemctl restart httpd.serviceCopy to Clipboard Copied! Toggle word wrap Toggle overflow Copy to Clipboard Copied! Toggle word wrap Toggle overflow - root で
testfileを削除します。rm -i /var/www/html/testfile rm: remove regular empty file `/var/www/html/testfile'? y
~]# rm -i /var/www/html/testfile rm: remove regular empty file `/var/www/html/testfile'? yCopy to Clipboard Copied! Toggle word wrap Toggle overflow httpdを実行する必要がない場合は、root で以下のコマンドを実行してhttpdを停止します。systemctl stop httpd.service
~]# systemctl stop httpd.serviceCopy to Clipboard Copied! Toggle word wrap Toggle overflow
3.3. 制限のあるユーザーおよび制限のないユーザー リンクのコピーリンクがクリップボードにコピーされました!
__default__ ログインにマッピングされ、これは、SELinux unconfined_u ユーザーにマッピングされます。以下の行は、デフォルトのマッピングを定義します。
__default__ unconfined_u s0-s0:c0.c1023
__default__ unconfined_u s0-s0:c0.c1023
unconfined_u ユーザーにマッピングする方法を説明します。これは、デフォルトで Red Hat Enterprise Linux でそうであるように、root ユーザーが制限なしで実行されていることを前提としています。
手順3.4 新しい Linux ユーザーの SELinux unconfined_u ユーザーへのマッピング
- root で以下のコマンドを入力し、
newuserという名前の Linux ユーザーを作成します。useradd newuser
~]# useradd newuserCopy to Clipboard Copied! Toggle word wrap Toggle overflow - Linux
newuserユーザーにパスワードを割り当てるには、以下を実行します。root で以下のコマンドを実行します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 現在のセッションからログアウトし、Linux
newuserユーザーとしてログインします。ログインすると、PAM モジュール pam_selinux は Linux ユーザーを SELinux ユーザー(この場合はunconfined_u)に自動的にマッピングし、作成された SELinux コンテキストを設定します。Linux ユーザーのシェルはこのコンテキストで起動します。以下のコマンドを入力して、Linux ユーザーのコンテキストを表示します。id -Z unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
[newuser@localhost ~]$ id -Z unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注記システムでnewuserユーザーが不要になった場合は、Linuxnewuserのセッションからログアウトし、アカウントにログインして root で userdel -r newuser コマンドを実行します。これにより、newuserが自分のホームディレクトリーとともに削除されます。
unconfined_t ドメインから自身の制限のあるドメインに移行できるものとして SELinux ポリシーが定義するアプリケーションを実行すると、制限のない Linux ユーザーは制限のあるドメインの制限を引き続き受けます。このセキュリティー上の利点は、Linux ユーザーが制限なしで実行している場合でも、アプリケーションは制限されたままになります。したがって、アプリケーションにおける不具合の悪用はポリシーによって制限できます。
| ユーザー | ロール | ドメイン | X Window System | su または sudo | ホームディレクトリーおよび /tmp (デフォルト) での実行 | ネットワーク |
|---|---|---|---|---|---|---|
| sysadm_u | sysadm_r | sysadm_t | はい | su および sudo | はい | はい |
| staff_u | staff_r | staff_t | はい | sudoのみ | はい | はい |
| user_u | user_r | user_t | はい | いいえ | はい | はい |
| guest_u | guest_r | guest_t | いいえ | いいえ | はい | いいえ |
| xguest_u | xguest_r | xguest_t | はい | いいえ | はい | Firefox のみ |
user_tドメイン、guest_t ドメイン、およびxドメインの Linux ユーザーは、SELinux ポリシーで許可されている場合にのみ、setuid (set user ID)アプリケーションを実行できます(guest_tpasswdなど)。これらのユーザーは、su および sudo setuid アプリケーションを実行できないため、これらのアプリケーションを使用して root になることはできません。sysadm_tドメイン、staff_tドメイン、user_tドメイン、およびxguest_tドメインの Linux ユーザーは、X Window System とターミナルを使用してログインできます。- デフォルトで、
staff_t、user_t、guest_t、およびxguest_tドメインの Linux ユーザーは、ホームディレクトリーと/tmpでアプリケーションを実行できます。これらのユーザーが、ユーザーのパーミッションを継承するアプリケーションを実行できないようにするには、書き込みアクセス権のあるディレクトリーでguest_exec_contentおよびxguest_exec_contentブール値をoffに設定します。これにより、不具合のあるアプリケーションや悪意のあるアプリケーションがユーザーのファイルを変更できなくなります。ユーザーがホームディレクトリーおよび/tmpでアプリケーションを実行するのを許可および禁止する方法については、「アプリケーションを実行するユーザーに対するブール値」 を参照してください。 xguest_tドメインの Linux ユーザーにアクセスできる唯一のネットワークアクセスは、Web ページに接続する Firefox です。
system_u は、システムプロセスおよびオブジェクトの特別なユーザー ID であることに注意してください。これは、Linux ユーザーに関連付けることはできません。また、unconfined_u および root は制限のないユーザーです。このような理由により、これらのユーザーは、前述の SELinux ユーザー機能の表には含まれていません。
webadm_rは、Apache HTTP Server に関連する SELinux タイプの処理のみが可能です。詳細は、「タイプ」 を参照してください。logadm_rは、syslogおよびauditlogプロセスに関連する SELinux タイプの処理のみが可能です。secadm_rcan only administrate SELinux.auditadm_rは、auditサブシステムに関連するプロセスのみを管理できます。
seinfo -r
~]$ seinfo -r
3.3.1. sudo 移行および SELinux ロール リンクのコピーリンクがクリップボードにコピーされました!
staff_u および sysadm_u SELinux の制限のあるユーザーのみになります。このようなユーザーが sudo でコマンドを実行すると、/etc/sudoers 設定ファイルで指定されたルールに基づいて、または、/etc/sudoers.d/ ディレクトリーのそれぞれのファイル (このようなファイルが存在する場合) に基づいて、ロールを変更することができます。
手順3.5 sudo 移行の設定
- 新しい SELinux ユーザーを作成し、このユーザーにデフォルトの SELinux ロールと、補助制限のある管理者ロールを指定します。
semanage user -a -r s0-s0:c0.c1023 -R "default_role_r administrator_r" SELinux_user_u
~]# semanage user -a -r s0-s0:c0.c1023 -R "default_role_r administrator_r" SELinux_user_uCopy to Clipboard Copied! Toggle word wrap Toggle overflow - デフォルトの SElinux ポリシーコンテキストファイルを設定します。たとえば、SELinux ユーザー
staff_uと同じ SELinux ルールを設定するには、staff_uコンテキストファイルをコピーします。cp /etc/selinux/targeted/contexts/users/staff_u /etc/selinux/targeted/contexts/users/SELinux_user_u
~]# cp /etc/selinux/targeted/contexts/users/staff_u /etc/selinux/targeted/contexts/users/SELinux_user_uCopy to Clipboard Copied! Toggle word wrap Toggle overflow - 新たに作成した SELinux ユーザーを既存の Linux ユーザーにマッピングします。
semanage login -a -s SELinux_user_u -rs0:c0.c1023 linux_user
semanage login -a -s SELinux_user_u -rs0:c0.c1023 linux_userCopy to Clipboard Copied! Toggle word wrap Toggle overflow /etc/sudoers.d/ディレクトリーに Linux ユーザーと同じ名前で新しい設定ファイルを作成し、以下の文字列を追加します。echo "linux_user ALL=(ALL) TYPE=administrator_t ROLE=administrator_r /bin/bash " > /etc/sudoers.d/linux_user
~]# echo "linux_user ALL=(ALL) TYPE=administrator_t ROLE=administrator_r /bin/bash " > /etc/sudoers.d/linux_userCopy to Clipboard Copied! Toggle word wrap Toggle overflow restoreconユーティリティーを使用して、linux_user ホームディレクトリーのラベルを変更します。restorecon -FR -v /home/linux_user
~]# restorecon -FR -v /home/linux_userCopy to Clipboard Copied! Toggle word wrap Toggle overflow - 新たに作成した Linux ユーザーとしてシステムにログインし、ユーザーにデフォルトの SELinux ロールのラベルがあることを確認します。
id -Z SELinux_user_u:default_role_r:SELinux_user_t:s0:c0.c1023
~]$ id -Z SELinux_user_u:default_role_r:SELinux_user_t:s0:c0.c1023Copy to Clipboard Copied! Toggle word wrap Toggle overflow - sudo を実行して、ユーザーの SELinux コンテキストを、
/etc/sudoers.d/linux_userで指定した補助 SELinux ロールに変更します。sudo で使用する-iオプションは、対話式シェルが実行される原因となっていました。sudo -i id -Z SELinux_user_u:administrator_r:administrator_t:s0:c0.c1023
~]$ sudo -i ~]# id -Z SELinux_user_u:administrator_r:administrator_t:s0:c0.c1023Copy to Clipboard Copied! Toggle word wrap Toggle overflow
例3.1 sudo 移行の設定
staff_r と、confined_u のロールを staff_r から webadm_r に変更するように設定された sudo を使用して、新しい SELinux ユーザー confined_u を作成します。
- root ユーザーとして、
sysadm_rロールまたはunconfined_rロールで以下のコマンドをすべて入力します。semanage user -a -r s0-s0:c0.c1023 -R "staff_r webadm_r" confined_u cp /etc/selinux/targeted/contexts/users/staff_u /etc/selinux/targeted/contexts/users/confined_u semanage login -a -s confined_u -rs0:c0.c1023 linux_user restorecon -FR -v /home/linux_user echo "linux_user ALL=(ALL) ROLE=webadm_r TYPE=webadm_t /bin/bash " > /etc/sudoers.d/linux_user
~]# semanage user -a -r s0-s0:c0.c1023 -R "staff_r webadm_r" confined_u ~]# cp /etc/selinux/targeted/contexts/users/staff_u /etc/selinux/targeted/contexts/users/confined_u ~]# semanage login -a -s confined_u -rs0:c0.c1023 linux_user ~]# restorecon -FR -v /home/linux_user ~]# echo "linux_user ALL=(ALL) ROLE=webadm_r TYPE=webadm_t /bin/bash " > /etc/sudoers.d/linux_userCopy to Clipboard Copied! Toggle word wrap Toggle overflow - 新たに作成した Linux ユーザーとしてシステムにログインし、ユーザーにデフォルトの SELinux ロールのラベルがあることを確認します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
第4章 SELinux の使用 リンクのコピーリンクがクリップボードにコピーされました!
4.1. SELinux パッケージ リンクのコピーリンクがクリップボードにコピーされました!
- policycoreutils は、SELinux の運用および管理用に
restorecon、secon、setfiles、semodule、load_policy、およびsetseboolなどのユーティリティーを提供します。 - selinux-policy は、 基本的なディレクトリー構造、
selinux-policy.confファイル、RPM マクロを提供します。 - selinux-policy-targeted は、SELinux の Targeted ポリシーを提供します。
- libselinux - SELinux アプリケーションの API を提供します。
- libselinux-utils は
avcstat、getenforce、getsebool、matchpathcon、selinuxconlist、selinuxdefcon、selinuxenabled、およびsetenforceユーティリティーを提供します。 - libselinux-python は、SELinux アプリケーションを開発するための Python バインディングを提供します。
- selinux-policy-devel は、カスタムの SELinux ポリシーおよびポリシーモジュールを作成するユーティリティーを提供します。
- selinux-policy-doc では、さまざまなサービスで SELinux を完全に設定する方法を説明する man ページを提供します。
- selinux-policy-mls は、MLS(Multi-Level Security)SELinux ポリシーを提供します。
- setroubleshoot-server は、SELinux がアクセスが拒否されたときに生成される拒否メッセージを、sealert ユーティリティーで表示できる詳細の説明 (このパッケージでも提供) に変換します。
- setools-console は、Tresys Technology SETools ディストリビューション、ポリシーを分析およびクエリーするためのユーティリティーとライブラリー、監査ログの監視とレポート、およびファイルコンテキスト管理を提供します。 setools パッケージは、SETools のメタパッケージです。setools-gui パッケージは、
apolユーティリティーおよびseauditユーティリティーを提供します。setools-console パッケージは、sechecker、sediff、seinfo、sesearchおよびfindconコマンドラインユーティリティーを提供します。setools および setools-gui パッケージは、Red Hat Network Optional チャンネルが有効にされている場合にのみ使用できることに注意してください。詳細は、Scope of Coverage Details を参照してください。 - mcstrans は、
s0-s0:c0.c1023などのレベルを、SystemLow-SystemHighなどの読みやすい形式に変換します。 - policycoreutils-python は、SELinux の操作および管理用に semanage、audit2allow、audit2why、chcat などのユーティリティーを提供します。
- policycoreutils-gui は、SELinux を管理するためのグラフィカルユーティリティーである system-config-selinux を提供します。
4.2. どのログファイルが使用されるか リンクのコピーリンクがクリップボードにコピーされました!
auditd デーモンが実行している場合は、以下のような SELinux 拒否メッセージが、デフォルトで /var/log/audit/audit.log に書き込まれます。
type=AVC msg=audit(1223024155.684:49): avc: denied { getattr } for pid=2000 comm="httpd" path="/var/www/html/file1" dev=dm-0 ino=399185 scontext=unconfined_u:system_r:httpd_t:s0 tcontext=system_u:object_r:samba_share_t:s0 tclass=file
type=AVC msg=audit(1223024155.684:49): avc: denied { getattr } for pid=2000 comm="httpd" path="/var/www/html/file1" dev=dm-0 ino=399185 scontext=unconfined_u:system_r:httpd_t:s0 tcontext=system_u:object_r:samba_share_t:s0 tclass=file
/var/log/message ファイルに書き込まれます。
May 7 18:55:56 localhost setroubleshoot: SELinux is preventing httpd (httpd_t) "getattr" to /var/www/html/file1 (samba_share_t). For complete SELinux messages. run sealert -l de7e30d6-5488-466d-a606-92c9f40d316d
May 7 18:55:56 localhost setroubleshoot: SELinux is preventing httpd (httpd_t) "getattr" to /var/www/html/file1 (samba_share_t). For complete SELinux messages. run sealert -l de7e30d6-5488-466d-a606-92c9f40d316d
setroubleshootd はサービスとして継続的に実行されなくなりました。ただし、AVC メッセージの分析には依然として使用されます。2 つの新しいプログラムは、必要に応じて setroubleshoot を開始するメソッドとして機能します。
sedispatchユーティリティーは、監査サブシステムの一部として実行します。AVC 拒否メッセージが返されると、sedispatchはdbusを使用してメッセージを送信します。これらのメッセージは、すでに実行中の場合はsetroubleshootdに直接表示されます。これが実行されていない場合、sedispatchは自動的に起動します。seappletユーティリティーはシステムツールバーで実行され、setroubleshootdの dbus メッセージをリッスンします。通知バブルを起動し、ユーザーが AVC メッセージを確認できるようにします。
手順4.1 デーモンの自動起動
auditdデーモンおよびrsyslogデーモンが、システムの起動時に自動的に起動するように設定するには、root で次のコマンドを実行します。systemctl enable auditd.service
~]# systemctl enable auditd.serviceCopy to Clipboard Copied! Toggle word wrap Toggle overflow systemctl enable rsyslog.service
~]# systemctl enable rsyslog.serviceCopy to Clipboard Copied! Toggle word wrap Toggle overflow - デーモンが有効になっていることを確認するには、シェルプロンプトで以下のコマンドを入力します。
systemctl is-enabled auditd enabled
~]$ systemctl is-enabled auditd enabledCopy to Clipboard Copied! Toggle word wrap Toggle overflow systemctl is-enabled rsyslog enabled
~]$ systemctl is-enabled rsyslog enabledCopy to Clipboard Copied! Toggle word wrap Toggle overflow または、systemctl status service-name.service コマンドを使用して、コマンド出力でenabledキーワードを検索します。以下に例を示します。systemctl status auditd.service | grep enabled auditd.service - Security Auditing Service Loaded: loaded (/usr/lib/systemd/system/auditd.service; enabled)
~]$ systemctl status auditd.service | grep enabled auditd.service - Security Auditing Service Loaded: loaded (/usr/lib/systemd/system/auditd.service; enabled)Copy to Clipboard Copied! Toggle word wrap Toggle overflow
systemd デーモンによるシステムサービスの管理方法の詳細は、System Administrator's Guide の Managing System Services の章を参照してください。
4.3. 主要設定ファイル リンクのコピーリンクがクリップボードにコピーされました!
/etc/selinux/config ファイルは、主な SELinux 設定ファイルです。これは、SELinux が有効/無効であるか、SELinux モードと SELinux ポリシーを使用するかどうかを制御します。
SELINUX=SELINUXオプションは、SELinux の無効化、有効化、およびモード (Enforcing または Permissive) が実行されるかどうかを設定します。SELINUX=enforcingを使用すると、SELinux ポリシーが適用され、SELinux ポリシールールが SELinux ポリシーに基づいてアクセスを拒否します。拒否メッセージがログに記録されます。SELINUX=permissiveを使用すると、SELinux ポリシーは強制されません。SELinux はアクセスを拒否しませんが、SELinux を Enforcing モードで実行した場合に拒否されたであろうアクションの拒否がログに記録されます。SELINUX=disabledを使用すると、SELinux は無効になり、SELinux モジュールは Linux カーネルに登録されず、DAC ルールだけが使用されます。
SELINUXTYPE=SELINUXTYPEオプションは、使用する SELinux ポリシーを設定します。Targeted ポリシーはデフォルトのポリシーです。MLS ポリシーを使用する場合は、このオプションを変更します。MLS ポリシーを有効にする方法は、「SELinux での MLS の有効化」 を参照してください。
4.4. SELinux のステータスおよびモードの永続的変更 リンクのコピーリンクがクリップボードにコピーされました!
Enforcing、Permissive、または Disabled を返します。
4.4.1. SELinux の有効化 リンクのコピーリンクがクリップボードにコピーされました!
- SELinux を Permissive モードで有効にします。詳細は、「Permissive モードに設定する場合:」 を参照してください。
- システムを再起動します。
- SELinux 拒否メッセージを確認します。詳細は、「拒否の検索と表示」を参照してください。
- 拒否がない場合は、Enforcing モードに切り替えます。詳細は、「Enforcing モードに設定する場合:」 を参照してください。
unconfined_service_tドメインでアプリケーションを実行します。詳細は、「制限のないプロセス」 を参照してください。- アプリケーションに新しいポリシーを記述します。詳細は、ナレッジベースの記事 カスタム SELinux ポリシーの作成 を参照してください。
4.4.1.1. Permissive モードに設定する場合: リンクのコピーリンクがクリップボードにコピーされました!
手順4.2 Permissive モードへの変更
- 以下のように
/etc/selinux/configファイルを編集します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow - システムを再起動します。
reboot
~]# rebootCopy to Clipboard Copied! Toggle word wrap Toggle overflow
4.4.1.2. Enforcing モードに設定する場合: リンクのコピーリンクがクリップボードにコピーされました!
手順4.3 Enforcing モードへの変更
rpm -q package_name
rpm -q package_name
- 以下のように
/etc/selinux/configファイルを編集します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow - システムを再起動します。
reboot
~]# rebootCopy to Clipboard Copied! Toggle word wrap Toggle overflow 次にシステムを起動する際に、SELinux はシステム内のファイルおよびディレクトリーのラベルを再設定し、SELinux が無効になっている間に作成したファイルおよびディレクトリーに SELinux コンテキストを追加します。
ausearch -m AVC,USER_AVC,SELINUX_ERR -ts today
~]# ausearch -m AVC,USER_AVC,SELINUX_ERR -ts today
grep "SELinux is preventing" /var/log/messages
~]# grep "SELinux is preventing" /var/log/messages
4.4.2. SELinux の無効化 リンクのコピーリンクがクリップボードにコピーされました!
手順4.4 SELinux の無効化
/etc/selinux/configファイルにSELINUX=disabledを設定します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow - システムを再起動します。再起動したら、getenforce コマンドが
Disabledを返すことを確認します。getenforce Disabled
~]$ getenforce DisabledCopy to Clipboard Copied! Toggle word wrap Toggle overflow
4.5. システムの起動時での SELinux モードの変更 リンクのコピーリンクがクリップボードにコピーされました!
- enforcing=0
- このパラメーターを設定すると、システムを起動する際に、Permissive モードで起動します。これは、問題のトラブルシューティングを行うときに便利です。ファイルシステムの破損がひどい場合は、Permissive モードを使用することが、問題を検出するための唯一の選択肢となるかもしれません。また、Permissive モードでは、ラベルの作成が適切に行われます。このモードで作成した AVC メッセージは、Enforcing モードと同じになるとは限りません。Permissive モードでは、一連の同じ拒否の最初の拒否のみが報告されます。一方、Enforcing モードでは、ディレクトリーの読み込みに関する拒否が発生し、アプリケーションが停止する場合がします。Permissive モードでは、表示される AVC メッセージは同じですが、アプリケーションは、ディレクトリー内のファイルを読み続け、拒否が発生するたびに AVC を取得します。
- selinux=0
- このパラメーターにより、カーネルは、SELinux インフラストラクチャーのどの部分も読み込まないようになります。init スクリプトは、システムが
selinux=0パラメーターで起動したことを認識し、/.autorelabelファイルを変更します。これにより、次回 SELinux を有効にしてシステムを起動する際にシステムのラベルが自動的に再設定されます。重要Red Hat では、selinux=0パラメーターを使用することは推奨されません。システムをデバッグする場合は、Permissive モードを使用することが推奨されます。 - autorelabel=1
- このパラメーターにより、システムで、以下のコマンドと同様の再ラベルが強制的に行われます。システムのラベリングに多数のエラーが含まれる場合は、自動再ラベルが正常に実行されるために Permissive モードで起動する必要がある場合があります。
touch /.autorelabel reboot
~]# touch /.autorelabel ~]# rebootCopy to Clipboard Copied! Toggle word wrap Toggle overflow
checkreqprot などの追加の SELinux 関連のカーネルブートパラメーターは、/usr/share/doc/kernel-doc-<KERNEL_VER>/Documentation/kernel-parameters.txt ファイルを参照してください。このドキュメントは、kernel-doc パッケージでインストールされます。<KERNEL_VER> 文字列をインストール済みカーネルのバージョン番号に置き換えます。以下に例を示します。
yum install kernel-doc less /usr/share/doc/kernel-doc-3.10.0/Documentation/kernel-parameters.txt
~]# yum install kernel-doc
~]$ less /usr/share/doc/kernel-doc-3.10.0/Documentation/kernel-parameters.txt
4.6. ブール値 リンクのコピーリンクがクリップボードにコピーされました!
4.6.1. ブール値のリスト表示 リンクのコピーリンクがクリップボードにコピーされました!
SELinux boolean 列には、ブール値名がリスト表示されます。Description コラムには、ブール値がオンまたはオフであるかと、その実行内容が記載されています。
getsebool -a cvs_read_shadow --> off daemons_dump_core --> on
~]$ getsebool -a
cvs_read_shadow --> off
daemons_dump_core --> on
getsebool cvs_read_shadow cvs_read_shadow --> off
~]$ getsebool cvs_read_shadow
cvs_read_shadow --> off
getsebool cvs_read_shadow daemons_dump_core cvs_read_shadow --> off daemons_dump_core --> on
~]$ getsebool cvs_read_shadow daemons_dump_core
cvs_read_shadow --> off
daemons_dump_core --> on
4.6.2. ブール値の設定 リンクのコピーリンクがクリップボードにコピーされました!
setsebool ユーティリティーを実行し、ブール値を有効または無効にします。
httpd_can_network_connect_db ブール値の設定を示しています。
手順4.5 ブール値の設定
- デフォルトでは、
httpd_can_network_connect_dbブール値はオフになっています。Apache HTTP Server スクリプトおよびモジュールがデータベースサーバーに接続できません。getsebool httpd_can_network_connect_db httpd_can_network_connect_db --> off
~]$ getsebool httpd_can_network_connect_db httpd_can_network_connect_db --> offCopy to Clipboard Copied! Toggle word wrap Toggle overflow - Apache HTTP Server スクリプトおよびモジュールがデータベースサーバーに一時的に接続できるようにするには、root で以下のコマンドを入力します。
setsebool httpd_can_network_connect_db on
~]# setsebool httpd_can_network_connect_db onCopy to Clipboard Copied! Toggle word wrap Toggle overflow getseboolユーティリティーを使用して、ブール値が有効であることを確認します。getsebool httpd_can_network_connect_db httpd_can_network_connect_db --> on
~]$ getsebool httpd_can_network_connect_db httpd_can_network_connect_db --> onCopy to Clipboard Copied! Toggle word wrap Toggle overflow これにより、Apache HTTP Server スクリプトおよびモジュールはデータベースサーバーに接続できます。- この変更は、再起動後は維持されません。再起動後も変更を永続化するには、root で setsebool -P boolean-name on コマンドを実行します。[3]
setsebool -P httpd_can_network_connect_db on
~]# setsebool -P httpd_can_network_connect_db onCopy to Clipboard Copied! Toggle word wrap Toggle overflow
4.6.3. シェル自動完了 リンクのコピーリンクがクリップボードにコピーされました!
getsebool ユーティリティー、setsebool ユーティリティー、および semanage ユーティリティーを使用すると、シェルの自動完了を使用できます。getsebool と setsebool のオートコンプリートを使用して、コマンドラインパラメーターとブール値の両方を完了します。コマンドラインパラメーターのみをリスト表示するには、コマンド名の後にハイフン文字 ("-") を追加して、Tab キーを押します。
setsebool -[Tab] -P
~]# setsebool -[Tab]
-P
getsebool samba_[Tab] samba_create_home_dirs samba_export_all_ro samba_run_unconfined samba_domain_controller samba_export_all_rw samba_share_fusefs samba_enable_home_dirs samba_portmapper samba_share_nfs
~]$ getsebool samba_[Tab]
samba_create_home_dirs samba_export_all_ro samba_run_unconfined
samba_domain_controller samba_export_all_rw samba_share_fusefs
samba_enable_home_dirs samba_portmapper samba_share_nfs
setsebool -P virt_use_[Tab] virt_use_comm virt_use_nfs virt_use_sanlock virt_use_execmem virt_use_rawip virt_use_usb virt_use_fusefs virt_use_samba virt_use_xserver
~]# setsebool -P virt_use_[Tab]
virt_use_comm virt_use_nfs virt_use_sanlock
virt_use_execmem virt_use_rawip virt_use_usb
virt_use_fusefs virt_use_samba virt_use_xserver
semanage ユーティリティーは、複数のコマンドライン引数で 1 つずつ完了したもので使用されます。semanage コマンドの最初の引数はオプションです。これは、マネージドの SELinux ポリシーの一部を指定します。
semanage [Tab] boolean export import login node port dontaudit fcontext interface module permissive user
~]# semanage [Tab]
boolean export import login node port
dontaudit fcontext interface module permissive user
semanage port -a -t http_port_t -p tcp 81
~]# semanage port -a -t http_port_t -p tcp 81
4.7. SELinux コンテキスト - ファイルのラベル付け リンクのコピーリンクがクリップボードにコピーされました!
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
unconfined_u)、ロール (object_r)、タイプ (user_home_t)、およびレベル (s0) を提供します。この情報は、アクセス制御の決定を行うために使用されます。DAC システムでは、アクセスは Linux ユーザーおよびグループ ID に基づいて制御されます。SELinux ポリシールールは、DAC ルールの後にチェックされます。DAC ルールがアクセスを拒否する場合は、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
matchpathcon など、ファイルシステムのラベリングを管理するための複数のコマンドを提供します。
4.7.1. 一時的な変更: chcon リンクのコピーリンクがクリップボードにコピーされました!
クイックリファレンス
- 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 ファイルまたはディレクトリーのタイプの変更
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 ディレクトリーとそのコンテンツタイプの変更
/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
4.7.2. 永続的な変更 - semanage fcontext リンクのコピーリンクがクリップボードにコピーされました!
semanage fcontext -C -l
~]# semanage fcontext -C -l
setfiles ユーティリティーは、ファイルシステムに再ラベル付けされ、restorecon ユーティリティーがデフォルトの SELinux コンテキストを復元するときに使用されます。つまり、ファイルシステムが再ラベル付けされても、semanage fcontext による変更は永続します。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 での正規表現の使用
PCRE2_DOTALL です。これにより、. ワイルドカードは、改行を含むあらゆるものにマッチします。パスを表す文字列はバイトとして処理されます。つまり、ASCII 以外の文字は、1 つのワイルドカードで一致しません。
file_contexts.local に保存されているローカルファイルコンテキストの変更の優先度は、ポリシーモジュールで指定されているものよりも高くなります。つまり、指定したファイルパスが file_contexts.local で一致するものが見つかるたびに、その他のファイルコンテキスト定義は考慮されません。
semanage-fcontext(8) を参照してください。
手順4.8 ファイルまたはディレクトリーのタイプの変更
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 ディレクトリーとそのコンテンツタイプの変更
/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 追加したコンテキストの削除
/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 コンテキストを復元します。
4.7.3. ファイルコンテキストの決定方法 リンクのコピーリンクがクリップボードにコピーされました!
.fcファイル) で指定されているファイルコンテキスト定義に基づいて行われます。semanage は、システムポリシーに基づいて、file_contexts.homedirs ファイルと file_contexts ファイルを生成します。
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 ポリシーモジュールの優先付けと無効化」 を参照してください。
4.8. file_t タイプおよび default_t タイプ リンクのコピーリンクがクリップボードにコピーされました!
file_t タイプは EA 値がまだ割り当てられていないファイルのデフォルトタイプになります。このタイプはこの目的にのみ使用され、正しくラベル付けされたファイルシステムには存在しません。SELinux を実行しているシステム上のすべてのファイルには適切な SELinux コンテキストがあり、file_t タイプは file-context 設定では使用されません。[4].
default_t タイプは、file-context 設定のパターンと一致しないファイルで使用されます。そのため、このようなファイルはディスクにコンテキストを持たないファイルから区別でき、通常は制限のあるドメインからアクセスできなくなります。たとえば、mydirectory/ などの新しい最上位のディレクトリーを作成した場合には、このディレクトリーには default_t タイプのラベルが付けられます。サービスがこのディレクトリーにアクセスする必要がある場合は、この場所の file-contexts 設定を更新する必要があります。file-context 設定にコンテキストを追加する方法は、「永続的な変更 - semanage fcontext」 を参照してください。
/etc/selinux/targeted/contexts/files/ ディレクトリーのファイルは、ファイルおよびディレクトリーのコンテキストを定義します。このディレクトリーのファイルは、restorecon ユーティリティーおよび setfiles ユーティリティーにより読み込まれ、ファイルおよびディレクトリーをデフォルトコンテキストに復元します。
4.9. ファイルシステムのマウント リンクのコピーリンクがクリップボードにコピーされました!
context オプションで指定したコンテキストはディスクに書き込まれません。元のコンテキストは保持され、ファイルシステムに拡張属性がある場合は、context なしでマウントすると確認できます。
4.9.1. コンテキストマウント リンクのコピーリンクがクリップボードにコピーされました!
nfs_t タイプを使用します。追加のマウントオプションがないと、Apache HTTP サーバーなどの他のサービスを使用した NFS ボリュームの共有を防ぐことができます。以下の例は、Apache HTTP Server を使用して共有できるように NFS ボリュームをマウントしています。
mount server:/export /local/mount/point -o \ context="system_u:object_r:httpd_sys_content_t:s0"
~]# mount server:/export /local/mount/point -o \ context="system_u:object_r:httpd_sys_content_t:s0"
-o context で指定した SELinux コンテキストがあるようです。ただし、これらの変更はディスクには書き込まれないため、このオプションで指定したコンテキストはマウント間で維持されません。したがって、必要なコンテキストを維持するには、すべてのマウント時に指定したコンテキストでこのオプションを使用する必要があります。コンテキストマウントを永続化する方法の詳細は、「コンテキストマウントの永続化」 を参照してください。
-o context コンテキストで SELinux コンテキストを上書きする場合は、SELinux の system_u ユーザーおよび object_r ロールを使用し、タイプに集中します。MLS ポリシーまたは複数カテゴリーのセキュリティーを使用していない場合は、s0 レベルを使用します。
context オプションでマウントされると、ユーザーおよびプロセスによるコンテキストの変更が禁止されます。たとえば、context オプションでマウントされたファイルシステムで chcon コマンドを実行すると、Operation not supported のエラーが発生します。
4.9.2. デフォルトコンテキストの変更 リンクのコピーリンクがクリップボードにコピーされました!
file_t タイプを使用します。別のデフォルトコンテキストを使用する場合は、defcontext オプションでファイルシステムをマウントします。
/dev/sda2 上で新しく作成したファイルシステムを、新しく作成した test/ ディレクトリーにマウントします。/etc/selinux/targeted/contexts/files/ には、test/ ディレクトリーのコンテキストを定義するルールがないことを前提とします。
mount /dev/sda2 /test/ -o defcontext="system_u:object_r:samba_share_t:s0"
~]# mount /dev/sda2 /test/ -o defcontext="system_u:object_r:samba_share_t:s0"
defcontextオプションでは、system_u:object_r:samba_share_t:s0が "the default security context for unlabeled files" であると定義されています。[5].- マウント時に、ファイルシステムの root ディレクトリー (
test/) は、defcontextで指定されたコンテキストでラベル付けされているかのように扱われます (このラベルはディスクには保存されません)。これは、test/で作成されるファイルのラベリングに影響します。新しいファイルはsamba_share_tタイプを継承します。これらのラベルはディスクに保存されます。 - ファイルシステムが
defcontextでマウントされているときにtest/で作成されたファイルは、そのラベルが保持されます。
4.9.3. NFS ボリュームのマウント リンクのコピーリンクがクリップボードにコピーされました!
nfs_t タイプを使用します。ポリシー設定によっては、Apache HTTP Server や MariaDB などのサービスは、nfs_t タイプのラベルが付けられたファイルを読み取ることができません。これにより、このタイプのラベルが付けられたファイルシステムがマウントされ、他のサービスによって読み込まれたりエクスポートしたりできなくなる可能性があります。
context オプションを使用して nfs_t タイプを上書きします。以下のコンテキストオプションを使用して NFS ボリュームをマウントし、Apache HTTP サーバーを使用して共有できるようにします。
mount server:/export /local/mount/point -o context="system_u:object_r:httpd_sys_content_t:s0"
~]# 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 マウント リンクのコピーリンクがクリップボードにコピーされました!
web/ と database/ の 2 つのサブディレクトリーを持つ 1 つのエクスポート export/ があります。以下のコマンドは、1 つの NFS エクスポートから 2 つのマウントを試み、各マウントに対してコンテキストを上書きしようとします。
mount server:/export/web /local/web -o context="system_u:object_r:httpd_sys_content_t:s0"
~]# 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"
~]# mount server:/export/database /local/database -o context="system_u:object_r:mysqld_db_t:s0"
/var/log/messages に記録されます。
kernel: SELinux: mount invalid. Same superblock, different security settings for (dev 0:15, type nfs)
kernel: SELinux: mount invalid. Same superblock, different security settings for (dev 0:15, type nfs)
-o nosharecache,context オプションを使用します。以下の例では、1 つの NFS エクスポートから複数のマウントをマウントし、各マウントに異なるコンテキストを使用しています (各マウントに 1 つのサービスアクセスを許可します)。
mount server:/export/web /local/web -o nosharecache,context="system_u:object_r:httpd_sys_content_t:s0"
~]# 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"
~]# 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
server:/export /local/mount/ nfs context="system_u:object_r:httpd_sys_content_t:s0" 0 0
4.10. SELinux ラベルの維持 リンクのコピーリンクがクリップボードにコピーされました!
4.10.1. ファイルおよびディレクトリーのコピー リンクのコピーリンクがクリップボードにコピーされました!
user_home_t タイプのラベルが付けられます。
touch file1
~]$ touch file1
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
/etc などの別のディレクトリーにコピーすると、/etc のデフォルトのラベル付けルールに従って、新しいファイルが作成されます。追加オプションなしでファイルをコピーすると、元のコンテキストが保持されない場合があります。
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
cp file1 /etc/
~]# cp file1 /etc/
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/file1
file1 を /etc にコピーする際に、/etc/file1 が存在しない場合は、/etc/file1 が新規に作成されます。上記の例で示すように、/etc/file1 には、default-labeling ルールに基づいて etc_t タイプのラベルが付けられます。
--preserve=context など、元のファイルのコンテキストを保持するためにユーザーがcpオプションを指定しない限り、既存ファイルのコンテキストが保持されます。SELinux ポリシーは、コピー中にコンテキストが保持されないことがあります。
手順4.11 SELinux コンテキストを保持せずにコピーする
- ユーザーのホームディレクトリーにファイルを作成します。ファイルには、
user_home_tタイプのラベルが付けられます。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 /var/www/html/ディレクトリーには、以下のコマンドのようにhttpd_sys_content_tタイプのラベルが付けられます。ls -dZ /var/www/html/ drwxr-xr-x root root system_u:object_r:httpd_sys_content_t:s0 /var/www/html/
~]$ ls -dZ /var/www/html/ drwxr-xr-x root root system_u:object_r:httpd_sys_content_t:s0 /var/www/html/Copy to Clipboard Copied! Toggle word wrap Toggle overflow file1が/var/www/html/にコピーされると、httpd_sys_content_tタイプを継承します。cp file1 /var/www/html/
~]# cp file1 /var/www/html/Copy to Clipboard Copied! Toggle word wrap Toggle overflow ls -Z /var/www/html/file1 -rw-r--r-- root root unconfined_u:object_r:httpd_sys_content_t:s0 /var/www/html/file1
~]$ ls -Z /var/www/html/file1 -rw-r--r-- root root unconfined_u:object_r:httpd_sys_content_t:s0 /var/www/html/file1Copy to Clipboard Copied! Toggle word wrap Toggle overflow
手順4.12 コピー時の SELinux コンテキストの保持
--preserve=context オプションを使用して、コピー時にコンテキストを保持する方法を説明します。
- ユーザーのホームディレクトリーにファイルを作成します。ファイルには、
user_home_tタイプのラベルが付けられます。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 /var/www/html/ディレクトリーには、以下のコマンドのようにhttpd_sys_content_tタイプのラベルが付けられます。ls -dZ /var/www/html/ drwxr-xr-x root root system_u:object_r:httpd_sys_content_t:s0 /var/www/html/
~]$ ls -dZ /var/www/html/ drwxr-xr-x root root system_u:object_r:httpd_sys_content_t:s0 /var/www/html/Copy to Clipboard Copied! Toggle word wrap Toggle overflow --preserve=contextオプションを使用すると、コピー操作時に SELinux コンテキストが保持されます。以下に示すように、ファイルが/var/www/html/にコピーされると、user_home_tタイプのfile1が保持されます。cp --preserve=context file1 /var/www/html/
~]# cp --preserve=context file1 /var/www/html/Copy to Clipboard Copied! Toggle word wrap Toggle overflow ls -Z /var/www/html/file1 -rw-r--r-- root root unconfined_u:object_r:user_home_t:s0 /var/www/html/file1
~]$ ls -Z /var/www/html/file1 -rw-r--r-- root root unconfined_u:object_r:user_home_t:s0 /var/www/html/file1Copy to Clipboard Copied! Toggle word wrap Toggle overflow
手順4.13 コンテキストのコピーと変更
--context オプションを使用して宛先コピーのコンテキストを変更する方法を説明します。以下の例は、ユーザーのホームディレクトリーで実行されます。
- ユーザーのホームディレクトリーにファイルを作成します。ファイルには、
user_home_tタイプのラベルが付けられます。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 --contextオプションを使用して SELinux コンテキストを定義します。cp --context=system_u:object_r:samba_share_t:s0 file1 file2
~]$ cp --context=system_u:object_r:samba_share_t:s0 file1 file2Copy to Clipboard Copied! Toggle word wrap Toggle overflow --contextがない場合、file2にはunconfined_u:object_r:user_home_tコンテキストでラベルが付けられます。ls -Z file1 file2 -rw-rw-r-- user1 group1 unconfined_u:object_r:user_home_t:s0 file1 -rw-rw-r-- user1 group1 system_u:object_r:samba_share_t:s0 file2
~]$ ls -Z file1 file2 -rw-rw-r-- user1 group1 unconfined_u:object_r:user_home_t:s0 file1 -rw-rw-r-- user1 group1 system_u:object_r:samba_share_t:s0 file2Copy to Clipboard Copied! Toggle word wrap Toggle overflow
手順4.14 既存ファイルを介したファイルのコピー
- root として、
/etcディレクトリーに新しいファイルfile1を作成します。以下に示すように、ファイルには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 - 別のファイル
file2を/tmpディレクトリーに作成します。以下に示すように、ファイルにはuser_tmp_tタイプのラベルが付けられます。touch /tmp/file2
~]$ touch /tmp/file2Copy to Clipboard Copied! Toggle word wrap Toggle overflow ~$ ls -Z /tmp/file2 -rw-r--r-- root root unconfined_u:object_r:user_tmp_t:s0 /tmp/file2
~$ ls -Z /tmp/file2 -rw-r--r-- root root unconfined_u:object_r:user_tmp_t:s0 /tmp/file2Copy to Clipboard Copied! Toggle word wrap Toggle overflow file1をfile2で上書きします。cp /tmp/file2 /etc/file1
~]# cp /tmp/file2 /etc/file1Copy to Clipboard Copied! Toggle word wrap Toggle overflow - コピーした後、次のコマンドを実行すると、
/etc/file1を置き換えた/tmp/file2のuser_tmp_tタイプではなく、etc_tタイプのラベルが付けられたfile1が表示されます。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
4.10.2. ファイルとディレクトリーの移動 リンクのコピーリンクがクリップボードにコピーされました!
/var/www/html/ ディレクトリーにファイルを移動する方法を示しています。ファイルは移動されるため、正しい SELinux コンテキストは継承されません。
手順4.15 ファイルとディレクトリーの移動
- ホームディレクトリーに移動し、そこでファイルを作成します。ファイルには、
user_home_tタイプのラベルが付けられます。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 - 以下のコマンドを入力して、
/var/www/html/ディレクトリーの SELinux コンテキストを表示します。ls -dZ /var/www/html/ drwxr-xr-x root root system_u:object_r:httpd_sys_content_t:s0 /var/www/html/
~]$ ls -dZ /var/www/html/ drwxr-xr-x root root system_u:object_r:httpd_sys_content_t:s0 /var/www/html/Copy to Clipboard Copied! Toggle word wrap Toggle overflow デフォルトでは、/var/www/html/にはhttpd_sys_content_tタイプのラベルが付けられます。/var/www/html/に作成されたファイルおよびディレクトリーは、このタイプを継承します。 - root で
file1を/var/www/html/に移動します。このファイルは移動したので、現在のuser_home_tタイプを保持します。mv file1 /var/www/html/
~]# mv file1 /var/www/html/Copy to Clipboard Copied! Toggle word wrap Toggle overflow ls -Z /var/www/html/file1 -rw-rw-r-- user1 group1 unconfined_u:object_r:user_home_t:s0 /var/www/html/file1
~]# ls -Z /var/www/html/file1 -rw-rw-r-- user1 group1 unconfined_u:object_r:user_home_t:s0 /var/www/html/file1Copy to Clipboard Copied! Toggle word wrap Toggle overflow
user_home_t タイプのラベルが付けられたファイルを読み取ることができません。Web ページを含むすべてのファイルに user_home_t タイプのラベルが付けられている場合、または Apache HTTP Server が読み取れない別のタイプの場合、Mozilla Firefox などの Web ブラウザーを使用してそれらにアクセスしようとすると、パーミッションが拒否されます。
4.10.3. デフォルトの SELinux コンテキストの確認 リンクのコピーリンクがクリップボードにコピーされました!
matchpathcon ユーティリティーを使用して、ファイルおよびディレクトリーに正しい SELinux コンテキストがあるかどうかを確認します。このユーティリティーは、system policy にクエリーを行い、ファイルパスに関連付けられたデフォルトのセキュリティーコンテキストを提供します。[6] 以下の例では、matchpathcon を使用して、/var/www/html/ディレクトリーのファイルに正しくラベル付けされていることを確認します。
手順4.16 matchpathconを使用したデフォルトの SELinux Conxtext の確認
- root ユーザーとして、
/var/www/html/ディレクトリーに 3 つのファイル (file1、file2、およびfile3) を作成します。これらのファイルは、/var/www/html/からhttpd_sys_content_tタイプを継承します。touch /var/www/html/file{1,2,3}~]# touch /var/www/html/file{1,2,3}Copy to Clipboard Copied! Toggle word wrap Toggle overflow ls -Z /var/www/html/ -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 -Z /var/www/html/ -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 - root で、
file1タイプをsamba_share_tに変更します。Apache HTTP Server は、samba_share_tタイプのラベルが付けられたファイルまたはディレクトリーを読み取ることができないことに注意してください。chcon -t samba_share_t /var/www/html/file1
~]# chcon -t samba_share_t /var/www/html/file1Copy to Clipboard Copied! Toggle word wrap Toggle overflow matchpathcon-Vオプションは、現在の SELinux コンテキストを SELinux ポリシー内の正しいデフォルトコンテキストと比較します。以下のコマンドを実行して、/var/www/html/ディレクトリー内の全ファイルをチェックします。matchpathcon -V /var/www/html/* /var/www/html/file1 has context unconfined_u:object_r:samba_share_t:s0, should be system_u:object_r:httpd_sys_content_t:s0 /var/www/html/file2 verified. /var/www/html/file3 verified.
~]$ matchpathcon -V /var/www/html/* /var/www/html/file1 has context unconfined_u:object_r:samba_share_t:s0, should be system_u:object_r:httpd_sys_content_t:s0 /var/www/html/file2 verified. /var/www/html/file3 verified.Copy to Clipboard Copied! Toggle word wrap Toggle overflow
file1 には samba_share_t タイプのラベルが付けられていますが、httpd_sys_content_t タイプのラベルが付けられている必要があります。
/var/www/html/file1 has context unconfined_u:object_r:samba_share_t:s0, should be system_u:object_r:httpd_sys_content_t:s0
/var/www/html/file1 has context unconfined_u:object_r:samba_share_t:s0, should be system_u:object_r:httpd_sys_content_t:s0
file1 にアクセスできるようにするには、restorecon ユーティリティーを使用します。
restorecon -v /var/www/html/file1 restorecon reset /var/www/html/file1 context unconfined_u:object_r:samba_share_t:s0->system_u:object_r:httpd_sys_content_t:s0
~]# restorecon -v /var/www/html/file1
restorecon reset /var/www/html/file1 context unconfined_u:object_r:samba_share_t:s0->system_u:object_r:httpd_sys_content_t:s0
4.10.4. tarによるファイルのアーカイブ リンクのコピーリンクがクリップボードにコピーされました!
tar ユーティリティーは、デフォルトで拡張属性を保持しません。SELinux コンテキストは拡張属性に保存されるため、ファイルのアーカイブ時にコンテキストが失われる可能性があります。tar --selinux コマンドを使用して、コンテキストを保持するアーカイブを作成し、アーカイブからファイルを復元します。tar アーカイブに拡張属性のないファイルが含まれる場合、または拡張属性がシステムのデフォルトと一致するようにするには、restorecon ユーティリティーを使用します。
tar -xvf archive.tar | restorecon -f -
~]$ tar -xvf archive.tar | restorecon -f -
restorecon を実行するためには、root ユーザーでなければならない場合があることに注意してください。
tar アーカイブの作成を示しています。
手順4.17 tar アーカイブの作成
/var/www/html/ディレクトリーに移動し、その SELinux コンテキストを表示します。cd /var/www/html/
~]$ cd /var/www/html/Copy to Clipboard Copied! Toggle word wrap Toggle overflow html]$ ls -dZ /var/www/html/ drwxr-xr-x. root root system_u:object_r:httpd_sys_content_t:s0 .
html]$ ls -dZ /var/www/html/ drwxr-xr-x. root root system_u:object_r:httpd_sys_content_t:s0 .Copy to Clipboard Copied! Toggle word wrap Toggle overflow - root で、
/var/www/html/に 3 つのファイル (file1、file2、およびfile3) を作成します。これらのファイルは、/var/www/html/からhttpd_sys_content_tタイプを継承します。html]# touch file{1,2,3}html]# touch file{1,2,3}Copy to Clipboard Copied! Toggle word wrap Toggle overflow html]$ ls -Z /var/www/html/ -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
html]$ ls -Z /var/www/html/ -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 - root で、以下のコマンドを実行して、
test.tarという名前のtarアーカイブを作成します。SELinux コンテキストを維持するには、--selinuxを使用します。html]# tar --selinux -cf test.tar file{1,2,3}html]# tar --selinux -cf test.tar file{1,2,3}Copy to Clipboard Copied! Toggle word wrap Toggle overflow - root で
test/という名前の新規ディレクトリーを作成し、すべてのユーザーによる完全なアクセスを許可します。mkdir /test
~]# mkdir /testCopy to Clipboard Copied! Toggle word wrap Toggle overflow chmod 777 /test/
~]# chmod 777 /test/Copy to Clipboard Copied! Toggle word wrap Toggle overflow test.tarファイルをtest/にコピーします。cp /var/www/html/test.tar /test/
~]$ cp /var/www/html/test.tar /test/Copy to Clipboard Copied! Toggle word wrap Toggle overflow test/ディレクトリーに移動します。このディレクトリーに移動し、以下のコマンドを実行してtarアーカイブをデプロイメントします。--selinuxオプションを再度指定すると、SELinux コンテキストがdefault_tに変更されます。cd /test/
~]$ cd /test/Copy to Clipboard Copied! Toggle word wrap Toggle overflow test]$ tar --selinux -xvf test.tar
test]$ tar --selinux -xvf test.tarCopy to Clipboard Copied! Toggle word wrap Toggle overflow - SELinux コンテキストを表示します。
httpd_sys_content_tタイプはdefault_tに変更されず、保持されました。これは、--selinuxが使用されていなかったとしたら、変更されていたでしょう。Copy to Clipboard Copied! Toggle word wrap Toggle overflow test/ディレクトリーが必要なくなった場合は、root で以下のコマンドを実行して、そのディレクトリー内のすべてのファイルも削除します。rm -ri /test/
~]# rm -ri /test/Copy to Clipboard Copied! Toggle word wrap Toggle overflow
--xattrs オプションなどのtar の詳細は、tar(1) man ページを参照してください。
4.10.5. starを使用したファイルのアーカイブ リンクのコピーリンクがクリップボードにコピーされました!
star ユーティリティーは、デフォルトで拡張属性を保持しません。SELinux コンテキストは拡張属性に保存されるため、ファイルのアーカイブ時にコンテキストが失われる可能性があります。star -xattr -H=exustar コマンドを使用して、コンテキストを保持するアーカイブを作成します。star パッケージはデフォルトでインストールされません。star をインストールするには、root ユーザーとして yum install star を実行します。
star アーカイブの作成を示しています。
手順4.18 star アーカイブの作成
- root で、
/var/www/html/に 3 つのファイル (file1、file2、およびfile3) を作成します。これらのファイルは、/var/www/html/からhttpd_sys_content_tタイプを継承します。touch /var/www/html/file{1,2,3}~]# touch /var/www/html/file{1,2,3}Copy to Clipboard Copied! Toggle word wrap Toggle overflow ls -Z /var/www/html/ -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 -Z /var/www/html/ -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 /var/www/html/ディレクトリーに変更します。このディレクトリーに、root で以下のコマンドを実行して、test.starという名前のstarアーカイブを作成します。cd /var/www/html
~]$ cd /var/www/htmlCopy to Clipboard Copied! Toggle word wrap Toggle overflow html]# star -xattr -H=exustar -c -f=test.star file{1,2,3} star: 1 blocks + 0 bytes (total of 10240 bytes = 10.00k).html]# star -xattr -H=exustar -c -f=test.star file{1,2,3} star: 1 blocks + 0 bytes (total of 10240 bytes = 10.00k).Copy to Clipboard Copied! Toggle word wrap Toggle overflow - root で
test/という名前の新規ディレクトリーを作成し、すべてのユーザーによる完全なアクセスを許可します。mkdir /test
~]# mkdir /testCopy to Clipboard Copied! Toggle word wrap Toggle overflow chmod 777 /test/
~]# chmod 777 /test/Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 次のコマンドを実行して、
test.starファイルをtest/にコピーします。cp /var/www/html/test.star /test/
~]$ cp /var/www/html/test.star /test/Copy to Clipboard Copied! Toggle word wrap Toggle overflow test/に移動します。このディレクトリーに移動したら、以下のコマンドを実行してstarアーカイブをデプロイメントします。cd /test/
~]$ cd /test/Copy to Clipboard Copied! Toggle word wrap Toggle overflow test]$ star -x -f=test.star star: 1 blocks + 0 bytes (total of 10240 bytes = 10.00k).
test]$ star -x -f=test.star star: 1 blocks + 0 bytes (total of 10240 bytes = 10.00k).Copy to Clipboard Copied! Toggle word wrap Toggle overflow - SELinux コンテキストを表示します。
httpd_sys_content_tタイプはdefault_tに変更されず、保持されています。これは、-xattr -H=exustarオプションが使用されていなかったとしたら、変更されていたでしょう。Copy to Clipboard Copied! Toggle word wrap Toggle overflow test/ディレクトリーが必要なくなった場合は、root で以下のコマンドを実行して、そのディレクトリー内のすべてのファイルも削除します。rm -ri /test/
~]# rm -ri /test/Copy to Clipboard Copied! Toggle word wrap Toggle overflow starが不要になった場合は、root でパッケージを削除します。yum remove star
~]# yum remove starCopy to Clipboard Copied! Toggle word wrap Toggle overflow
star の詳細は、star(1) man ページを参照してください。
4.11. 情報収集ツール リンクのコピーリンクがクリップボードにコピーされました!
avcstat
/sys/fs/selinux/avc/cache_stats であるため、-f /path/to/file で別のキャッシュファイルを指定できます。
avcstat lookups hits misses allocs reclaims frees 47517410 47504630 12780 12780 12176 12275
~]# avcstat
lookups hits misses allocs reclaims frees
47517410 47504630 12780 12780 12176 12275
seinfo
seinfo は、policy.conf ファイル、バイナリーポリシーファイル、モジュール形式のポリシーパッケージリスト、またはポリシーリストファイルを入力として使用するコマンドラインユーティリティーです。seinfo ユーティリティーを使用するには、setools-console パッケージがインストールされている必要があります。
seinfo の出力はバイナリーファイルとソースファイルで異なります。たとえば、ポリシーソースファイルでは、{ }括弧を使用して複数のルール要素を 1 行にグループ化します。同様の効果は、単一の属性が 1 つまたは複数のタイプにデプロイメントされる属性で行われます。これらはデプロイメントされ、バイナリーポリシーファイルでは関連性がなくなったため、検索結果での戻り値はゼロになります。ただし、括弧を使用した 1 行ルールが複数行になったため、ルールの数が大幅に増えています。
seinfo ユーティリティーは、ドメイン属性でタイプ数をリスト表示することもできます。これにより、さまざまな制限のあるプロセスの数を見積もります。
seinfo -adomain -x | wc -l 550
~]# seinfo -adomain -x | wc -l
550
unconfined_domain 属性を使用します。
seinfo -aunconfined_domain_type -x | wc -l 52
~]# seinfo -aunconfined_domain_type -x | wc -l
52
--permissive オプションでカウントできます。
seinfo --permissive -x | wc -l 31
~]# seinfo --permissive -x | wc -l
31
sesearch
sesearch ユーティリティーを使用して、ポリシー内の特定のルールを検索できます。ポリシーソースファイルまたはバイナリーファイルのいずれかを検索できます。以下に例を示します。
sesearch ユーティリティーは、allow ルールの数を提供できます。
sesearch --allow | wc -l 262798
~]# sesearch --allow | wc -l
262798
sesearch --dontaudit | wc -l 156712
~]# sesearch --dontaudit | wc -l
156712
4.12. SELinux ポリシーモジュールの優先付けと無効化 リンクのコピーリンクがクリップボードにコピーされました!
/etc/selinux/ の SELinux モジュールストレージでは、SELinux モジュールで優先度を使用できます。root で次のコマンドを実行すると、異なる優先度の 2 つのモジュールディレクトリーが表示されます。
ls /etc/selinux/targeted/active/modules 100 400 disabled
~]# ls /etc/selinux/targeted/active/modules
100 400 disabled
例4.1 SELinux ポリシーモジュールの優先度の使用
sandbox.pp を使用します。
semodule -X 400 -i sandbox.pp semodule --list-modules=full | grep sandbox 400 sandbox pp 100 sandbox pp
~]# semodule -X 400 -i sandbox.pp
~]# semodule --list-modules=full | grep sandbox
400 sandbox pp
100 sandbox pp
semodule -X 400 -r sandbox libsemanage.semanage_direct_remove_key: sandbox module at priority 100 is now active.
~]# semodule -X 400 -r sandbox
libsemanage.semanage_direct_remove_key: sandbox module at priority 100 is now active.
システムポリシーモジュールの無効化
system policy を無効にするには、root で以下のコマンドを実行します。
semodule -d MODULE_NAME
semodule -d MODULE_NAME
system policy モジュールを削除すると、システムのストレージから削除されるため、再度読み込むことができません。すべてのsystem policy モジュールを復元するために、selinux-policy-targeted パッケージが不必要に再インストールされないようにするには、代わりにsemodule -d を使用します。
4.13. Multi-Level Security (MLS) リンクのコピーリンクがクリップボードにコピーされました!
図4.1 クリアランスのレベル
[D]
図4.2 MLS を使用した許可されたデータフロー
[D]
4.13.1. MLS およびシステム権限 リンクのコピーリンクがクリップボードにコピーされました!
4.13.2. SELinux での MLS の有効化 リンクのコピーリンクがクリップボードにコピーされました!
手順4.19 SELinux MLS ポリシーの有効化
- selinux-policy-mls パッケージをインストールします。
yum install selinux-policy-mls
~]# yum install selinux-policy-mlsCopy to Clipboard Copied! Toggle word wrap Toggle overflow - MLS ポリシーを有効にする前に、ファイルシステムの各ファイルに、MLS ラベルで再ラベル付けする必要があります。ファイルシステムに再ラベル付けすると、制限されたドメインのアクセスが拒否される可能性があります。これにより、システムが正しく起動しなくなる可能性があります。これを防ぐには、
/etc/selinux/configファイルでSELINUX=permissiveを設定します。また、SELINUXTYPE=mlsを設定して、MLS ポリシーを有効にします。設定ファイルは以下のようになります。Copy to Clipboard Copied! Toggle word wrap Toggle overflow - SELinux が Permissive モードで実行していることを確認します。
setenforce 0
~]# setenforce 0Copy to Clipboard Copied! Toggle word wrap Toggle overflow getenforce Permissive
~]$ getenforce PermissiveCopy to Clipboard Copied! Toggle word wrap Toggle overflow - fixfiles スクリプトを使用して、
-Fオプションを含む/.autorelabelファイルを作成し、次回のシステムの再起動時にファイルに再ラベル付けされるようにします。fixfiles -F onboot
~]# fixfiles -F onbootCopy to Clipboard Copied! Toggle word wrap Toggle overflow - システムを再起動します。次回の起動時に、MLS ポリシーに従って、すべてのファイルシステムに再ラベル付けされます。ラベルプロセスは、適切な SELinux コンテキストを使用して、すべてのファイルにラベルを付けます。
*** Warning -- SELinux mls policy relabel is required. *** Relabeling could take a very long time, depending on file *** system size and speed of hard drives. ***********
*** Warning -- SELinux mls policy relabel is required. *** Relabeling could take a very long time, depending on file *** system size and speed of hard drives. ***********Copy to Clipboard Copied! Toggle word wrap Toggle overflow 一番下の行にある*(アスタリスク) 文字は、ラベル付けされている 1000 ファイルを表します。上記の例では、11 の*文字が、ラベルが付けられた 11000 ファイルを表しています。すべてのファイルにラベルを付けるのにかかる時間は、システムのファイル数と、ハードディスクドライブの速度により異なります。最新のシステムでは、このプロセスに 10 分程度かかる場合があります。ラベリングプロセスが終了すると、システムが自動的に再起動します。 - Permissive モードでは SELinux ポリシーは強制されませんが、Enforcing モードで実行された場合に拒否されたであろうアクションの拒否は引き続きログに記録されます。Enforcing モードに切り替える前に、root で次のコマンドを実行して、システムの最後の起動時に SELinux がアクションを拒否しなかったことを確認します。最後のシステムの起動時に SELinux がアクションを拒否しなかった場合に、このコマンドを実行しても出力は返されません。システムの起動時に SELinux がアクセスを拒否された場合のトラブルシューティングは、11章トラブルシューティング を参照してください。
grep "SELinux is preventing" /var/log/messages
~]# grep "SELinux is preventing" /var/log/messagesCopy to Clipboard Copied! Toggle word wrap Toggle overflow /var/log/messagesファイルに拒否メッセージがないか、すでに拒否を解決している場合は、/etc/selinux/configファイルにSELINUX=enforcingを設定します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow - システムを再起動し、SELinux が Enforcing モードで実行していることを確認します。
getenforce Enforcing
~]$ getenforce EnforcingCopy to Clipboard Copied! Toggle word wrap Toggle overflow MLS ポリシーが有効になっていることも確認します。sestatus |grep mls Policy from config file: mls
~]# sestatus |grep mls Policy from config file: mlsCopy to Clipboard Copied! Toggle word wrap Toggle overflow
4.13.3. 特定の MLS 範囲を持つユーザーの作成 リンクのコピーリンクがクリップボードにコピーされました!
手順4.20 特定の MLS 範囲を持つユーザーの作成
- useradd コマンドを使用して新しい Linux ユーザーを追加し、その新しい Linux ユーザーを既存の SELinux ユーザー (この例では
staff_u) にマッピングします。useradd -Z staff_u john
~]# useradd -Z staff_u johnCopy to Clipboard Copied! Toggle word wrap Toggle overflow - 新しく作成した Linux ユーザーにパスワードを割り当てます。
prompt~]# passwd john
prompt~]# passwd johnCopy to Clipboard Copied! Toggle word wrap Toggle overflow - root で次のコマンドを実行し、SELinux ユーザーと Linux ユーザー間のマッピングを表示します。出力は、以下のようになります。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - ユーザー
johnに指定範囲を定義します。semanage login --modify --range s2:c100 john
~]# semanage login --modify --range s2:c100 johnCopy to Clipboard Copied! Toggle word wrap Toggle overflow - SELinux ユーザーと Linux ユーザー間のマッピングを再度表示します。ユーザー
johnには、指定した MLS レンジが定義されていることに注意してください。Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 必要に応じて、john のホームディレクトリーのラベルを修正するには、次のコマンドを入力します。
chcon -R -l s2:c100 /home/john
~]# chcon -R -l s2:c100 /home/johnCopy to Clipboard Copied! Toggle word wrap Toggle overflow
4.13.4. Polyinstantiated ディレクトリーの設定 リンクのコピーリンクがクリップボードにコピーされました!
/tmp ディレクトリーおよび /var/tmp/ ディレクトリーは、通常、すべてのプログラム、サービス、およびユーザーが一時的に保存するために使用されます。ただし、このような設定を行うと、競合状態攻撃や、ファイル名に基づく情報漏えいに対して脆弱になります。SELinux は、polyinstantiated ディレクトリーの形式でソリューションを提供します。これは、事実上、/tmp と /var/tmp/ の両方がインスタンス化され、各ユーザーに対して非公開になっていることを意味します。ディレクトリーのインスタンス化を有効にすると、各ユーザーの /tmp ディレクトリーおよび /var/tmp/ ディレクトリーが、/tmp-inst および /var/tmp/tmp-inst に自動的にマウントされます。
手順4.21 ポリインスタンス化ディレクトリーの有効化
/etc/security/namespace.confファイルの最後の 3 行のコメントを解除して、/tmp、/var/tmp/、およびユーザーのホームディレクトリーのインスタンス化を有効にします。tail -n 3 /etc/security/namespace.conf /tmp /tmp-inst/ level root,adm /var/tmp /var/tmp/tmp-inst/ level root,adm $HOME $HOME/$USER.inst/ level
~]$ tail -n 3 /etc/security/namespace.conf /tmp /tmp-inst/ level root,adm /var/tmp /var/tmp/tmp-inst/ level root,adm $HOME $HOME/$USER.inst/ levelCopy to Clipboard Copied! Toggle word wrap Toggle overflow /etc/pam.d/loginファイルーで、pam_namespace.soモジュールが session 用に設定されていることを確認します。grep namespace /etc/pam.d/login session required pam_namespace.so
~]$ grep namespace /etc/pam.d/login session required pam_namespace.soCopy to Clipboard Copied! Toggle word wrap Toggle overflow - システムを再起動します。
4.14. ファイル名の推移 リンクのコピーリンクがクリップボードにコピーされました!
A_t というラベルの付いたプロセスが、B_t というラベルの付いたディレクトリーに指定したオブジェクトクラスを作成し、指定されたオブジェクトクラスの名前が objectname である場合は、ラベル C_t を取得します。このメカニズムにより、システム上のプロセスをより詳細に制御できます。
- デフォルトでは、オブジェクトは親ディレクトリーからラベルを継承します。たとえば、
etc_tのラベルが付いたディレクトリーにファイルを作成すると、そのファイルにはetc_tのラベルも付きます。ただし、この方法は、異なるラベルのディレクトリー内に複数のファイルがあることが望ましい場合には役に立ちません。 - ポリシーの作成者は、ことを示すルールをポリシーに作成できます。タイプ
A_tのプロセスがB_tというラベルが付いたディレクトリーに指定のオブジェクトクラスを作成すると、オブジェクトは新しいC_tラベルを取得します。この方法は、1 つのプログラムが、各オブジェクトに個別のラベルが必要な同じディレクトリーに複数のオブジェクトを作成する場合に問題になります。また、作成されるオブジェクトの名前が指定されていないため、このルールでは部分的な制御しか行われません。 - 特定のアプリケーションでは、SELinux が、このようなアプリケーションがシステムに、特定のパスのラベルを尋ねられるように認識しています。その後、このようなアプリケーションは、カーネルに、必要なラベルを持つオブジェクトを作成するように要求します。SELinux 対応のアプリケーションの例としては、rpm パッケージマネージャー、restorecon ユーティリティー、または udev デバイスマネージャーが挙げられます。ただし、SELinux 対応のファイルまたはディレクトリーを作成するアプリケーションをすべて指示することはできません。作成後、多くの場合、オブジェクトに正しいラベルを付け直す必要があります。制限されているドメインがオブジェクトを使用しようとすると、AVC メッセージが返されます。
strcmp() 機能による完全一致が使用されることに注意してください。正規表現またはワイルドカード文字の使用は考慮されません。
例4.2 ファイル名の推移で記述されるポリシールールの例
filetrans_pattern(unconfined_t, admin_home_t, ssh_home_t, dir, ".ssh")
filetrans_pattern(unconfined_t, admin_home_t, ssh_home_t, dir, ".ssh")
unconfined_t タイプのプロセスが admin_home_t のラベルが付いたディレクトリーに ~/.ssh/ ディレクトリーを作成すると、~/.ssh/ ディレクトリーはラベル ssh_home_t を取得します。
filetrans_pattern(staff_t, user_home_dir_t, httpd_user_content_t, dir, "public_html") filetrans_pattern(thumb_t, user_home_dir_t, thumb_home_t, file, "missfont.log") filetrans_pattern(kernel_t, device_t, xserver_misc_device_t, chr_file, "nvidia0") filetrans_pattern(puppet_t, etc_t, krb5_conf_t, file, "krb5.conf")
filetrans_pattern(staff_t, user_home_dir_t, httpd_user_content_t, dir, "public_html")
filetrans_pattern(thumb_t, user_home_dir_t, thumb_home_t, file, "missfont.log")
filetrans_pattern(kernel_t, device_t, xserver_misc_device_t, chr_file, "nvidia0")
filetrans_pattern(puppet_t, etc_t, krb5_conf_t, file, "krb5.conf")
4.15. ptrace() の無効化 リンクのコピーリンクがクリップボードにコピーされました!
ptrace() システムコールを使用すると、あるプロセスで別のプロセスの実行を監視および制御し、そのメモリーとレジスターを変更できます。この呼び出しは、strace ユーティリティーの使用など、デバッグ中の開発者が主に使用します。ptrace() が必要ない場合は無効にして、システムセキュリティーを向上させることができます。これは、deny_ptrace ブール値を有効にすると実行できます。これにより、unconfined_tのドメインで実行しているプロセスであっても、他のプロセスでptrace() を使用できなくなります。
deny_ptrace ブール値は、デフォルトでは無効になっています。これを有効にするには、root で setsebool -P deny_ptrace on を実行します。
setsebool -P deny_ptrace on
~]# setsebool -P deny_ptrace on
getsebool deny_ptrace deny_ptrace --> on
~]$ getsebool deny_ptrace
deny_ptrace --> on
setsebool -P deny_ptrace off
~]# setsebool -P deny_ptrace off
-P オプションを使用しないでください。
ptrace() システムコールを使用できます。ptrace() の使用が許可されているドメインをすべてリスト表示するには、次のコマンドを実行します。setools-console パッケージは、sesearch ユーティリティーを提供し、パッケージはデフォルトではインストールされないことに注意してください。
sesearch -A -p ptrace,sys_ptrace -C | grep -v deny_ptrace | cut -d ' ' -f 5
~]# sesearch -A -p ptrace,sys_ptrace -C | grep -v deny_ptrace | cut -d ' ' -f 5
4.16. サムネイルの保護 リンクのコピーリンクがクリップボードにコピーされました!
- /usr/bin/evince-thumbnailer
- /usr/bin/ffmpegthumbnailer
- /usr/bin/gnome-exe-thumbnailer.sh
- /usr/bin/gnome-nds-thumbnailer
- /usr/bin/gnome-xcf-thumbnailer
- /usr/bin/gsf-office-thumbnailer
- /usr/bin/raw-thumbnailer
- /usr/bin/shotwell-video-thumbnailer
- /usr/bin/totem-video-thumbnailer
- /usr/bin/whaaw-thumbnailer
- /usr/lib/tumbler-1/tumblerd
- /usr/lib64/tumbler-1/tumblerd
第5章 sepolicy スイート リンクのコピーリンクがクリップボードにコピーされました!
sepolicy ユーティリティーは、インストールした SELinux ポリシーをクエリーする一連の機能を提供します。このような機能は、新しく追加されたものか、以前は sepolgen または setrans などの別のユーティリティーで提供されていました。このスイートにより、移行レポート、man ページ、または新しいポリシーモジュールを生成できるようになり、ユーザーのアクセスが容易になり、SELinux ポリシーをより深く理解できるようになります。
sepolicy を提供します。sepolicy をインストールする場合は、root で以下のコマンドを実行します。
yum install policycoreutils-devel
~]# yum install policycoreutils-devel
sepolicy スイートは、コマンドラインパラメーターとして呼び出される以下の機能を提供します。
| 機能 | 説明 |
|---|---|
| ブール値 | ブール値の説明を表示するには、SELinux ポリシーをクエリーします。 |
| 通信 | SELinux ポリシーをクエリーして、ドメインが互いに通信できるかどうかを確認します。 |
| generate | SELinux ポリシーモジュールテンプレートの生成 |
| gui | SELinux ポリシーのグラフィカルユーザーインターフェイス |
| interface | SELinux ポリシーのインターフェイスのリストを表示する |
| man ページ | SELinux の man ページの生成 |
| network | SELinux ポリシーのネットワーク情報をクエリーする |
| 遷移 | SELinux ポリシーのクエリーと、プロセスの移行レポートの生成 |
5.1. sepolicy Python のバインディング リンクのコピーリンクがクリップボードにコピーされました!
sesearch ユーティリティーおよび seinfo ユーティリティーが同梱されていました。sesearch ユーティリティーは SELinux ポリシー内のルールを検索するのに使用しますが、seinfo ユーティリティーは、ポリシー内の他のさまざまなコンポーネントにクエリーできるようにします。
sepolicy スイートでこのユーティリティーの機能を使用できるように、sesearch および seinfo 用の Python バインディングが追加されました。以下の例を参照してください。
5.2. SELinux ポリシーモジュールの生成: sepolicy generate リンクのコピーリンクがクリップボードにコピーされました!
sepolgen またはユーティリティー selinux-polgengui ユーティリティーが使用されていました。このツールは、sepolicy スイートに統合されています。Red Hat Enterprise Linux 7 では、sepolicy generate コマンドを使用して最初の SELinux ポリシーモジュールテンプレートを生成します。
sepolgen とは異なり、root ユーザーとして sepolicy generate を実行する必要はありません。また、このユーティリティーは、RPM 仕様ファイルを作成します。これを使用して、ポリシーパッケージファイル (NAME.pp) とインターフェイスファイル (NAME.if) を正しい場所にインストールする RPM パッケージを構築し、SELinux ポリシーをカーネルにインストールして、ラベリングを修正します。セットアップスクリプトは、引き続き SELinux ポリシーをインストールし、ラベリングを設定します。また、インストールしたポリシーに基づく man ページは、sepolicy manpage コマンドを使用して生成されます。[7] 最後に、sepolicy generate が SELinux ポリシーと man ページを構築してコンパイルし、RPM パッケージを作成します。これにより、別のシステムにインストールできるようになります。
sepolicy generate を実行すると、以下のファイルが生成されます。
NAME.te– Type Enforcement ファイル- このファイルは、特定のドメインに対するすべてのタイプとルールを定義します。
NAME.if- インターフェイスファイル- このファイルは、システムのデフォルトのファイルコンテキストを定義します。これは、
NAME.teファイルで作成されるファイルタイプを取り、ファイルのパスをタイプに関連付けます。restoreconおよびrpmなどのユーティリティーは、このパスを使用してラベルを書き込みます。 NAME_selinux.spec– RPM SPEC ファイル- このファイルは、SELinux ポリシーをインストールし、ラベリングを設定する RPM SPEC ファイルです。このファイルでは、インターフェイスファイルと、ポリシーを説明する man ページもインストールされます。sepolicy manpage -d NAME コマンドを使用すると、man ページを生成できます。
NAME.sh- ヘルパーシェルスクリプト- このスクリプトは、システムでラベリングをコンパイル、インストール、および修正するのに役立ちます。また、インストールしたポリシーに基づいて man ページを生成し、他のシステムにインストールするのに適した RPM パッケージをコンパイルして構築します。
sepolicy generate はソースドメインからターゲットドメインに生成されたすべてのパスを出力します。sepolicy generate の詳細は、sepolicy-generate(8) man ページを参照してください。
5.3. ドメイントランジションの概要: sepolicy transition リンクのコピーリンクがクリップボードにコピーされました!
setrans ユーティリティーを使用して、2 つのドメインまたはプロセスタイプ間の移行が可能であり、これらのドメインまたはプロセス間の移行に使用されるすべての中間タイプを出力していました。Red Hat Enterprise Linux 7 では、setrans が sepolicy スイートに同梱され、代わりに sepolicy transition コマンドが使用されるようになりました。
sepolicy transition コマンドは、SELinux ポリシーにクエリーし、プロセスの移行レポートを作成します。sepolicy transition コマンドには、ソースドメイン (-s オプションで指定) とターゲットドメイン (-t オプションで指定) の 2 つのコマンドライン引数が必要です。ソースドメインのみを入力した場合は、sepolicy transition により、ソースドメインが移行可能なドメインがすべてリスト表示されます。以下の出力には、すべてのエントリーが含まれているわけではありません。「@」 の文字は、「execute」 を意味します。
sepolicy transition はソースドメインからターゲットドメインへのすべての移行パスについて SELinux ポリシーを検査し、これらのパスをリスト表示します。以下の出力は完了していません。
sepolicy transition の詳細は、sepolicy-transition(8) man ページを参照してください。
5.4. 手動ページの生成: sepolicy manpage リンクのコピーリンクがクリップボードにコピーされました!
sepolicy manpage コマンドは、ドメインを処理する SELinux ポリシーに基づいて man ページを生成します。その結果、このようなドキュメントは常に最新になります。自動生成される man ページの名前は、それぞれプロセスドメイン名と、_selinux の接尾辞 (httpd_selinux など) で設定されます。
Entrypointsセクションには、ドメイン移行時に実行する必要がある実行ファイルがすべて含まれています。Process Typesセクションでは、ターゲットドメインと同じ接頭辞で始まるプロセスタイプをすべて表示します。Booleansセクションは、ドメインに関連付けられたブール値のリストを表示します。Port Typesセクションにはドメインと同じ接頭辞に一致するポートタイプが含まれ、これらのポートタイプに割り当てられるデフォルトのポート番号を説明します。Managed Filesのセクションでは、ドメインへの書き込みが許可されるタイプと、これらのタイプに関連付けられたデフォルトのパスを説明します。File Contextsセクションには、ドメインに関連付けられたすべてのファイルタイプと、これらのファイルタイプとシステム上のデフォルトのパスラベリングの使用方法が説明されています。Sharing Filesセクションでは、public_content_tなどのドメイン共有タイプの使用方法を説明します。
sepolicy manpage の詳細は、sepolicy-manpage(8) man ページを参照してください。
第6章 ユーザーの制限 リンクのコピーリンクがクリップボードにコピーされました!
unconfined_u ユーザーにマッピングされています。unconfined_u が実行するプロセスはすべて、unconfined_t ドメイン内にあります。つまり、ユーザーは、標準の Linux DAC ポリシーの制限内で、システム全体にアクセスできます。ただし、Red Hat Enterprise Linux では、限られた SELinux ユーザーの多くが利用できます。つまり、ユーザーは限られた機能セットに限定できます。各 Linux ユーザーは、SELinux ポリシーを使用して SELinux ユーザーにマッピングされます。これにより、Linux ユーザーは、(ユーザーによっては) SELinux ユーザーに設定された制限を継承できなくなります。
- X Window System を実行する
- ネットワークを使用する
- setuid アプリケーションを実行します (SELinux ポリシーで許可されていない場合)。
- または、su コマンドおよび sudo コマンドを実行します。
user_u ユーザーが実行しているプロセスは、user_t ドメイン内にあります。このようなプロセスはネットワークに接続できますが、su コマンドまたは sudo コマンドは実行できません。これにより、ユーザーからシステムを保護できます。制限のあるユーザーとその能力の詳細は、「制限のあるユーザーおよび制限のないユーザー」、表3.1「SELinux ユーザー機能」 を参照してください。
6.1. Linux および SELinux のユーザーマッピング リンクのコピーリンクがクリップボードにコピーされました!
__default__ ログインにマッピングされ、続いて、これは SELinux unconfined_u ユーザーにマッピングされます。useradd コマンドで Linux ユーザーを作成し、オプションを指定しないと、SELinux unconfined_u ユーザーにマッピングされます。以下は、default-mapping を定義します。
__default__ unconfined_u s0-s0:c0.c1023 *
__default__ unconfined_u s0-s0:c0.c1023 *
6.2. 新規の Linux ユーザーの制限: useradd リンクのコピーリンクがクリップボードにコピーされました!
unconfined_u ユーザーにマッピングされた Linux ユーザーは、unconfined_t ドメインで実行します。これは、unconfined_u にマッピングされた Linux ユーザーとしてログインしながら id -Z を実行すると確認できます。
id -Z unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
~]$ id -Z
unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
unconfined_t ドメインで実行している場合は、SELinux ポリシールールが適用されますが、unconfined_t ドメインで実行している Linux ユーザーのほぼすべてのアクセスを許可するポリシールールが存在します。制限のない Linux ユーザーが、unconfined_t ドメインから自身の制限のあるドメインに移行できるものとして SELinux ポリシーが定義するアプリケーションを実行すると、制限のない Linux ユーザーは制限のあるドメインの制限を引き続き受けます。セキュリティー上の利点は、Linux ユーザーが制限されていなくても、アプリケーションは制限されたままになるため、アプリケーションの欠陥の悪用はポリシーにより制限される可能性があることです。
-Z オプションを使用して、マッピング先の SELinux ユーザーを指定します。以下の例では、新しい Linux ユーザー useruuser を作成し、そのユーザーを SELinux user_u ユーザーにマップしています。SELinux user_u ユーザーにマッピングされた Linux ユーザーは、user_t ドメインで実行します。このドメインでは、SELinux ポリシーで setuid アプリケーションが許可 (passwd など) されていない限り、Linux ユーザーは setuid アプリケーションを実行できず、su コマンドまたは sudo コマンドを実行できないため、これらのコマンドで root ユーザーになることができません。
手順6.1 新しい Linux ユーザーを user_u SELinux ユーザーに限定する
- root で、SELinux
user_uユーザーにマッピングする新しい Linux ユーザー (useruuser) を作成します。useradd -Z user_u useruuser
~]# useradd -Z user_u useruuserCopy to Clipboard Copied! Toggle word wrap Toggle overflow useruuserとuser_uとの間のマッピングを表示するには、root で以下のコマンドを実行します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow - root で、Linux
useruuserユーザーにパスワードを割り当てます。Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 現行セッションからログアウトし、Linux
useruuserユーザーとしてログインします。ログインすると、pam_selinuxにより、Linux ユーザーが SELinux ユーザー (この例ではuser_u) にマップされ、作成される SELinux コンテキストが設定されます。Linux ユーザーのシェルはこのコンテキストで起動します。以下のコマンドを入力して、Linux ユーザーのコンテキストを表示します。id -Z user_u:user_r:user_t:s0
~]$ id -Z user_u:user_r:user_t:s0Copy to Clipboard Copied! Toggle word wrap Toggle overflow - Linux
useruuserのセッションをログアウトし、アカウントで再度ログインします。Linuxuseruuserを使用しない場合は、root で次のコマンドを実行し、ホームディレクトリーとともに削除します。userdel -Z -r useruuser
~]# userdel -Z -r useruuserCopy to Clipboard Copied! Toggle word wrap Toggle overflow
6.3. 既存の Linux ユーザーの制限: semanage ログイン リンクのコピーリンクがクリップボードにコピーされました!
unconfined_u ユーザー (デフォルトの動作) にマッピングされており、マップされている SELinux ユーザー を変更する場合は、semanage login コマンドを使用します。以下の例では、newuser という名前の新しい Linux ユーザーを作成し、その Linux ユーザーを SELinux user_u ユーザーにマップします。
手順6.2 SELinux ユーザーへの Linux ユーザーのマッピング
- root で、新しい Linux ユーザー (
newuser) を作成します。このユーザーはデフォルトのマッピングを使用するため、semanage login -lの出力には表示されません。useradd newuser
~]# useradd newuserCopy to Clipboard Copied! Toggle word wrap Toggle overflow Copy to Clipboard Copied! Toggle word wrap Toggle overflow - Linux
newuserユーザーを SELinuxuser_uユーザーにマッピングするには、root で以下のコマンドを実行します。semanage login -a -s user_u newuser
~]# semanage login -a -s user_u newuserCopy to Clipboard Copied! Toggle word wrap Toggle overflow -aオプションは新しいレコードを追加し、-sオプションは、Linux ユーザーをマッピングする SELinux ユーザーを指定します。最後の引数newuserは、指定した SELinux ユーザーにマッピングする Linux ユーザーです。 - Linux
newuserユーザーとuser_uとの間のマッピングを表示するには、semanageユーティリティーを再度使用します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow - root で、Linux
newuserユーザーにパスワードを割り当てます。Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 現在のセッションからログアウトし、Linux
newuserユーザーとしてログインします。次のコマンドを実行すると、newuserの SELinux コンテキストが表示されます。id -Z user_u:user_r:user_t:s0
~]$ id -Z user_u:user_r:user_t:s0Copy to Clipboard Copied! Toggle word wrap Toggle overflow - Linux
newuserのセッションをログアウトし、アカウントで再度ログインします。Linuxnewuserを使用しない場合は、root で次のコマンドを実行し、ホームディレクトリーとともに削除します。userdel -r newuser
~]# userdel -r newuserCopy to Clipboard Copied! Toggle word wrap Toggle overflow root で、Linuxnewuserユーザーおよびuser_u間のマッピングを削除します。semanage login -d newuser
~]# semanage login -d newuserCopy to Clipboard Copied! Toggle word wrap Toggle overflow Copy to Clipboard Copied! Toggle word wrap Toggle overflow
6.4. デフォルトマッピングの変更 リンクのコピーリンクがクリップボードにコピーされました!
__default__ ログインにマッピングされ、続いて、これは SELinux unconfined_u ユーザーにマッピングされます。新規の Linux ユーザーと、SELinux ユーザーに特別にマッピングされていない Linux ユーザーをデフォルトで制限する場合は、semanage login コマンドを使用してデフォルトのマッピングを変更します。
unconfined_u から user_u に変更されます。
semanage login -m -S targeted -s "user_u" -r s0 __default__
~]# semanage login -m -S targeted -s "user_u" -r s0 __default__
__default__ ログインが user_u にマッピングされていることを確認します。
__default__ ログインと同様に、user_u にマッピングされます。
unconfined_u ユーザーに __default__ ログインをマッピングします。
semanage login -m -S targeted -s "unconfined_u" -r s0-s0:c0.c1023 __default__
~]# semanage login -m -S targeted -s "unconfined_u" -r s0-s0:c0.c1023 __default__
6.5. xguest: キオスクモード リンクのコピーリンクがクリップボードにコピーされました!
xguest_u に割り当てられています。表3.1「SELinux ユーザー機能」 を参照してください。ファイルの作成や設定の変更など、このアカウントでログインした変更は、ログアウトすると失われます。
- root で、xguest パッケージをインストールします。必要に応じて依存関係をインストールします。
yum install xguest
~]# yum install xguestCopy to Clipboard Copied! Toggle word wrap Toggle overflow - キオスクアカウントをさまざまな人が使用できるようにするために、アカウントはパスワードで保護されていません。そのため、アカウントは SELinux が Enforcing モードで実行されている場合にのみ保護できます。このアカウントでログインする前に、
getenforceユーティリティーを使用して、SELinux が Enforcing モードで実行していることを確認します。getenforce Enforcing
~]$ getenforce EnforcingCopy to Clipboard Copied! Toggle word wrap Toggle overflow 実行していない場合は、「SELinux のステータスおよびモードの永続的変更」 で Enforcing モードへの変更に関する詳細を参照してください。SELinux が Permissive モードまたは Disabled の場合は、このアカウントでログインできません。 - GNOME ディスプレイマネージャー (GDM) を使用しないと、このアカウントにログインできません。xguest パッケージがインストールされると、
Guestアカウントが GDM ログイン画面に追加されます。
6.6. アプリケーションを実行するユーザーに対するブール値 リンクのコピーリンクがクリップボードにコピーされました!
/tmp ディレクトリーでアプリケーション(ユーザーの権限を継承)を実行できないようにすると、欠陥のあるアプリケーションや悪意のあるアプリケーションが、ユーザーが所有するファイルを変更できなくなります。
setsebool ユーティリティーで設定されます。setsebool -P は永続的な変更を行います。システムを再起動しても変更を持続させない場合は、-P オプションを使用しないでください。
guest_t
guest_t ドメイン内の Linux ユーザーによる、ホームディレクトリーおよび /tmp でのアプリケーションの実行を阻止するには、次のコマンドを実行します。
setsebool -P guest_exec_content off
~]# setsebool -P guest_exec_content off
xguest_t
xguest_t ドメイン内の Linux ユーザーによる、ホームディレクトリーおよび /tmp でのアプリケーションの実行を阻止するには、次のコマンドを実行します。
setsebool -P xguest_exec_content off
~]# setsebool -P xguest_exec_content off
user_t
user_t ドメイン内の Linux ユーザーによる、ホームディレクトリーおよび /tmp でのアプリケーションの実行を阻止するには、次のコマンドを実行します。
setsebool -P user_exec_content off
~]# setsebool -P user_exec_content off
staff_t
staff_t ドメイン内の Linux ユーザーによる、ホームディレクトリーおよび /tmp でのアプリケーションの実行を阻止するには、次のコマンドを実行します。
setsebool -P staff_exec_content off
~]# setsebool -P staff_exec_content off
staff_exec_content のブール値を有効にし、staff_t ドメインの Linux ユーザーを許可して、ホームディレクトリーおよび /tmp でアプリケーションを実行するには、以下のコマンドを実行します。
setsebool -P staff_exec_content on
~]# setsebool -P staff_exec_content on
第7章 Sandbox を使用したプログラムの保護 リンクのコピーリンクがクリップボードにコピーされました!
7.1. サンドボックスを使用したアプリケーションの実行 リンクのコピーリンクがクリップボードにコピーされました!
yum install policycoreutils-sandbox
~]# yum install policycoreutils-sandbox
sandbox [options] application_under_test
~]$ sandbox [options] application_under_test
-X オプションを使用します。以下に例を示します。
sandbox -X evince
~]$ sandbox -X evince
-Xは、sandbox に、アプリケーションに限定されたセカンダリー X Server (この場合は evince) を設定してから、必要なリソースをコピーし、ユーザーの home ディレクトリーまたは /tmp ディレクトリーに閉じた仮想環境を作成するように指示します。
sandbox -H sandbox/home -T sandbox/tmp -X firefox
~]$ sandbox -H sandbox/home -T sandbox/tmp -X firefox
/home には sandbox/home が使用され、/tmp には sandbox/tmp が使用されることに注意してください。異なるアプリケーションは、異なる制限された環境に置かれます。アプリケーションは全画面モードで実行されるため、その他の機能にアクセスできなくなります。前述のように、sandbox_x_file_t のラベルが付いたファイルを除き、ファイルを開いたり、作成したりすることはできません。
sandbox_web_t ラベルを使用します。たとえば、Firefox を起動する場合:
sandbox ‑X ‑t sandbox_web_t firefox
~]$ sandbox ‑X ‑t sandbox_web_t firefox
sandbox (8) man ページを参照してください。
第8章 sVirt リンクのコピーリンクがクリップボードにコピーされました!
非仮想化環境
仮想化環境
8.1. セキュリティーおよび仮想化 リンクのコピーリンクがクリップボードにコピーされました!
8.2. sVirt のラベル付け リンクのコピーリンクがクリップボードにコピーされました!
ps -eZ | grep qemu system_u:system_r:svirt_t:s0:c87,c520 27950 ? 00:00:17 qemu-kvm system_u:system_r:svirt_t:s0:c639,c757 27989 ? 00:00:06 qemu-system-x86
~]# ps -eZ | grep qemu
system_u:system_r:svirt_t:s0:c87,c520 27950 ? 00:00:17 qemu-kvm
system_u:system_r:svirt_t:s0:c639,c757 27989 ? 00:00:06 qemu-system-x86
ls -lZ /var/lib/libvirtimages/* system_u:object_r:svirt_image_t:s0:c87,c520 image1
~]# ls -lZ /var/lib/libvirtimages/*
system_u:object_r:svirt_image_t:s0:c87,c520 image1
| タイプ | SELinux コンテキスト | 説明 |
|---|---|---|
| 仮想マシンプロセス | system_u:system_r:svirt_t:MCS1 | MCS1 は、ランダムに選択された MCS フィールドです。現在は、約 500,000 のラベルがサポートされています。 |
| 仮想マシンのイメージ | system_u:object_r:svirt_image_t:MCS1 | 同じ MCS フィールドで svirt_t とラベル付けされたプロセスのみが、このイメージファイルおよびデバイスの読み取り/書き込みが可能です。 |
| 仮想マシンの共有読み取り/書き込みコンテンツ | system_u:object_r:svirt_image_t:s0 | svirt_t のラベルが付いたすべてのプロセスは、svirt_image_t:s0 ファイルおよびデバイスに書き込むことができます。 |
| 仮想マシンのイメージ | system_u:object_r:virt_content_t:s0 | イメージが存在する場合に使用されるシステムのデフォルトラベル。svirt_t 仮想プロセスは、このラベルの付いたファイル/デバイスの読み取りはできません。 |
第9章 セキュアな Linux コンテナー リンクのコピーリンクがクリップボードにコピーされました!
virsh コマンドラインユーティリティーを使用することもできます。
第10章 SELinux systemd のアクセス制御 リンクのコピーリンクがクリップボードにコピーされました!
systemd デーモンにより制御されます。Red Hat Enterprise Linux の以前のリリースでは、デーモンを起動する方法が 2 つありました。
- システムの起動時に、System V
initデーモンはinit.rcスクリプトを起動し、このスクリプトにより必要なデーモンを起動します。たとえば、システムの起動時に起動した Apache サーバーには、以下の SELinux ラベルが貼られています。system_u:system_r:httpd_t:s0
system_u:system_r:httpd_t:s0Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 管理者が手動で
init.rcスクリプトを起動すると、デーモンが実行します。たとえば、service httpd restart コマンドを Apache サーバーで実行すると、表示される SELinux ラベルは次のようになります。unconfined_u:system_r:httpd_t:s0
unconfined_u:system_r:httpd_t:s0Copy to Clipboard Copied! Toggle word wrap Toggle overflow
systemd デーモンでは、遷移が大きく異なります。systemd は、init_t タイプを使用して、システムでデーモンを開始および停止するすべての呼び出しを処理するため、デーモンを手動で再起動すると、ラベルのユーザー部分を上書きできます。その結果、上記の両方のシナリオのラベルは、期待どおりに system_u:system_r:httpd_t:s0 で、SELinux ポリシーを改善して、どのドメインがどのユニットを制御できるかを管理できます。
10.1. サービスへの SELinux のアクセス権限 リンクのコピーリンクがクリップボードにコピーされました!
systemd はすべてのサービスを開始および停止し、ユーザーとプロセスは、systemctl ユーティリティーを使用して systemd と通信します。systemd デーモンは、SELinux ポリシーを調べ、呼び出しているプロセスのラベルと、呼び出し元が管理しようとしているユニットファイルのラベルを確認してから、呼び出し元のアクセスを許可するかどうかを SELinux に確認します。このアプローチにより、システムサービスの開始や停止などの、重要なシステム機能へのアクセス制御が強化されます。
systemctl を実行して D-Bus メッセージを systemd に送信できるようにする必要がありました。これにより、NetworkManager が要求するサービスが開始または停止します。実際、NetworkManager は、systemctl ができることをすべて実行できるようになっていました。また、特定のサービスのみを開始または停止できるように、限定管理者を設定することもできませんでした。
systemd は SELinux Access Manager としても機能します。systemctl を実行しているプロセス、またはsystemd に D-Bus メッセージを送信したプロセスのラベルを取得できます。次に、デーモンは、プロセスが設定するユニットファイルのラベルを探します。最後に、SELinux ポリシーでプロセスラベルとユニットファイルラベルとの間で特定のアクセスが許可されている場合、systemd はカーネルから情報を取得できます。これは、特定のサービスに対して、systemd と相互作用する必要がある侵害されたアプリケーションを SELinux が制限できることを意味します。ポリシー作成者は、このような粒度の細かい制御を使用して、管理者を制限することもできます。ポリシーの変更には、以下のパーミッションを持つ service という名前の新しいクラスが関与します。
systemd でのアクセス制御操作は、すべての場合で一致するわけではありません。SELinux アクセスログと、systemd メソッド呼び出しをラインアップするためにマッピングが定義されました。表10.2「SELinux アクセスチェックでの systemd 一般システムコールのマッピング」 は、システム全般のアクセスチェックをカバーするのに対し、表10.1「SELinux アクセスチェックでの systemd ユニットファイルメソッド呼び出しのマッピング」 は、ユニットファイルのアクセスチェックをマップします。いずれかのテーブルに一致するものが見つからない場合は、undefined システムチェックが呼び出されます。
systemd ユニットファイルメソッド | SELinux アクセスチェック |
|---|---|
| DisableUnitFiles | disable |
| EnableUnitFiles | enable |
| GetUnit | status |
| GetUnitByPID | status |
| GetUnitFileState | status |
| Kill | stop |
| KillUnit | stop |
| LinkUnitFiles | enable |
| ListUnits | status |
| LoadUnit | status |
| MaskUnitFiles | disable |
| PresetUnitFiles | enable |
| ReenableUnitFiles | enable |
| Reexecute | start |
| Reload | reload |
| ReloadOrRestart | start |
| ReloadOrRestartUnit | start |
| ReloadOrTryRestart | start |
| ReloadOrTryRestartUnit | start |
| ReloadUnit | reload |
| ResetFailed | stop |
| ResetFailedUnit | stop |
| 再起動 | start |
| RestartUnit | start |
| 起動 | start |
| StartUnit | start |
| StartUnitReplace | start |
| 停止 | stop |
| StopUnit | stop |
| TryRestart | start |
| TryRestartUnit | start |
| UnmaskUnitFiles | enable |
systemd 汎用システムコール | SELinux アクセスチェック |
|---|---|
| ClearJobs | reboot |
| FlushDevices | halt |
| Get | status |
| GetAll | status |
| GetJob | status |
| GetSeat | status |
| GetSession | status |
| GetSessionByPID | status |
| GetUser | status |
| Halt | halt |
| Introspect | status |
| KExec | reboot |
| KillSession | halt |
| KillUser | halt |
| ListJobs | status |
| ListSeats | status |
| ListSessions | status |
| ListUsers | status |
| LockSession | halt |
| PowerOff | halt |
| 再起動 | reboot |
| SetUserLinger | halt |
| TerminateSeat | halt |
| TerminateSession | halt |
| TerminateUser | halt |
例10.1 システムサービスに関する SELinux ポリシー
sesearch ユーティリティーを使用すると、システムサービスのポリシールールをリスト表示できます。たとえば、sesearch -A -s NetworkManager_t -c service コマンドを呼び出すと以下が返されます。
10.2. SELinux と journald リンクのコピーリンクがクリップボードにコピーされました!
systemd では、journald デーモン (systemd-journal とも呼ばれます) は、ログデータを収集して保存するシステムサービスである syslog ユーティリティーの代替手段です。これは、カーネル、libc syslog() 関数を使用するユーザープロセス、システムサービスの標準出力およびエラー出力、またはネイティブの API を使用して受信したログ情報に基づいて、構造化されたジャーナルおよびインデックス化されたジャーナルを作成し、維持します。暗黙的に、各ログメッセージのメタデータフィールドを安全な方法で収集します。
systemd-journal サービスは、セキュリティーを向上させるために、SELinux で使用できます。SELinux は、設計された機能を実行することのみを許可することで、プロセスを制御します。ポリシー作成者のセキュリティー目標によっては、これよりも低くなることもあります。たとえば、SELinux は、侵害された ntpd プロセスが Network Time を処理する以外の操作を行わないようにします。ただし、ntpd プロセスは、syslog メッセージを送信するため、SELinux は、侵害されたプロセスが引き続きメッセージを送信できるようにします。侵害されたntpdは、syslog メッセージを他のデーモンに合わせてフォーマットし、管理者を誤認させる可能性があります。さらに悪い場合は、syslog ファイルを読み込んでシステム全体を危険にさらすユーティリティーです。
systemd-journal デーモンは、すべてのログメッセージを検証し、とりわけ SELinux ラベルを追加します。その後、ログメッセージで不整合を検出し、発生前にこのタイプの攻撃を防ぐことができます。journalctl ユーティリティーを使用すると、systemd ジャーナルのログをクエリーできます。コマンドライン引数が指定されていない場合は、このユーティリティーを実行すると、最も古いエントリーから始まり、ジャーナルの全コンテンツがリスト表示されます。システムコンポーネントのログを含む、システムで生成されたすべてのログを表示するには、root で journalctl を実行します。root 以外のユーザーで実行した場合は、現在ログインしているユーザーに関連するログのみが出力されます。
例10.2 journalctl でログのリスト表示
journalctl を使用すると、特定の SELinux ラベルに関連するログをすべてリスト表示できます。たとえば、次のコマンドは、system_u:system_r:policykit_t:s0 ラベルに記録されているログをすべてリスト表示します。
journalctl の詳細は、journalctl(1) man ページを参照してください。
第11章 トラブルシューティング リンクのコピーリンクがクリップボードにコピーされました!
aud2allow でカスタムポリシーモジュールを作成する方法について説明します。
11.1. アクセスが拒否された場合の動作 リンクのコピーリンクがクリップボードにコピーされました!
/var/log/audit/audit.log/var/log/messages/var/log/audit/audit.log./var/log/messages にも送信される、読み取りが容易な拒否メッセージsetroubleshootd デーモンおよび audd デーモンを実行している場合は、SELinux がアクセスを拒否したときに警告が表示されます。
Forbidden You don't have permission to access file name on this server
Forbidden
You don't have permission to access file name on this server
/var/log/messages および /var/log/audit/audit.log で、それぞれ "SELinux is preventing" エラーおよび "denied" エラーを確認してください。これは、root ユーザーになり、以下のコマンドを実行して実行できます。
grep "SELinux is preventing" /var/log/messages
~]# grep "SELinux is preventing" /var/log/messages
grep "denied" /var/log/audit/audit.log
~]# grep "denied" /var/log/audit/audit.log
11.2. 問題の上位 3 つの原因 リンクのコピーリンクがクリップボードにコピーされました!
11.2.1. ラベル付けの問題 リンクのコピーリンクがクリップボードにコピーされました!
/var/www/html/ を使用する代わりに、/srv/myweb/ を使用します。Red Hat Enterprise Linux では、/srv ディレクトリーには var_t タイプのラベルが付けられます。/srv で作成されるファイルおよびディレクトリーは、このタイプを継承します。また、/myserver などの最上位のディレクトリーに新規作成したオブジェクトには、default_t タイプのラベルが付けられます。SELinux は、Apache HTTP Server (httpd)がこの両方のタイプにアクセスできないようにします。アクセスを許可するには、SELinux では、/srv/myweb/ のファイルが httpd からアクセス可能であることを認識する必要があります。
semanage fcontext -a -t httpd_sys_content_t "/srv/myweb(/.*)?"
~]# semanage fcontext -a -t httpd_sys_content_t "/srv/myweb(/.*)?"
/srv/myweb/ ディレクトリー (およびその下のすべてのファイルおよびディレクトリー) のコンテキストを SELinux ファイルコンテキストの設定に追加します。[8].semanage ユーティリティーはコンテキストを変更しません。root で、restorecon ユーティリティーを実行して変更を適用します。
restorecon -R -v /srv/myweb
~]# restorecon -R -v /srv/myweb
11.2.1.1. 正しいコンテキストとは ? リンクのコピーリンクがクリップボードにコピーされました!
matchpathcon ユーティリティーは、ファイルパスのコンテキストを確認し、そのパスのデフォルトラベルと比較します。以下の例は、ラベルが間違っているファイルが含まれるディレクトリーで matchpathcon を使用した例を示しています。
matchpathcon -V /var/www/html/* /var/www/html/index.html has context unconfined_u:object_r:user_home_t:s0, should be system_u:object_r:httpd_sys_content_t:s0 /var/www/html/page1.html has context unconfined_u:object_r:user_home_t:s0, should be system_u:object_r:httpd_sys_content_t:s0
~]$ matchpathcon -V /var/www/html/*
/var/www/html/index.html has context unconfined_u:object_r:user_home_t:s0, should be system_u:object_r:httpd_sys_content_t:s0
/var/www/html/page1.html has context unconfined_u:object_r:user_home_t:s0, should be system_u:object_r:httpd_sys_content_t:s0
index.html ファイルおよび page1.html ファイルに、user_home_t タイプのラベルが付けられています。このタイプは、ユーザーのホームディレクトリーのファイルに使用されます。mv コマンドを使用してファイルをホームディレクトリーから移動すると、ファイルに user_home_t タイプのラベルが付けられることがあります。このタイプは、ホームディレクトリーの外に存在してはなりません。このようなファイルを正しいタイプに復元するには、restorecon ユーティリティーを使用します。
restorecon -v /var/www/html/index.html restorecon reset /var/www/html/index.html context unconfined_u:object_r:user_home_t:s0->system_u:object_r:httpd_sys_content_t:s0
~]# restorecon -v /var/www/html/index.html
restorecon reset /var/www/html/index.html context unconfined_u:object_r:user_home_t:s0->system_u:object_r:httpd_sys_content_t:s0
-R オプションを使用します。
restorecon -R -v /var/www/html/ restorecon reset /var/www/html/page1.html context unconfined_u:object_r:samba_share_t:s0->system_u:object_r:httpd_sys_content_t:s0 restorecon reset /var/www/html/index.html context unconfined_u:object_r:samba_share_t:s0->system_u:object_r:httpd_sys_content_t:s0
~]# restorecon -R -v /var/www/html/
restorecon reset /var/www/html/page1.html context unconfined_u:object_r:samba_share_t:s0->system_u:object_r:httpd_sys_content_t:s0
restorecon reset /var/www/html/index.html context unconfined_u:object_r:samba_share_t:s0->system_u:object_r:httpd_sys_content_t:s0
matchpathcon の詳細な例は、「デフォルトの SELinux コンテキストの確認」 を参照してください。
11.2.2. 制限のあるサービスの実行方法 リンクのコピーリンクがクリップボードにコピーされました!
httpd_can_network_connect_db のブール値を有効にします。
setsebool -P httpd_can_network_connect_db on
~]# setsebool -P httpd_can_network_connect_db on
getsebool ユーティリティーおよび grep ユーティリティーを使用して、アクセスを許可するブール値が利用できるかどうかを確認します。たとえば、getsebool -a | grep ftp コマンドを使用して FTP 関連のブール値を検索します。
ポート番号
http 関連のポートを一覧表示します。
http_port_t ポートタイプは、Apache HTTP サーバーがリッスンできるポートを定義します。この場合は、TCP ポート 80、443、488、8008、8009、および 8443 です。httpd がポート 9876 (Listen 976)でリッスンするように管理者が httpd.conf を設定しても、これを反映するようにポリシーが更新されていない場合、以下のコマンドは失敗します。
systemctl start httpd.service Job for httpd.service failed. See 'systemctl status httpd.service' and 'journalctl -xn' for details.
~]# systemctl start httpd.service
Job for httpd.service failed. See 'systemctl status httpd.service' and 'journalctl -xn' for details.
/var/log/audit/audit.log に記録されます。
type=AVC msg=audit(1225948455.061:294): avc: denied { name_bind } for pid=4997 comm="httpd" src=9876 scontext=unconfined_u:system_r:httpd_t:s0 tcontext=system_u:object_r:port_t:s0 tclass=tcp_socket
type=AVC msg=audit(1225948455.061:294): avc: denied { name_bind } for pid=4997 comm="httpd" src=9876 scontext=unconfined_u:system_r:httpd_t:s0 tcontext=system_u:object_r:port_t:s0 tclass=tcp_socket
semanage port -a -t http_port_t -p tcp 9876
~]# semanage port -a -t http_port_t -p tcp 9876
-a オプションは新規レコードを追加します。-t オプションはタイプを定義し、-p オプションはプロトコルを定義します。最後の引数は、追加するポート番号です。
11.2.3. ルールの進化とアプリケーションの破損 リンクのコピーリンクがクリップボードにコピーされました!
audit2allow ユーティリティーを使用して、アクセスを許可するカスタムポリシーモジュールを作成します。audit2allow の使用方法は、「アクセスの許可: audit2allow」 を参照してください。
/etc/selinux/targeted/contexts/files/ のファイルは、ファイルおよびディレクトリーのコンテキストを定義します。このディレクトリーのファイルは、restorecon ユーティリティーおよび setfiles ユーティリティーにより読み込まれ、ファイルおよびディレクトリーをデフォルトコンテキストに復元します。
/etc/selinux/targeted/modules/active/ports.local ファイルーにエントリーを追加します。デフォルトでは、このファイルは root のみが表示できることに注意してください。
11.3. 問題の修正 リンクのコピーリンクがクリップボードにコピーされました!
aud2allow を使用したカスタムポリシーモジュールの作成について説明します。
11.3.1. Linux の権限 リンクのコピーリンクがクリップボードにコピーされました!
ls -l /var/www/html/index.html -rw-r----- 1 root root 0 2009-05-07 11:06 index.html
~]$ ls -l /var/www/html/index.html
-rw-r----- 1 root root 0 2009-05-07 11:06 index.html
index.html は root ユーザーおよびグループが所有します。root ユーザーには読み取り権限と書き込み権限 (-rw) があり、root グループのメンバーには読み取り権限 (-r-) があります。他の人にはアクセス権がありません (---)。デフォルトでは、このような権限では、httpd がこのファイルを読み込むことができません。この問題を解決するには、chown コマンドを使用して所有者とグループを変更します。このコマンドは、root で実行する必要があります。
chown apache:apache /var/www/html/index.html
~]# chown apache:apache /var/www/html/index.html
httpd は Linux Apache ユーザーとして実行) であることを前提としています。別のユーザーで httpd を実行している場合は、apache:apache をそのユーザーに置き換えます。
11.3.2. サイレント拒否の考えられる原因 リンクのコピーリンクがクリップボードにコピーされました!
semodule -DB
~]# semodule -DB
-D オプションは、dontaudit ルールを無効にします。-B オプションはポリシーを再構築します。semodule -DB を実行したら、権限の問題が発生していたアプリケーションを実行してみて、アプリケーションに関連する SELinux の拒否がログに記録されているかどうかを確認します。拒否を許可するかどうかを決定する際には注意してください。拒否の中には、dontaudit ルールで無視および処理されるものもあります。疑わしい場合、またはガイドが必要な場合は、fedora-selinux-list などの SELinux のリストにある他の SELinux ユーザーおよび開発者に連絡してください。
dontauditルールを有効にするには、root で次のコマンドを実行します。
semodule -B
~]# semodule -B
-s domain オプションと grep コマンドを使用して、検索を絞り込みます。以下に例を示します。
sesearch --dontaudit -s smbd_t | grep squid dontaudit smbd_t squid_port_t : tcp_socket name_bind ; dontaudit smbd_t squid_port_t : udp_socket name_bind ;
~]$ sesearch --dontaudit -s smbd_t | grep squid
dontaudit smbd_t squid_port_t : tcp_socket name_bind ;
dontaudit smbd_t squid_port_t : udp_socket name_bind ;
11.3.3. サービスの man ページ リンクのコピーリンクがクリップボードにコピーされました!
httpdなど) などの貴重な情報が記載されています。この情報は、標準のマニュアルページ、または sepolicy manpage ユーティリティーを使用してすべてのサービスドメインの SELinux ポリシーから自動的に生成できるマニュアルページにある場合があります。このような man ページは、service-name_selinux 形式で命名されます。このような man ページは、selinux-policy-doc パッケージに同梱されています。
- Samba - たとえば、samba_selinux(8) の man ページでは、
samba_enable_home_dirsブール値を有効にすると、Samba がユーザーのホームディレクトリーを共有できるようになることを説明しています。 - NFS - nfsd_selinux(8) の man ページでは、nfsd プロセスをできるだけ安全な方法で設定できるように、SELinux の nfsd ポリシーを説明しています。
sepolicy manpage の詳細は 「手動ページの生成: sepolicy manpage」 を参照してください。
11.3.4. Permissive ドメイン リンクのコピーリンクがクリップボードにコピーされました!
- これを使用すると、1 つのプロセス (ドメイン) を Permissive にして、システム全体をリスクにさらさずに問題のトラブルシューティングを行うことができます。
- これにより、管理者は新しいアプリケーションのポリシーを作成できます。以前は、最小限のポリシーを作成してから、マシン全体を Permissive モードにしてアプリケーションを実行できるようにし、SELinux の拒否ログが記録されるようにすることが推奨されていました。次に、ポリシーを作成するために
aud2allowを使用することができます。これにより、システム全体が危険にさらされていました。Permissive ドメインでは、システム全体を危険にさらさずに、新しいポリシーのドメインのみが Permissive とマークされます。
11.3.4.1. ドメインを Permissive にする リンクのコピーリンクがクリップボードにコピーされました!
httpd_t ドメイン (Apache HTTP サーバーを実行しているドメイン) を Permissive (許容) にします。
semanage permissive -a httpd_t
~]# semanage permissive -a httpd_t
semodule -l | grep permissive permissive_httpd_t (null) permissivedomains (null)
~]# semodule -l | grep permissive
permissive_httpd_t (null)
permissivedomains (null)
semanage permissive -d httpd_t
~]# semanage permissive -d httpd_t
11.3.4.2. Permissive ドメインの無効化 リンクのコピーリンクがクリップボードにコピーされました!
permissivedomains.pp には、システム上にある Permissive ドメイン宣言がすべて含まれています。すべての Permissive ドメインを無効にするには、root で次のコマンドを実行します。
semodule -d permissivedomains
~]# semodule -d permissivedomains
semodule --list-modules=full
~]# semodule --list-modules=full
11.3.4.3. Permissive ドメインの拒否 リンクのコピーリンクがクリップボードにコピーされました!
SYSCALL メッセージは、Permissive ドメインでは異なります。以下は、Apache HTTP サーバーによる AVC の拒否 (および関連するシステムコール) の例になります。
type=AVC msg=audit(1226882736.442:86): avc: denied { getattr } for pid=2427 comm="httpd" path="/var/www/html/file1" dev=dm-0 ino=284133 scontext=unconfined_u:system_r:httpd_t:s0 tcontext=unconfined_u:object_r:samba_share_t:s0 tclass=file
type=SYSCALL msg=audit(1226882736.442:86): arch=40000003 syscall=196 success=no exit=-13 a0=b9a1e198 a1=bfc2921c a2=54dff4 a3=2008171 items=0 ppid=2425 pid=2427 auid=502 uid=48 gid=48 euid=48 suid=48 fsuid=48 egid=48 sgid=48 fsgid=48 tty=(none) ses=4 comm="httpd" exe="/usr/sbin/httpd" subj=unconfined_u:system_r:httpd_t:s0 key=(null)
type=AVC msg=audit(1226882736.442:86): avc: denied { getattr } for pid=2427 comm="httpd" path="/var/www/html/file1" dev=dm-0 ino=284133 scontext=unconfined_u:system_r:httpd_t:s0 tcontext=unconfined_u:object_r:samba_share_t:s0 tclass=file
type=SYSCALL msg=audit(1226882736.442:86): arch=40000003 syscall=196 success=no exit=-13 a0=b9a1e198 a1=bfc2921c a2=54dff4 a3=2008171 items=0 ppid=2425 pid=2427 auid=502 uid=48 gid=48 euid=48 suid=48 fsuid=48 egid=48 sgid=48 fsgid=48 tty=(none) ses=4 comm="httpd" exe="/usr/sbin/httpd" subj=unconfined_u:system_r:httpd_t:s0 key=(null)
httpd_t ドメインは Permissive ではありません。また、このようなアクションは拒否され、SYSCALL メッセージには success=no が含まれます。以下は、同じ状況での AVC による拒否の例になります。ただし、semanage permissive -a httpd_t コマンドを実行して、httpd_t ドメインを Permissive にします。
type=AVC msg=audit(1226882925.714:136): avc: denied { read } for pid=2512 comm="httpd" name="file1" dev=dm-0 ino=284133 scontext=unconfined_u:system_r:httpd_t:s0 tcontext=unconfined_u:object_r:samba_share_t:s0 tclass=file
type=SYSCALL msg=audit(1226882925.714:136): arch=40000003 syscall=5 success=yes exit=11 a0=b962a1e8 a1=8000 a2=0 a3=8000 items=0 ppid=2511 pid=2512 auid=502 uid=48 gid=48 euid=48 suid=48 fsuid=48 egid=48 sgid=48 fsgid=48 tty=(none) ses=4 comm="httpd" exe="/usr/sbin/httpd" subj=unconfined_u:system_r:httpd_t:s0 key=(null)
type=AVC msg=audit(1226882925.714:136): avc: denied { read } for pid=2512 comm="httpd" name="file1" dev=dm-0 ino=284133 scontext=unconfined_u:system_r:httpd_t:s0 tcontext=unconfined_u:object_r:samba_share_t:s0 tclass=file
type=SYSCALL msg=audit(1226882925.714:136): arch=40000003 syscall=5 success=yes exit=11 a0=b962a1e8 a1=8000 a2=0 a3=8000 items=0 ppid=2511 pid=2512 auid=502 uid=48 gid=48 euid=48 suid=48 fsuid=48 egid=48 sgid=48 fsgid=48 tty=(none) ses=4 comm="httpd" exe="/usr/sbin/httpd" subj=unconfined_u:system_r:httpd_t:s0 key=(null)
SYSCALL メッセージの success=yes に示されるように、アクセスは拒否されませんでした。
11.3.5. 拒否の検索と表示 リンクのコピーリンクがクリップボードにコピーされました!
auditd。rsyslogd、および setroubleshootd デーモンが実行していることを前提としています。これらのデーモンの起動方法は、「どのログファイルが使用されるか」 を参照してください。ausearch、aureport、および sealert などの SELinux AVC メッセージの検索および表示には、多数のユーティリティーを使用できます。
ausearch
audit デーモンログを照会できる ausearch ユーティリティーを提供します。[10] ausearch ユーティリティーは、/var/log/audit/audit.log にアクセスするため、root ユーザーとして実行する必要があります。
-c comm-name オプションを使用します。comm-name は実行ファイルの名前 (Apache HTTP サーバーの場合は httpd、Samba の場合は smbd など) です。
ausearch -m avc -c httpd
~]# ausearch -m avc -c httpd
ausearch -m avc -c smbd
~]# ausearch -m avc -c smbd
--interpret (-i) オプションを使用するか、スクリプト処理で --raw (-r) オプションを使用することが推奨されます。ausearch オプションの詳細は、ausearch(8) の man ページを参照してください。
aureport
aureport ユーティリティーを提供します。これにより、監査システムログのサマリーレポートを生成します。[11] aureport ユーティリティーは、/var/log/audit/audit.log にアクセスするため、root ユーザーとして実行する必要があります。SELinux の拒否メッセージと、その発生頻度をリスト表示するには、aureport -a を実行します。以下は、2 つの拒否を含む出力例になります。
sealert
sealert ユーティリティーを提供します。これは、setroubleshoot-server により変換された拒否メッセージを読み取ります。[12] 拒否は、/var/log/messages にあるように ID が割り当てられています。以下は、messages からの拒否例になります。
setroubleshoot: SELinux is preventing /usr/sbin/httpd from name_bind access on the tcp_socket. For complete SELinux messages. run sealert -l 8c123656-5dda-4e5d-8791-9e3bd03786b7
setroubleshoot: SELinux is preventing /usr/sbin/httpd from name_bind access on the tcp_socket. For complete SELinux messages. run sealert -l 8c123656-5dda-4e5d-8791-9e3bd03786b7
8c123656-5dda-4e5d-8791-9e3bd03786b7 です。-l オプションは、識別子を引き数として取ります。sealert -l 8c123656-5dda-4e5d-8791-9e3bd03786b7 コマンドを実行すると、SELinux がアクセスを拒否した理由を詳細に分析し、アクセスを許可する解決策を示すことができます。
setroubleshootd デーモン、dbus デーモン、および auditd デーモンが実行されている場合は、SELinux がアクセスを拒否したときに警告が表示されます。
Show をクリックすると、sealert 画面が表示されます。これにより、トラブルシューティングが可能になります。
11.3.6. Raw 監査メッセージ リンクのコピーリンクがクリップボードにコピーされました!
/var/log/audit/audit.log にログ記録されます。以下は、Apache HTTP サーバー (httpd_t ドメインで実行している) が /var/www/html/file1 ファイル (samba_share_t タイプのラベルが付いている) にアクセスしようとしたときに発生した AVC 拒否メッセージ (および関連するシステムコール) の例です。
type=AVC msg=audit(1226874073.147:96): avc: denied { getattr } for pid=2465 comm="httpd" path="/var/www/html/file1" dev=dm-0 ino=284133 scontext=unconfined_u:system_r:httpd_t:s0 tcontext=unconfined_u:object_r:samba_share_t:s0 tclass=file
type=SYSCALL msg=audit(1226874073.147:96): arch=40000003 syscall=196 success=no exit=-13 a0=b98df198 a1=bfec85dc a2=54dff4 a3=2008171 items=0 ppid=2463 pid=2465 auid=502 uid=48 gid=48 euid=48 suid=48 fsuid=48 egid=48 sgid=48 fsgid=48 tty=(none) ses=6 comm="httpd" exe="/usr/sbin/httpd" subj=unconfined_u:system_r:httpd_t:s0 key=(null)
type=AVC msg=audit(1226874073.147:96): avc: denied { getattr } for pid=2465 comm="httpd" path="/var/www/html/file1" dev=dm-0 ino=284133 scontext=unconfined_u:system_r:httpd_t:s0 tcontext=unconfined_u:object_r:samba_share_t:s0 tclass=file
type=SYSCALL msg=audit(1226874073.147:96): arch=40000003 syscall=196 success=no exit=-13 a0=b98df198 a1=bfec85dc a2=54dff4 a3=2008171 items=0 ppid=2463 pid=2465 auid=502 uid=48 gid=48 euid=48 suid=48 fsuid=48 egid=48 sgid=48 fsgid=48 tty=(none) ses=6 comm="httpd" exe="/usr/sbin/httpd" subj=unconfined_u:system_r:httpd_t:s0 key=(null)
- { getattr }
- 中括弧内の項目は、拒否された権限を示しています。
getattrエントリーは、ターゲットファイルのステータス情報をソースプロセスが読み取ろうとしていることを示します。これは、ファイルを読み取る前に発生します。アクセスしているファイルのラベルが間違っているため、このアクションは拒否されています。一般的に表示されるパーミッションには、getattr、read、writeなどが含まれます。 - comm="httpd"
- プロセスを開始した実行ファイル。実行可能ファイルのフルパスは、システムコール (
SYSCALL) メッセージのexe=セクションに記載されています。この例ではexe="/usr/sbin/httpd"になります。 - path="/var/www/html/file1"
- プロセスがアクセスを試みたオブジェクト (ターゲット) へのパス。
- scontext="unconfined_u:system_r:httpd_t:s0"
- 拒否されたアクションを実行しようとしたプロセスの SELinux コンテキスト。この場合、Apache HTTP Server は
httpd_tタイプで実行している SELinux コンテキストです。 - tcontext="unconfined_u:object_r:samba_share_t:s0"
- プロセスがアクセスを試みたオブジェクトの SELinux コンテキスト (ターゲット)。この例では、これが
file1の SELinux コンテキストです。samba_share_tタイプは、httpd_tドメインで実行しているプロセスからアクセスできません。特定の状況では、tcontextは、scontextと一致します (例: プロセスが、ユーザー ID など、実行中のプロセスの特性を変更するシステムサービスを実行しようとする場合)。また、プロセスが通常の制限よりも多くのリソース (メモリーなど) を使用しようとすると、tcontextがscontextに一致する可能性があります。その結果、そのプロセスがこれらの制限を破ることが許可されているかどうかを確認するためのセキュリティーチェックが行われます。
SYSCALL) メッセージでは、以下の 2 つの項目が重要になります。
success=no: 拒否(AVC)が強制されたかどうかを示します。success=noはシステムコールが成功しなかった(SELinux がアクセスを拒否した)ことを示します。success=yesはシステムコールが成功したことを示します。これは、unconfined_service_tやkernel_tなど、Permissive ドメインまたは制限のないドメインで見ることができます。exe="/usr/sbin/httpd": プロセスを開始した実行ファイルのフルパスです。この例ではexe="/usr/sbin/httpd"です。
scontext) をターゲットコンテキスト (tcontext) と比較します。プロセス (scontext) がこのようなオブジェクト (tcontext) にアクセスする必要がありますか ?たとえば、Apache HTTP Server(httpd_t) は、httpd_sys_content_t、public_content_t など、httpd_selinux(8) man ページで指定されたタイプにのみアクセスする必要があります (特に設定されていない限り)。
11.3.7. sealert メッセージ リンクのコピーリンクがクリップボードにコピーされました!
/var/log/messages にあるように ID が割り当てられています。以下は、Apache HTTP サーバー (httpd_t ドメインで実行中) が /var/www/html/file1 ファイル (samba_share_t タイプのラベルが付いたファイル) にアクセスしようとしたときに発生した AVC 拒否 (messages に記録) の例です。
hostname setroubleshoot: SELinux is preventing httpd (httpd_t) "getattr" to /var/www/html/file1 (samba_share_t). For complete SELinux messages. run sealert -l 32eee32b-21ca-4846-a22f-0ba050206786
hostname setroubleshoot: SELinux is preventing httpd (httpd_t) "getattr" to /var/www/html/file1 (samba_share_t). For complete SELinux messages. run sealert -l 32eee32b-21ca-4846-a22f-0ba050206786
- 概要
- 拒否されたアクションの概要これは、
/var/log/messagesの拒否と同じです。この例では、httpdプロセスが、samba_share_tタイプのラベルが付いたファイル (file1) へのアクセスを拒否されています。 - 詳細な説明
- より詳細な説明この例では、
file1にはsamba_share_tタイプのラベルが付けられています。このタイプは、Samba を使用してエクスポートするファイルおよびディレクトリーに使用されます。この説明では、このようなアクセスが必要な場合は、Apache HTTP Server および Samba がアクセス可能なタイプにタイプを変更することが推奨されています。 - アクセスの許可
- アクセスを許可する方法を説明します。ファイルの再ラベル付け、ブール値の有効化、またはローカルポリシーモジュールの作成を行います。この場合、Apache HTTP Server と Samba の両方がアクセスできるタイプでファイルにラベルを付けることが提案されます。
- Fix コマンド
- アクセスを許可し、拒否を解決するための推奨されるコマンド。この例では、
file1タイプをpublic_content_tに変更するためのコマンドを提供します。これは Apache HTTP Server および Samba からアクセスできます。 - 追加情報
- バグ報告に役に立つ情報 (ポリシーパッケージの名前やバージョン (
selinux-policy-3.13.1-166.el7.noarch) ですが、拒否が発生した理由の解決には役立たない場合があります。 - Raw 監査メッセージ
- 拒否に関連付けられた
/var/log/audit/audit.logからの Raw 監査メッセージ。AVC 拒否に関する詳細は、「Raw 監査メッセージ」 を参照してください。
11.3.8. アクセスの許可: audit2allow リンクのコピーリンクがクリップボードにコピーされました!
aud2allow ユーティリティーの使用を実証する目的でのみ使用されます。
aud2allow ユーティリティーは、拒否された操作のログから情報を収集し、SELinux ポリシー許可ルールを生成します。[13] 「sealert メッセージ」に従って拒否メッセージを分析し、ラベル変更やブール値によるアクセスが許可されていない場合は、aud2allow を使用してローカルポリシーモジュールを作成します。SELinux がアクセスを拒否した場合に、aud2allow を実行すると、拒否したアクセスを許可する Type Enforcement ルールが生成されます。
audit2allow を使用して、SELinux 拒否を確認する際に、最初のオプションとしてローカルポリシーモジュールを生成することはできません。トラブルシューティングは、ラベル付けの問題があるかどうかを最初に確認します。2 番目に多いのが、SELinux が、プロセスの設定変更を認識していない場合です。詳細は、Four Key Causes of SELinux Errors のホワイトペーパーを参照してください。
aud2allow を使用してポリシーモジュールを作成する例を示しています。
- 拒否メッセージと関連するシステムコールが
/var/log/audit/audit.logファイルにログ記録されます。type=AVC msg=audit(1226270358.848:238): avc: denied { write } for pid=13349 comm="certwatch" name="cache" dev=dm-0 ino=218171 scontext=system_u:system_r:certwatch_t:s0 tcontext=system_u:object_r:var_t:s0 tclass=dir type=SYSCALL msg=audit(1226270358.848:238): arch=40000003 syscall=39 success=no exit=-13 a0=39a2bf a1=3ff a2=3a0354 a3=94703c8 items=0 ppid=13344 pid=13349 auid=4294967295 uid=0 gid=0 euid=0 suid=0 fsuid=0 egid=0 sgid=0 fsgid=0 tty=(none) ses=4294967295 comm="certwatch" exe="/usr/bin/certwatch" subj=system_u:system_r:certwatch_t:s0 key=(null)type=AVC msg=audit(1226270358.848:238): avc: denied { write } for pid=13349 comm="certwatch" name="cache" dev=dm-0 ino=218171 scontext=system_u:system_r:certwatch_t:s0 tcontext=system_u:object_r:var_t:s0 tclass=dir type=SYSCALL msg=audit(1226270358.848:238): arch=40000003 syscall=39 success=no exit=-13 a0=39a2bf a1=3ff a2=3a0354 a3=94703c8 items=0 ppid=13344 pid=13349 auid=4294967295 uid=0 gid=0 euid=0 suid=0 fsuid=0 egid=0 sgid=0 fsgid=0 tty=(none) ses=4294967295 comm="certwatch" exe="/usr/bin/certwatch" subj=system_u:system_r:certwatch_t:s0 key=(null)Copy to Clipboard Copied! Toggle word wrap Toggle overflow この例では、certwatch はvar_tタイプのラベルが付けられたディレクトリーへの書き込みアクセスを拒否します。「sealert メッセージ」に従って拒否メッセージを分析します。ラベル変更やブール値によるアクセスが許可されていない場合は、aud2allowを使用してローカルポリシーモジュールを作成します。 - 以下のコマンドを入力して、アクセスが拒否された理由を人間が判読できるように説明します。
aud2allowユーティリティーは/var/log/audit/audit.logを読み取ります。そのような場合は、root ユーザーとして実行する必要があります。Copy to Clipboard Copied! Toggle word wrap Toggle overflow -aコマンドラインオプションを指定すると、すべての監査ログが読み込まれます。-wオプションは、人間が判読できる記述を生成します。このように、Type Enforcement ルールがないため、アクセスが拒否されました。 - 次のコマンドを入力して、拒否されたアクセスを許可する Type Enforcement ルールを表示します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 重要欠落している Type Enforcement ルールは、通常 SELinux ポリシーのバグにより発生するため、Red Hat Bugzilla で報告する必要があります。Red Hat Enterprise Linux の場合、Red Hat Enterprise Linuxの製品に対してバグを作成し、selinux-policyコンポーネントを選択します。このバグレポートに、audit2allow -w -a コマンドおよび audit2allow -a コマンドの出力を追加します。 - audit2allow -a が表示するルールを使用するには、root で以下のコマンドを実行して、カスタムモジュールを作成します。
-Mオプションは、-Mで指定された名前で、現在の作業ディレクトリーに、Type Enforcement ファイル (.te) を作成します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow - また、
aud2allowは、Type Enforcement ルールをポリシーパッケージ (.pp) にコンパイルします。ls mycertwatch.pp mycertwatch.te
~]# ls mycertwatch.pp mycertwatch.teCopy to Clipboard Copied! Toggle word wrap Toggle overflow モジュールをインストールするには、root で以下のコマンドを実行します。semodule -i mycertwatch.pp
~]# semodule -i mycertwatch.ppCopy to Clipboard Copied! Toggle word wrap Toggle overflow 重要aud2allowで作成したモジュールは、必要以上のアクセスを許可する場合があります。aud2allowで作成したポリシーは、アップストリームの SELinux リストに投稿して確認することが推奨されます。 ポリシーにバグがあると思われる場合は、Red Hat Bugzilla でバグを作成します。
grep ユーティリティーを使用して、aud2allow の入力内容を絞り込みます。以下の例は、grep を使用して、aud2allow 経由で certwatch に関連する拒否メッセージのみを送信することを示しています。
第12章 追加情報 リンクのコピーリンクがクリップボードにコピーされました!
12.1. コントリビューター リンクのコピーリンクがクリップボードにコピーされました!
- Dominick Grift – テクニカルエディター
- Murray McAllister – Red Hat 製品セキュリティー
- James Morris – テクニカルエディター
- エリック・パリス - テクニカルエディター
- Scott Radvan – Red Hat Customer Content Services
- Daniel Walsh – Red Hat セキュリティーエンジニアリング
12.2. その他リソース リンクのコピーリンクがクリップボードにコピーされました!
Fedora
- トラブルシューティング: http://fedoraproject.org/wiki/SELinux/Troubleshooting.
- Fedora SELinux FAQ: https://fedoraproject.org/wiki/SELinux_FAQ.
アメリカ国家安全保障局 (NSA: National Security Agency)
Tresys Technology
SELinux GitHub リポジトリー
- SELinux プロジェクト: https://github.com/SELinuxProject
- Tresys Technology: https://github.com/TresysTechnology/
SELinux Project Wiki
- ドキュメント、メーリングリスト、Web サイト、ツールへのリンクなどのユーザーリソース: http://selinuxproject.org/page/User_Resources.
The SELinux Notebook - The Foundations - 4th Edition
DigitalOcean: An Introduction to SELinux on CentOS 7
IRC
- #selinux
- #fedora-selinux
パート II. 制限のあるサービスの管理 リンクのコピーリンクがクリップボードにコピーされました!
第13章 Apache HTTP サーバー リンクのコピーリンクがクリップボードにコピーされました!
rpm -q httpd package httpd is not installed
~]$ rpm -q httpd
package httpd is not installed
yum ユーティリティーを使用してインストールします。
yum install httpd
~]# yum install httpd
13.1. Apache HTTP サーバーおよび SELinux リンクのコピーリンクがクリップボードにコピーされました!
httpd) はデフォルトで制限ありで実行されます。制限のあるプロセスは、独自のドメインで実行され、他の制限のあるプロセスから分離されます。制限のあるプロセスが攻撃者によって侵害された場合、SELinux ポリシーの設定に応じて、攻撃者のリソースへのアクセスと、攻撃者が行う可能性のある損害は制限されます。以下の例は、独自のドメインで実行している httpd プロセスを示しています。この例では、httpd、setroubleshoot、setroubleshoot-server、および policycoreutils-python パッケージがインストールされていることを前提としています。
- getenforce コマンドを実行して、SELinux が Enforcing モードで実行されていることを確認します。
getenforce Enforcing
~]$ getenforce EnforcingCopy to Clipboard Copied! Toggle word wrap Toggle overflow SELinux が Enforcing モードで実行されていると、このコマンドはEnforcingを返します。 - root で以下のコマンドを入力し、
httpdを起動します。systemctl start httpd.service
~]# systemctl start httpd.serviceCopy to Clipboard Copied! Toggle word wrap Toggle overflow サービスが実行中であることを確認します。出力には以下の情報が含まれている必要があります (タイムスタンプのみは異なります)。systemctl status httpd.service httpd.service - The Apache HTTP Server Loaded: loaded (/usr/lib/systemd/system/httpd.service; disabled) Active: active (running) since Mon 2013-08-05 14:00:55 CEST; 8s ago
~]# systemctl status httpd.service httpd.service - The Apache HTTP Server Loaded: loaded (/usr/lib/systemd/system/httpd.service; disabled) Active: active (running) since Mon 2013-08-05 14:00:55 CEST; 8s agoCopy to Clipboard Copied! Toggle word wrap Toggle overflow httpdプロセスを表示するには、以下のコマンドを実行します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow httpdプロセスに関連付けられている SELinux コンテキストはsystem_u:system_r:httpd_t:s0です。コンテキストの 2 番目の部分httpd_tはタイプです。タイプは、プロセスのドメインとファイルのタイプを定義します。この場合、httpdプロセスはhttpd_tドメインで実行されています。
httpd_tなど) で実行されるプロセスが、ファイル、その他のプロセス、およびシステム一般とどのように対話するかを定義します。httpd によるアクセスを可能にするには、ファイルが正しくラベル付けされている必要があります。たとえば、httpd は httpd_sys_content_t タイプのラベルが付いたファイルを読み取ることができますが、Linux(DAC) パーミッションで書き込みが許可されている場合でも書き込みはできません。スクリプトのネットワークアクセスの許可、NFS および CIFS ボリュームへの httpd アクセスの許可、httpd による Common Gateway Interface (CGI) スクリプトの実行の許可など、特定の動作を許可するには、ブール値を有効にする必要があります。
/etc/httpd/conf/httpd.conf ファイルが TCP ポート 80、443、488、8008、8009、または 8443 以外のポートを httpd がリッスンするように設定されている場合は、semanage port コマンドを使用して、新しいポート番号を SELinux ポリシー設定に追加する必要があります。以下の例では、httpd 用の SELinux ポリシー設定で定義されていないポートをリッスンするように httpd を設定すると、httpd が起動できなくなります。また、この例では、ポリシーで定義されていない標準以外のポートを httpd が正常にリッスンできるように SELinux システムを設定する方法も示しています。この例では、httpd パッケージがインストールされていることを前提としています。この例では、各コマンドを root ユーザーとして実行します。
- 以下のコマンドを実行して、
httpdが実行されていないことを確認します。systemctl status httpd.service httpd.service - The Apache HTTP Server Loaded: loaded (/usr/lib/systemd/system/httpd.service; disabled) Active: inactive (dead)~]# systemctl status httpd.service httpd.service - The Apache HTTP Server Loaded: loaded (/usr/lib/systemd/system/httpd.service; disabled) Active: inactive (dead)Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力が異なる場合は、プロセスを停止します。systemctl stop httpd.service
~]# systemctl stop httpd.serviceCopy to Clipboard Copied! Toggle word wrap Toggle overflow semanageユーティリティーを使用して、SELinux でhttpdがリッスンできるポートを表示します。semanage port -l | grep -w http_port_t http_port_t tcp 80, 443, 488, 8008, 8009, 8443
~]# semanage port -l | grep -w http_port_t http_port_t tcp 80, 443, 488, 8008, 8009, 8443Copy to Clipboard Copied! Toggle word wrap Toggle overflow /etc/httpd/conf/httpd.confファイルを編集します。Listenオプションを設定し、httpdの SELinux ポリシー設定で設定されていないポートをリスト表示します。この例では、httpdがポート 12345 をリッスンするように設定されています。Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 以下のコマンドを入力して、
httpdを起動します。systemctl start httpd.service Job for httpd.service failed. See 'systemctl status httpd.service' and 'journalctl -xn' for details.
~]# systemctl start httpd.service Job for httpd.service failed. See 'systemctl status httpd.service' and 'journalctl -xn' for details.Copy to Clipboard Copied! Toggle word wrap Toggle overflow 以下のような SELinux 拒否メッセージが記録されます。setroubleshoot: SELinux is preventing the httpd (httpd_t) from binding to port 12345. For complete SELinux messages. run sealert -l f18bca99-db64-4c16-9719-1db89f0d8c77
setroubleshoot: SELinux is preventing the httpd (httpd_t) from binding to port 12345. For complete SELinux messages. run sealert -l f18bca99-db64-4c16-9719-1db89f0d8c77Copy to Clipboard Copied! Toggle word wrap Toggle overflow - SELinux で、
httpdがポート 12345 をリッスンできるようにするには、以下のコマンドが必要です。semanage port -a -t http_port_t -p tcp 12345
~]# semanage port -a -t http_port_t -p tcp 12345Copy to Clipboard Copied! Toggle word wrap Toggle overflow httpdを再び起動し、新しいポートをリッスンしていることを確認します。systemctl start httpd.service
~]# systemctl start httpd.serviceCopy to Clipboard Copied! Toggle word wrap Toggle overflow httpdが標準以外のポート (この例では TCP 12345) でリッスンできるように SELinux が設定されました。httpdはこのポートで正常に起動します。httpdが TCP ポート 12345 でリッスンして通信していることを証明するには、以下のように、指定したポートへの telnet 接続を開き、HTTP GET コマンドを実行します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow
13.2. タイプ リンクのコピーリンクがクリップボードにコピーされました!
/var/www/html/ ディレクトリーに新しいファイルを作成し、親ディレクトリー (/var/www/html/) からhttpd_sys_content_t タイプを継承したファイルを示しています。
- 以下のコマンドを入力して、
/var/www/html/の SELinux コンテキストを表示します。ls -dZ /var/www/html drwxr-xr-x root root system_u:object_r:httpd_sys_content_t:s0 /var/www/html
~]$ ls -dZ /var/www/html drwxr-xr-x root root system_u:object_r:httpd_sys_content_t:s0 /var/www/htmlCopy to Clipboard Copied! Toggle word wrap Toggle overflow これは、/var/www/html/にhttpd_sys_content_tタイプのラベルが付けられていることを示しています。 - root で
touchユーティリティーを使用して新規ファイルを作成します。touch /var/www/html/file1
~]# touch /var/www/html/file1Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 以下のコマンドを入力して SELinux コンテキストを表示します。
ls -Z /var/www/html/file1 -rw-r--r-- root root unconfined_u:object_r:httpd_sys_content_t:s0 /var/www/html/file1
~]$ ls -Z /var/www/html/file1 -rw-r--r-- root root unconfined_u:object_r:httpd_sys_content_t:s0 /var/www/html/file1Copy to Clipboard Copied! Toggle word wrap Toggle overflow
httpd_sys_content_t タイプのラベルが付けられた file1 を表示します。SELinux を使用すると、httpd はこのタイプでラベル付けされたファイルを読み取ることができますが、Linux の権限で書き込みアクセスが許可されている場合でも書き込みはできません。SELinux ポリシーは、httpd_t ドメイン (httpd が実行されている場所) で実行中のプロセスが読み取りと書き込みを実行できるタイプを定義します。これは、プロセスが別のプロセスによって使用されるファイルにアクセスできないようにするのに役立ちます。
httpd は、httpd_sys_content_t タイプ (Apache HTTP サーバー向け) のラベルが付いたファイルにアクセスできますが、デフォルトでは、samba_share_t タイプ (Samba 向け) のラベルが付いたファイルにはアクセスできません。また、ユーザーホームディレクトリーのファイルには、user_home_t タイプがラベル付けされています。デフォルトでは、httpd は、ユーザーホームディレクトリーのファイルを読み書きできません。
httpd で使用されるタイプのリストです。異なるタイプを使用すると、柔軟なアクセスを設定できます。
httpd_sys_content_t- 静的 Web サイトで使用される
.htmlファイルなど、静的な Web コンテンツにはこのタイプを使用します。このタイプでラベル付けされたファイルには、httpdおよびhttpdによって実行されるスクリプトからアクセス (読み取りのみ) できます。デフォルトでは、このタイプのラベルが付いたファイルおよびディレクトリーは、httpdやその他のプロセスに書き込んだり、修正したりすることができません。初期設定では、/var/www/html/ディレクトリーに作成またはコピーされるファイルには、httpd_sys_content_tタイプに応じたラベルが付けられています。 httpd_sys_script_exec_t- このタイプは、
httpdを実行するスクリプトに使用します。このタイプは、/var/www/cgi-bin/ディレクトリーの CGI (Common Gateway Interface) スクリプトで一般的に使用されます。初期設定では、SELinux ポリシーにより、httpdが CGI スクリプトを実行できません。これを可能にするには、httpd_sys_script_exec_tタイプでスクリプトにラベルを付け、httpd_enable_cgiブール値を有効にします。httpd_sys_script_exec_tのラベルが付いたスクリプトは、httpdによる実行時にhttpd_sys_script_tドメインで実行されます。httpd_sys_script_tドメインは、postgresql_tおよびmysqld_tなどの他のシステムドメインにアクセスできます。 httpd_sys_rw_content_t- このタイプのラベルが付いたファイルは、
httpd_sys_script_exec_tタイプのラベルが付いたスクリプトで作成できますが、その他のタイプのスクリプトでは変更できません。httpd_sys_rw_content_tタイプを使用して、httpd_sys_script_exec_tタイプのラベルが付いたスクリプトによる読み取りと書き込みの対象となるファイルにラベルを付ける必要があります。 httpd_sys_ra_content_t- このタイプのラベルが付いたファイルは、
httpd_sys_script_exec_tタイプのラベルが付いたスクリプトにより追加できますが、その他のタイプのスクリプトにより変更することはできません。httpd_sys_ra_content_tタイプを使用して、httpd_sys_script_exec_tタイプのラベルが付いたスクリプトによる読み取りと追加を行うファイルに、ラベルを付ける必要があります。 httpd_unconfined_script_exec_t- このタイプでラベル付けされたスクリプトは、SELinux の保護なしで実行されます。その他のオプションをすべて使い切った後、複雑なスクリプトにはこのタイプのみを使用してください。
httpdまたはシステム全体の SELinux 保護を無効にするのではなく、このタイプを使用することが推奨されます。
grep httpd /etc/selinux/targeted/contexts/files/file_contexts
~]$ grep httpd /etc/selinux/targeted/contexts/files/file_contexts
手順13.1 SELinux コンテキストの変更
httpd が使用する新しいディレクトリーと index.html ファイルを作成し、そのファイルおよびディレクトリーにラベルを付けて、それらに httpd がアクセスできるようにします。
mkdirユーティリティーを root として使用して、httpdで使用されるファイルを保存するためのトップレベルのディレクトリー構造を作成します。mkdir -p /my/website
~]# mkdir -p /my/websiteCopy to Clipboard Copied! Toggle word wrap Toggle overflow - file-context 設定のパターンに一致しないファイルおよびディレクトリーには、
default_tタイプのラベルが付けられます。このタイプは、制限のあるサービスからはアクセスできません。ls -dZ /my drwxr-xr-x root root unconfined_u:object_r:default_t:s0 /my
~]$ ls -dZ /my drwxr-xr-x root root unconfined_u:object_r:default_t:s0 /myCopy to Clipboard Copied! Toggle word wrap Toggle overflow - root で以下のコマンドを入力し、
my/ディレクトリーおよびサブディレクトリーのタイプをhttpdにアクセスできるタイプに変更します。my/website/で作成されたファイルは、default_tタイプではなく、httpd_sys_content_tタイプを継承するようになったため、httpd からアクセスできるようになりました。chcon -R -t httpd_sys_content_t /my/ touch /my/website/index.html ls -Z /my/website/index.html -rw-r--r-- root root unconfined_u:object_r:httpd_sys_content_t:s0 /my/website/index.html
~]# chcon -R -t httpd_sys_content_t /my/ ~]# touch /my/website/index.html ~]# ls -Z /my/website/index.html -rw-r--r-- root root unconfined_u:object_r:httpd_sys_content_t:s0 /my/website/index.htmlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
httpd が使用する新しいディレクトリーと index.html ファイルを作成し、そのディレクトリーとファイルのラベルを永続的に変更して、httpd が使用できるようにします。
mkdirユーティリティーを root として使用して、httpdで使用されるファイルを保存するためのトップレベルのディレクトリー構造を作成します。mkdir -p /my/website
~]# mkdir -p /my/websiteCopy to Clipboard Copied! Toggle word wrap Toggle overflow - root で以下のコマンドを入力し、ラベルの変更を file-context 設定に追加します。
semanage fcontext -a -t httpd_sys_content_t "/my(/.*)?"
~]# semanage fcontext -a -t httpd_sys_content_t "/my(/.*)?"Copy to Clipboard Copied! Toggle word wrap Toggle overflow "/my(/.*)?"式は、ラベルの変更がmy/ディレクトリーと、その下のすべてのファイルおよびディレクトリーに適用されることを意味します。 - root で
touchユーティリティーを使用して、新規ファイルを作成します。touch /my/website/index.html
~]# touch /my/website/index.htmlCopy to Clipboard Copied! Toggle word wrap Toggle overflow - root で以下のコマンドを入力し、ラベルの変更を適用します (restorecon は、手順 2 の semanage コマンドで変更された file-context 設定を読み取ります)。
restorecon -R -v /my/ restorecon reset /my context unconfined_u:object_r:default_t:s0->system_u:object_r:httpd_sys_content_t:s0 restorecon reset /my/website context unconfined_u:object_r:default_t:s0->system_u:object_r:httpd_sys_content_t:s0 restorecon reset /my/website/index.html context unconfined_u:object_r:default_t:s0->system_u:object_r:httpd_sys_content_t:s0
~]# restorecon -R -v /my/ restorecon reset /my context unconfined_u:object_r:default_t:s0->system_u:object_r:httpd_sys_content_t:s0 restorecon reset /my/website context unconfined_u:object_r:default_t:s0->system_u:object_r:httpd_sys_content_t:s0 restorecon reset /my/website/index.html context unconfined_u:object_r:default_t:s0->system_u:object_r:httpd_sys_content_t:s0Copy to Clipboard Copied! Toggle word wrap Toggle overflow
13.3. ブール値 リンクのコピーリンクがクリップボードにコピーされました!
httpd_anon_write ブール値を有効にするには、root で以下のコマンドを入力します。
setsebool -P httpd_anon_write on
~]# setsebool -P httpd_anon_write on
setsebool -P httpd_anon_write off
~]# setsebool -P httpd_anon_write off
-P オプションを使用しないでください。
httpd の実行方法に対応するために使用可能な一般的なブール値の説明です。
httpd_anon_write- このブール値を無効にすると、
httpdは、public_content_rw_tタイプでラベル付けされたファイルへの読み取りアクセスのみを許可します。このブール値を有効にすると、httpdは、public_content_rw_tタイプでラベル付けされたファイル (公開ファイル転送サービスのファイルを含む公開ディレクトリーなど) に書き込むことができます。 httpd_mod_auth_ntlm_winbind- このブール値を有効にすると、
httpdのmod_auth_ntlm_winbindモジュールを使用した NTLM および Winbind の認証メカニズムにアクセスできるようになります。 httpd_mod_auth_pam- このブール値を有効にすると、
httpdのmod_auth_pamモジュールを使用した PAM 認証メカニズムにアクセスできるようになります。 httpd_sys_script_anon_write- このブール値は、公開ファイル転送サービスで使用される
public_content_rw_tタイプでラベル付けされたファイルに、HTTP スクリプトによる書き込みアクセスを許可するかどうかを定義します。 httpd_builtin_scripting- このブール値は、
httpdスクリプトへのアクセスを定義します。PHP コンテンツでは、このブール値を有効にする必要があることがよくあります。 httpd_can_network_connect- このブール値を無効にすると、HTTP スクリプトおよびモジュールは、ネットワークまたはリモートポートへの接続を開始できなくなります。このアクセスを許可するには、このブール値を有効にします。
httpd_can_network_connect_db- このブール値を無効にすると、HTTP スクリプトおよびモジュールは、データベースサーバーへの接続を開始できなくなります。このアクセスを許可するには、このブール値を有効にします。
httpd_can_network_relayhttpdを正引きまたはリバースプロキシーとして使用する場合は、このブール値を有効にします。httpd_can_sendmail- このブール値を無効にすると、HTTP モジュールがメールを送信できなくなります。これにより、
httpdでスパム攻撃による脆弱性の発生を防ぐことができます。このブール値を有効にして、HTTP モジュールがメールを送信できるようにします。 httpd_dbus_avahi- 無効にすると、このブール値は
D-Busを介したavahiサービスへのhttpdアクセスを拒否します。このアクセスを許可するには、このブール値を有効にします。 httpd_enable_cgi- 無効にすると、このブール値は
httpdが CGI スクリプトを実行できないようにします。httpdが CGI スクリプトを実行できるようにするには、このブール値を有効にします (CGI スクリプトには、httpd_sys_script_exec_tタイプのラベルが必要です)。 httpd_enable_ftp_server- このブール値を有効にすると、
httpdは FTP ポートをリッスンし、FTP サーバーとして機能します。 httpd_enable_homedirs- このブール値を無効にすると、
httpdはユーザーホームディレクトリーにアクセスできなくなります。このブール値を有効にすると、ユーザーホームディレクトリー (/home/*/のコンテンツなど) へのhttpdアクセスを許可します。 httpd_execmem- このブール値を有効にすると、
httpdは、実行可能ファイルと書き込み可能なメモリーアドレスを必要とするプログラムを実行できます。バッファーオーバーフローに対する保護が低減するため、セキュリティー上の理由から、このブール値を有効にすることは推奨できません。ただし、特定のモジュールおよびアプリケーション (Java アプリケーションや Mono アプリケーションなど) では、この権限が必要になります。 httpd_ssi_exec- このブール値は、Web ページのサーバー側のインクルード (SSI) 要素を実行できるかどうかを定義します。
httpd_tty_comm- このブール値は、
httpdが制御端末へのアクセスを許可するかどうかを定義します。通常はこのアクセスは必要ありませんが、SSL 証明書ファイルの設定などの場合は、パスワードプロンプトを表示して処理するために端末アクセスが必要になります。 httpd_unified- このブール値を有効にすると、
httpd_tはすべてのhttpdタイプ (sys_content_t の実行、読み取り、または書き込み) に完全にアクセスできるようになります。無効にすると、読み取り専用、書き込み可能、または実行可能な Web コンテンツが切り離されます。このブール値を無効にすると、セキュリティーレベルが向上しますが、スクリプトやその他の Web コンテンツに、それぞれが持つ必要のあるファイルアクセス権に基づいて、個別にラベルを付ける必要があるという管理オーバーヘッドが追加されます。 httpd_use_cifs- このブール値を有効にすると、Samba を使用してマウントしたファイルシステムなど、
cifs_tタイプでラベル付けされた CIFS ボリュームのファイルに、httpdがアクセスできるようになります。 httpd_use_nfs- このブール値を有効にすると、NFS を使用してマウントしたファイルシステムなど、
nfs_tタイプでラベル付けされた NFS ボリュームのファイルに、httpdがアクセスできるようになります。
getsebool -a | grep service_name
~]$ getsebool -a | grep service_name
sepolicy booleans -b boolean_name
~]$ sepolicy booleans -b boolean_name
sepolicy ユーティリティーを提供する追加の policycoreutils-devel パッケージが必要であることに注意してください。
13.4. 設定例 リンクのコピーリンクがクリップボードにコピーされました!
13.4.1. 静的サイトの実行 リンクのコピーリンクがクリップボードにコピーされました!
.html ファイルに httpd_sys_content_t タイプのラベルを付けます。デフォルトでは、Apache HTTP サーバーは httpd_sys_content_t タイプのラベルが付けられたファイルに書き込みできません。以下の例では、読み取り専用の Web サイトのファイルを保存する新しいディレクトリーを作成します。
- root で
mkdirユーティリティーを使用して、最上位のディレクトリーを作成します。mkdir /mywebsite
~]# mkdir /mywebsiteCopy to Clipboard Copied! Toggle word wrap Toggle overflow - root として
/mywebsite/index.htmlファイルを作成します。以下の内容を/mywebsite/index.htmlにコピーアンドペーストします。<html> <h2>index.html from /mywebsite/</h2> </html>
<html> <h2>index.html from /mywebsite/</h2> </html>Copy to Clipboard Copied! Toggle word wrap Toggle overflow - Apache HTTP サーバーが、
/mywebsite/、およびその下のファイルとサブディレクトリーに読み取り専用でアクセスできるようにするには、ディレクトリーにhttpd_sys_content_tタイプのラベルを付けます。root で以下のコマンドを入力し、ラベルの変更を file-context 設定に追加します。semanage fcontext -a -t httpd_sys_content_t "/mywebsite(/.*)?"
~]# semanage fcontext -a -t httpd_sys_content_t "/mywebsite(/.*)?"Copy to Clipboard Copied! Toggle word wrap Toggle overflow restoreconユーティリティーを root として使用し、ラベルを変更します。restorecon -R -v /mywebsite restorecon reset /mywebsite context unconfined_u:object_r:default_t:s0->system_u:object_r:httpd_sys_content_t:s0 restorecon reset /mywebsite/index.html context unconfined_u:object_r:default_t:s0->system_u:object_r:httpd_sys_content_t:s0
~]# restorecon -R -v /mywebsite restorecon reset /mywebsite context unconfined_u:object_r:default_t:s0->system_u:object_r:httpd_sys_content_t:s0 restorecon reset /mywebsite/index.html context unconfined_u:object_r:default_t:s0->system_u:object_r:httpd_sys_content_t:s0Copy to Clipboard Copied! Toggle word wrap Toggle overflow - この例では、root として
/etc/httpd/conf/httpd.confファイルを編集します。既存のDocumentRootオプションをコメントアウトします。DocumentRoot "/mywebsite"オプションを追加します。編集後、これらのオプションは以下のようになります。#DocumentRoot "/var/www/html" DocumentRoot "/mywebsite"
#DocumentRoot "/var/www/html" DocumentRoot "/mywebsite"Copy to Clipboard Copied! Toggle word wrap Toggle overflow - root で以下のコマンドを入力して、Apache HTTP Server のステータスを確認します。サーバーが停止している場合は、起動します。
systemctl status httpd.service httpd.service - The Apache HTTP Server Loaded: loaded (/usr/lib/systemd/system/httpd.service; disabled) Active: inactive (dead)
~]# systemctl status httpd.service httpd.service - The Apache HTTP Server Loaded: loaded (/usr/lib/systemd/system/httpd.service; disabled) Active: inactive (dead)Copy to Clipboard Copied! Toggle word wrap Toggle overflow systemctl start httpd.service
~]# systemctl start httpd.serviceCopy to Clipboard Copied! Toggle word wrap Toggle overflow サーバーが実行している場合は、root で以下のコマンドを実行してサービスを再起動します (httpd.confに加えた変更も適用されます)。systemctl status httpd.service httpd.service - The Apache HTTP Server Loaded: loaded (/usr/lib/systemd/system/httpd.service; disabled) Active: active (running) since Wed 2014-02-05 13:16:46 CET; 2s ago
~]# systemctl status httpd.service httpd.service - The Apache HTTP Server Loaded: loaded (/usr/lib/systemd/system/httpd.service; disabled) Active: active (running) since Wed 2014-02-05 13:16:46 CET; 2s agoCopy to Clipboard Copied! Toggle word wrap Toggle overflow systemctl restart httpd.service
~]# systemctl restart httpd.serviceCopy to Clipboard Copied! Toggle word wrap Toggle overflow - Web ブラウザーを使用して
http://localhost/index.htmlに移動します。以下が表示されます。index.html from /mywebsite/
index.html from /mywebsite/Copy to Clipboard Copied! Toggle word wrap Toggle overflow
13.4.2. NFS および CIFS ボリュームの共有 リンクのコピーリンクがクリップボードにコピーされました!
nfs_t タイプを使用します。また、デフォルトでは、クライアント側でマウントされた Samba 共有には、ポリシーで定義されたデフォルトのコンテキストのラベルが付けられます。一般的なポリシーでは、このデフォルトコンテキストはcifs_t タイプを使用します。
nfs_t タイプまたは cifs_t タイプのラベルが付いたファイルを読み込めない場合があります。これにより、このタイプのラベルが付いたファイルシステムをマウントしてから、その他のサービスによる読み取りやエクスポートができなくなる可能性があります。ブール値を有効または無効にして、nfs_t タイプおよび cifs_t タイプへのアクセスを許可するサービスを制御できます。
httpd_use_nfs ブール値を有効にして、httpd が NFS ボリューム (nfs_t タイプのラベルが付いている) にアクセスし、共有できるようにします。
setsebool -P httpd_use_nfs on
~]# setsebool -P httpd_use_nfs on
httpd_use_cifs ブール値を有効にして、httpd が CIFS ボリューム (cifs_t の種類のラベルが付いている) にアクセスし、共有できるようにします。
setsebool -P httpd_use_cifs on
~]# setsebool -P httpd_use_cifs on
-P オプションを使用しないでください。
13.4.3. サービス間でのファイルの共有 リンクのコピーリンクがクリップボードにコピーされました!
httpd_sys_content_t のタイプでラベルが付いたファイル (Apache HTTP サーバーが使用するファイル) を読み込むことができません。ファイルに public_content_t または public_content_rw_t のタイプのラベルが付けられている場合は、Apache HTTP サーバー、FTP、rsync、および Samba との間でファイルを共有できます。
- root で
mkdirユーティリティーを使用して、複数のサービス間でファイルを共有するための新しいトップレベルディレクトリーを作成します。mkdir /shares
~]# mkdir /sharesCopy to Clipboard Copied! Toggle word wrap Toggle overflow - file-context 設定のパターンに一致しないファイルおよびディレクトリーには、
default_tタイプのラベルが付けられます。このタイプは、制限のあるサービスからはアクセスできません。ls -dZ /shares drwxr-xr-x root root unconfined_u:object_r:default_t:s0 /shares
~]$ ls -dZ /shares drwxr-xr-x root root unconfined_u:object_r:default_t:s0 /sharesCopy to Clipboard Copied! Toggle word wrap Toggle overflow - root で、
/shares/index.htmlファイルを作成します。以下の内容を/shares/index.htmlにコピーアンドペーストします。Copy to Clipboard Copied! Toggle word wrap Toggle overflow public_content_tタイプでの/shares/のラベル付けでは、Apache HTTP サーバー、FTP、rsync、および Samba による読み取り専用アクセスが許可されます。root で以下のコマンドを入力し、ラベルの変更を file-context 設定に追加します。semanage fcontext -a -t public_content_t "/shares(/.*)?"
~]# semanage fcontext -a -t public_content_t "/shares(/.*)?"Copy to Clipboard Copied! Toggle word wrap Toggle overflow restoreconユーティリティーを root で使用し、ラベルの変更を適用します。restorecon -R -v /shares/ restorecon reset /shares context unconfined_u:object_r:default_t:s0->system_u:object_r:public_content_t:s0 restorecon reset /shares/index.html context unconfined_u:object_r:default_t:s0->system_u:object_r:public_content_t:s0
~]# restorecon -R -v /shares/ restorecon reset /shares context unconfined_u:object_r:default_t:s0->system_u:object_r:public_content_t:s0 restorecon reset /shares/index.html context unconfined_u:object_r:default_t:s0->system_u:object_r:public_content_t:s0Copy to Clipboard Copied! Toggle word wrap Toggle overflow
/shares/を共有するには、以下を行います。
- samba パッケージ、samba-common パッケージ、および samba-client パッケージがインストールされていることを確認します (バージョン番号が異なる場合があります)。
rpm -q samba samba-common samba-client samba-3.4.0-0.41.el6.3.i686 samba-common-3.4.0-0.41.el6.3.i686 samba-client-3.4.0-0.41.el6.3.i686
~]$ rpm -q samba samba-common samba-client samba-3.4.0-0.41.el6.3.i686 samba-common-3.4.0-0.41.el6.3.i686 samba-client-3.4.0-0.41.el6.3.i686Copy to Clipboard Copied! Toggle word wrap Toggle overflow これらのパッケージのいずれかがインストールされていない場合は、root で以下のコマンドを実行してインストールします。yum install package-name
~]# yum install package-nameCopy to Clipboard Copied! Toggle word wrap Toggle overflow /etc/samba/smb.confを root で編集します。このファイルの下部に以下のエントリーを追加し、Samba で/shares/ディレクトリーを共有します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow - Samba ファイルシステムをマウントするには、Samba アカウントが必要です。root で次のコマンドを入力して、Samba アカウントを作成します。username は、既存の Linux ユーザーです。たとえば、smbpasswd -a testuser は、Linux
testuserユーザーの Samba アカウントを作成します。smbpasswd -a testuser New SMB password: Enter a password Retype new SMB password: Enter the same password again Added user testuser.
~]# smbpasswd -a testuser New SMB password: Enter a password Retype new SMB password: Enter the same password again Added user testuser.Copy to Clipboard Copied! Toggle word wrap Toggle overflow 上記のコマンドを実行し、システムに存在しないアカウントのユーザー名を指定すると、Cannot locate Unix account for 'username'!エラーが発生します。 - Samba サービスを再起動します。
systemctl start smb.service
~]# systemctl start smb.serviceCopy to Clipboard Copied! Toggle word wrap Toggle overflow - 利用可能な共有をリスト表示するには、次のコマンドを入力します。username は、手順 3 で追加した Samba アカウントです。パスワードを求められたら、手順 3 で Samba アカウントに割り当てたパスワードを入力します (バージョン番号は異なる場合があります)。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow mkdirユーティリティーを使用して、新しいディレクトリーを作成します。このディレクトリーは、sharesの Samba 共有をマウントするために使用されます。mkdir /test/
~]# mkdir /test/Copy to Clipboard Copied! Toggle word wrap Toggle overflow - root で次のコマンドを入力して、
sharesの Samba 共有を/test/にマウントし、username を、手順 3 のユーザー名に置き換えます。mount //localhost/shares /test/ -o user=username
~]# mount //localhost/shares /test/ -o user=usernameCopy to Clipboard Copied! Toggle word wrap Toggle overflow 手順 3 で設定した username のパスワードを入力します。 - Samba で共有されているファイルの内容を表示します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
/shares/ を共有するには、次のコマンドを実行します。
- httpd パッケージがインストールされていることを確認します (バージョン番号が異なる場合があります)。
rpm -q httpd httpd-2.2.11-6.i386
~]$ rpm -q httpd httpd-2.2.11-6.i386Copy to Clipboard Copied! Toggle word wrap Toggle overflow このパッケージがインストールされていない場合は、root でyumユーティリティーを使用してインストールします。yum install httpd
~]# yum install httpdCopy to Clipboard Copied! Toggle word wrap Toggle overflow /var/www/html/ディレクトリーに変更します。root で以下のコマンドを入力し、/shares/ディレクトリーへのリンク (名前はshares) を作成します。html]# ln -s /shares/ shares
html]# ln -s /shares/ sharesCopy to Clipboard Copied! Toggle word wrap Toggle overflow - Apache HTTP サーバーを起動します。
systemctl start httpd.service
~]# systemctl start httpd.serviceCopy to Clipboard Copied! Toggle word wrap Toggle overflow - Web ブラウザーを使用して
http://localhost/sharesに移動します。/shares/index.htmlが表示されます。
index.html ファイルが存在する場合は読み込まれます。/shares/ にindex.html がなく、代わりに file1、file2、および file3 があった場合は、http://localhost/shares へのアクセス時にディレクトリーのリストが表示されます。
index.htmlファイルを削除します。rm -i /shares/index.html
~]# rm -i /shares/index.htmlCopy to Clipboard Copied! Toggle word wrap Toggle overflow touchユーティリティーを root で使用し、/shares/に 3 つのファイルを作成します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow - root で以下のコマンドを入力して、Apache HTTP サーバーのステータスを確認します。
systemctl status httpd.service httpd.service - The Apache HTTP Server Loaded: loaded (/usr/lib/systemd/system/httpd.service; disabled) Active: inactive (dead)
~]# systemctl status httpd.service httpd.service - The Apache HTTP Server Loaded: loaded (/usr/lib/systemd/system/httpd.service; disabled) Active: inactive (dead)Copy to Clipboard Copied! Toggle word wrap Toggle overflow サーバーが停止している場合は、起動します。systemctl start httpd.service
~]# systemctl start httpd.serviceCopy to Clipboard Copied! Toggle word wrap Toggle overflow - Web ブラウザーを使用して
http://localhost/sharesに移動します。ディレクトリーのリストが表示されます。
13.4.4. ポート番号の変更 リンクのコピーリンクがクリップボードにコピーされました!
semanage ユーティリティーを使用して、root ユーザーに、SELinux が httpd でリッスンできるポートをリスト表示します。
semanage port -l | grep -w http_port_t http_port_t tcp 80, 443, 488, 8008, 8009, 8443
~]# semanage port -l | grep -w http_port_t
http_port_t tcp 80, 443, 488, 8008, 8009, 8443
httpd は TCP ポート 80、443、488、8008、8009、または 8443 でリッスンできます。/etc/httpd/conf/httpd.conf が、http_port_t に登録されていないポートで httpd がリッスンするように設定されていると、httpd が起動できません。
httpd を TCP ポート 80、443、488、8008、8009、または 8443 以外のポートで実行するように設定するには、次のコマンドを実行します。
/etc/httpd/conf/httpd.confファイルを root で編集し、Listenオプションにhttpdの SELinux ポリシーで設定されていないポートのリストが表示されるようにします。以下の例では、httpdが 10.0.0.1 IP アドレスおよび TCP ポート 12345 でリッスンするように設定します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow - root ユーザーになり、次のコマンドを実行して、SELinux ポリシー設定にポートを追加します。
semanage port -a -t http_port_t -p tcp 12345
~]# semanage port -a -t http_port_t -p tcp 12345Copy to Clipboard Copied! Toggle word wrap Toggle overflow - ポートが追加されたことを確認します。
semanage port -l | grep -w http_port_t http_port_t tcp 12345, 80, 443, 488, 8008, 8009, 8443
~]# semanage port -l | grep -w http_port_t http_port_t tcp 12345, 80, 443, 488, 8008, 8009, 8443Copy to Clipboard Copied! Toggle word wrap Toggle overflow
httpd を実行しなくなった場合は、root で semanage ユーティリティーを使用し、ポリシー設定からポートを削除します。
semanage port -d -t http_port_t -p tcp 12345
~]# semanage port -d -t http_port_t -p tcp 12345
第14章 Samba リンクのコピーリンクがクリップボードにコピーされました!
rpm -q samba package samba is not installed
~]$ rpm -q samba
package samba is not installed
yum ユーティリティーを root ユーザーでインストールします。
yum install samba
~]# yum install samba
14.1. Samba と SELinux リンクのコピーリンクがクリップボードにコピーされました!
smbd) はデフォルトで制限付きで実行します。制限のあるサービスは独自のドメインで実行し、その他の制限のあるサービスとは区別されます。以下の例は、独自の領域で実行しているsmbd プロセスを示しています。この例では、samba がインストールされていることを前提としています。
- getenforce コマンドを実行して、SELinux が Enforcing モードで実行されていることを確認します。
getenforce Enforcing
~]$ getenforce EnforcingCopy to Clipboard Copied! Toggle word wrap Toggle overflow SELinux が Enforcing モードで実行されていると、このコマンドはEnforcingを返します。 - root で次のコマンドを入力して、
smbdを起動します。systemctl start smb.service
~]# systemctl start smb.serviceCopy to Clipboard Copied! Toggle word wrap Toggle overflow サービスが実行中であることを確認します。出力には以下の情報が含まれている必要があります (タイムスタンプのみは異なります)。systemctl status smb.service smb.service - Samba SMB Daemon Loaded: loaded (/usr/lib/systemd/system/smb.service; disabled) Active: active (running) since Mon 2013-08-05 12:17:26 CEST; 2h 22min ago
~]# systemctl status smb.service smb.service - Samba SMB Daemon Loaded: loaded (/usr/lib/systemd/system/smb.service; disabled) Active: active (running) since Mon 2013-08-05 12:17:26 CEST; 2h 22min agoCopy to Clipboard Copied! Toggle word wrap Toggle overflow smbdプロセスを表示するには、以下のコマンドを実行します。ps -eZ | grep smb system_u:system_r:smbd_t:s0 9653 ? 00:00:00 smbd system_u:system_r:smbd_t:s0 9654? 00:00:00 smbd
~]$ ps -eZ | grep smb system_u:system_r:smbd_t:s0 9653 ? 00:00:00 smbd system_u:system_r:smbd_t:s0 9654? 00:00:00 smbdCopy to Clipboard Copied! Toggle word wrap Toggle overflow smbdプロセスに関連付けられた SELinux コンテキストはsystem_u:system_r:smbd_t:s0です。コンテキストの 2 番目の部分smbd_tはタイプです。タイプは、プロセスのドメインとファイルのタイプを定義します。この例では、smbdプロセスがsmbd_tドメインで実行しています。
smbd がファイルにアクセスし、共有できるように、ファイルに正しくラベルを付ける必要があります。たとえば、smbd は、samba_share_t タイプのラベルが付いたファイルの読み取りと書き込みが可能ですが、デフォルトでは、httpd_sys_content_t タイプのラベルが付いたファイルにはアクセスできません。これは、Apache HTTP サーバーが使用することを目的としています。ブール値を有効にして、ホームディレクトリーや NFS ボリュームを Samba 経由でエクスポートできるようにしたり、Samba がドメインコントローラーとして機能できるようにする必要があります。
14.2. タイプ リンクのコピーリンクがクリップボードにコピーされました!
samba_share_tのタイプでファイルにラベルを付け、Samba がファイルを共有できるようにします。作成したファイルのみにラベルを付け、samba_share_t タイプでシステムファイルに再ラベル付けしないでください。ブール値を有効にすると、このようなファイルおよびディレクトリーを共有できます。/etc/samba/smb.conf ファイルおよび Linux のパーミッションが設定されていれば、samba_share_t タイプでラベル付けされたファイルに書き込むことができます。
samba_etc_tタイプは、/etc/samba/ディレクトリーの特定のファイル (smb.conf など) で使用されます。samba_etc_tの種類でファイルに手動でラベルを付けないでください。このディレクトリーのファイルにラベルが正しく設定されていない場合は、root ユーザーになり、restorecon -R -v /etc/samba を実行してファイルをデフォルトコンテキストに戻します。/etc/samba/smb.conf にsamba_etc_t タイプを指定しないと、Samba の起動に失敗し、SELinux の拒否メッセージが記録される場合があります。以下は、/etc/samba/smb.conf に httpd_sys_content_t タイプのラベルが付いた拒否メッセージの例になります。
setroubleshoot: SELinux is preventing smbd (smbd_t) "read" to ./smb.conf (httpd_sys_content_t). For complete SELinux messages. run sealert -l deb33473-1069-482b-bb50-e4cd05ab18af
setroubleshoot: SELinux is preventing smbd (smbd_t) "read" to ./smb.conf (httpd_sys_content_t). For complete SELinux messages. run sealert -l deb33473-1069-482b-bb50-e4cd05ab18af
14.3. ブール値 リンクのコピーリンクがクリップボードにコピーされました!
smbd_anon_write- このブール値を有効にすると、
smbdは、特殊なアクセス制限がない一般的なファイル用に予約されている領域など、公開ディレクトリーに書き込むことができます。 samba_create_home_dirs- ブール値を有効にすると、Samba は新しいホームディレクトリーを個別に作成できます。これは、PAM などのメカニズムにより行われることが多いです。
samba_domain_controller- これを有効にすると、ブール値により、Samba がドメインコントローラーとして機能し、useradd、groupadd、passwd などの関連コマンドを実行するパーミッションを得ることができます。
samba_enable_home_dirs- このブール値を有効にすると、Samba はユーザーのホームディレクトリーを共有できます。
samba_export_all_ro- ファイルまたはディレクトリーをエクスポートし、読み取り専用の権限を付与します。これにより、
samba_share_tタイプのラベルが付いていないファイルおよびディレクトリーを、Samba で共有できます。samba_export_all_roブール値が有効であっても、samba_export_all_rwのブール値が無効になっていると、/etc/samba/smb.confで書き込みアクセスが設定されていても、Samba 共有への書き込みアクセスは拒否されます。また、書き込みアクセスを許可している Linux パーミッションも拒否されます。 samba_export_all_rw- ファイルまたはディレクトリーをエクスポートして、読み取りおよび書き込みのパーミッションを許可します。これにより、
samba_share_tタイプのラベルが付いていないファイルおよびディレクトリーを、Samba からエクスポートできます。書き込みアクセスを許可するには、/etc/samba/smb.confおよび Linux のパーミッションを設定する必要があります。 samba_run_unconfined- ブール値を有効にすると、
/var/lib/samba/scripts/ディレクトリーで、Samba が定義されていないスクリプトを実行できるようになります。 samba_share_fusefs- Samba が fusefs ファイルシステムを共有するには、このブール値を有効にする必要があります。
samba_share_nfs- このブール値を無効にすると、
smbdは Samba を介して NFS 共有に完全にアクセスできなくなります。このブール値を有効にすると、Samba は NFS ボリュームを共有できるようになります。 use_samba_home_dirs- Samba ホームディレクトリーにリモートサーバーを使用する場合は、このブール値を有効にします。
virt_use_samba- 仮想マシンによる CIFS ファイルへのアクセスを許可します。
getsebool -a | grep service_name
~]$ getsebool -a | grep service_name
sepolicy booleans -b boolean_name
~]$ sepolicy booleans -b boolean_name
sepolicy ユーティリティーを提供する追加の policycoreutils-devel パッケージが必要であることに注意してください。
14.4. 設定例 リンクのコピーリンクがクリップボードにコピーされました!
14.4.1. 作成したディレクトリーの共有 リンクのコピーリンクがクリップボードにコピーされました!
- samba パッケージ、samba-common パッケージ、および samba-client パッケージがインストールされていることを確認します。
rpm -q samba samba-common samba-client package samba is not installed package samba-common is not installed package samba-client is not installed
~]$ rpm -q samba samba-common samba-client package samba is not installed package samba-common is not installed package samba-client is not installedCopy to Clipboard Copied! Toggle word wrap Toggle overflow これらのパッケージがいずれもインストールされていない場合は、root でyumユーティリティーを使用してパッケージをインストールします。yum install package-name
~]# yum install package-nameCopy to Clipboard Copied! Toggle word wrap Toggle overflow mkdirユーティリティーを root で使用し、Samba でファイルを共有するための新しいトップレベルディレクトリーを作成します。mkdir /myshare
~]# mkdir /myshareCopy to Clipboard Copied! Toggle word wrap Toggle overflow touchユーティリティーの root を使用して、空のファイルを作成します。このファイルは、後で Samba 共有が正しくマウントされたことを確認するために使用されます。touch /myshare/file1
~]# touch /myshare/file1Copy to Clipboard Copied! Toggle word wrap Toggle overflow /etc/samba/smb.confファイルおよび Linux のパーミッションが設定されていれば、samba_share_tタイプでラベル付けされたファイルの読み取りと書き込みが可能になります。root で以下のコマンドを入力し、ラベルの変更を file-context 設定に追加します。semanage fcontext -a -t samba_share_t "/myshare(/.*)?"
~]# semanage fcontext -a -t samba_share_t "/myshare(/.*)?"Copy to Clipboard Copied! Toggle word wrap Toggle overflow restoreconユーティリティーを root で使用し、ラベルの変更を適用します。restorecon -R -v /myshare restorecon reset /myshare context unconfined_u:object_r:default_t:s0->system_u:object_r:samba_share_t:s0 restorecon reset /myshare/file1 context unconfined_u:object_r:default_t:s0->system_u:object_r:samba_share_t:s0
~]# restorecon -R -v /myshare restorecon reset /myshare context unconfined_u:object_r:default_t:s0->system_u:object_r:samba_share_t:s0 restorecon reset /myshare/file1 context unconfined_u:object_r:default_t:s0->system_u:object_r:samba_share_t:s0Copy to Clipboard Copied! Toggle word wrap Toggle overflow - root で
/etc/samba/smb.confを編集します。このファイルの下部に以下を追加し、Samba で/myshare/ディレクトリーを共有します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow - Samba ファイルシステムをマウントするには、Samba アカウントが必要です。root で次のコマンドを入力して、Samba アカウントを作成します。username は、既存の Linux ユーザーです。たとえば、smbpasswd -a testuser は、Linux
testuserユーザーの Samba アカウントを作成します。smbpasswd -a testuser New SMB password: Enter a password Retype new SMB password: Enter the same password again Added user testuser.
~]# smbpasswd -a testuser New SMB password: Enter a password Retype new SMB password: Enter the same password again Added user testuser.Copy to Clipboard Copied! Toggle word wrap Toggle overflow 上記のコマンドを入力し、システムに存在しないアカウントのユーザー名を指定すると、Cannot locate Unix account for 'username'!エラーが発生します。 - Samba サービスを再起動します。
systemctl start smb.service
~]# systemctl start smb.serviceCopy to Clipboard Copied! Toggle word wrap Toggle overflow - 利用可能な共有をリスト表示するには、次のコマンドを入力します。username は、手順 7 で追加した Samba アカウントです。パスワードを求められたら、手順 7 で Samba アカウントに割り当てたパスワードを入力します (バージョン番号は異なる場合があります)。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow mkdirユーティリティーを root で実行して、新しいディレクトリーを作成します。このディレクトリーは、myshareの Samba 共有をマウントするために使用されます。mkdir /test/
~]# mkdir /test/Copy to Clipboard Copied! Toggle word wrap Toggle overflow - root で次のコマンドを入力して、
myshareの Samba 共有を/test/にマウントし、username を、手順 7 のユーザー名に置き換えます。mount //localhost/myshare /test/ -o user=username
~]# mount //localhost/myshare /test/ -o user=usernameCopy to Clipboard Copied! Toggle word wrap Toggle overflow 手順 7 で設定した username のパスワードを入力します。 - 手順 3 で作成した
file1を表示する場合は、以下を実行します。ls /test/ file1
~]$ ls /test/ file1Copy to Clipboard Copied! Toggle word wrap Toggle overflow
14.4.2. Web サイトの共有 リンクのコピーリンクがクリップボードにコピーされました!
/var/www/html/ ディレクトリー内の Web サイトを共有する場合など、samba_share_t タイプでファイルにラベルを付けることはできません。このような場合は、samba_export_all_ro ブール値を使用して (現在のラベルに関係なく) 任意のファイルまたはディレクトリーを共有して読み取り専用権限を許可するかsamba_export_all_rw ブール値を使用して (現在のラベルに関係なく) 任意のファイルまたはディレクトリーを共有して読み取りおよび書き込み権限を許可します。
/var/www/html/ で Web サイトのファイルを作成し、Samba でそのファイルを共有することで、読み取り権限と書き込み権限を付与します。この例では、httpd パッケージ、samba パッケージ、samba-common パッケージ、samba-client パッケージ、および wget パッケージがインストールされていることを前提としています。
- root で、
/var/www/html/file1.htmlファイルを作成します。以下の内容をこのファイルにコピーして貼り付けます。<html> <h2>File being shared through the Apache HTTP Server and Samba.</h2> </html>
<html> <h2>File being shared through the Apache HTTP Server and Samba.</h2> </html>Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 次のコマンドを実行すると、
file1.htmlの SELinux コンテキストが表示されます。ls -Z /var/www/html/file1.html -rw-r--r--. root root unconfined_u:object_r:httpd_sys_content_t:s0 /var/www/html/file1.html
~]$ ls -Z /var/www/html/file1.html -rw-r--r--. root root unconfined_u:object_r:httpd_sys_content_t:s0 /var/www/html/file1.htmlCopy to Clipboard Copied! Toggle word wrap Toggle overflow ファイルには、httpd_sys_content_tのラベルが付けられています。デフォルトでは、Apache HTTP サーバーはこのタイプにアクセスできますが、Samba はアクセスできません。 - Apache HTTP サーバーを起動します。
systemctl start httpd.service
~]# systemctl start httpd.serviceCopy to Clipboard Copied! Toggle word wrap Toggle overflow - ユーザーが書き込みアクセス権を持つディレクトリーに移動し、次のコマンドを実行します。デフォルト設定が変更されない限り、このコマンドは成功します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - root で
/etc/samba/smb.confを編集します。このファイルの下部に以下を追加し、Samba で/var/www/html/ディレクトリーを共有します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow /var/www/html/ディレクトリーには、httpd_sys_content_tタイプのラベルが付けられています。デフォルトでは、Samba は Linux の権限があっても、このタイプのラベルが付いたファイルおよびディレクトリーにはアクセスできません。Samba のアクセスを許可するには、samba_export_all_roブール値を有効にします。setsebool -P samba_export_all_ro on
~]# setsebool -P samba_export_all_ro onCopy to Clipboard Copied! Toggle word wrap Toggle overflow システムを再起動しても変更を持続させない場合は、-Pオプションを使用しないでください。samba_export_all_roブール値を有効にすると、Samba は任意のタイプにアクセスできるようになることに注意してください。- Samba サービスを再起動します。
systemctl start smb.service
~]# systemctl start smb.serviceCopy to Clipboard Copied! Toggle word wrap Toggle overflow
第15章 ファイル転送プロトコル リンクのコピーリンクがクリップボードにコピーされました!
vsftpd) は、高速で安定しており、最も重要なこととして安全であるようにゼロから設計されています。多数の接続を効率的かつ安全に処理できることが、Red Hat Enterprise Linux に同梱されるスタンドアロンの FTP が vsftpd のみである理由です。
rpm -q vsftpd package vsftpd is not installed
~]$ rpm -q vsftpd
package vsftpd is not installed
yum ユーティリティーを root ユーザーでインストールします。
yum install vsftpd
~]# yum install vsftpd
15.1. タイプ リンクのコピーリンクがクリップボードにコピーされました!
/var/ftp/ ディレクトリーのファイルへの読み取りアクセス権を持ちます。このディレクトリーには、public_content_t タイプのラベルが付けられており、書き込みアクセスが /etc/vsftpd/vsftpd.conf で設定されている場合でも、読み取りアクセスのみを許可します。public_content_t のタイプは、Apache HTTP サーバー、Samba、NFS などの他のサービスからアクセスできます。
public_content_tpublic_content_tタイプで作成したラベルファイルおよびディレクトリーを、vsftpdで読み取り専用で共有します。Apache HTTP サーバー、Samba、NFS などのその他のサービスは、このタイプのラベルが付いたファイルにアクセスできます。public_content_tタイプが指定されているファイルは、書き込みが許可されていても書き込みできません。ライトアクセスが必要な場合は、public_content_rw_tタイプを使用します。public_content_rw_tpublic_content_rw_tタイプで作成したファイルおよびディレクトリーにラベルを付け、vsftpdで読み取りおよび書き込みの権限で共有します。Apache HTTP サーバー、Samba、NFS などのその他のサービスは、このタイプのラベルが付いたファイルにアクセスできます。各サービスのブール値は、このタイプのラベルが付いたファイルに書き込む前に有効にしておく必要があります。
15.2. ブール値 リンクのコピーリンクがクリップボードにコピーされました!
ftpd_anon_write- このブール値を無効にすると、
vsftpdは、public_content_rw_tタイプでラベル付けされたファイルおよびディレクトリーに書き込みできなくなります。このブール値を有効にすると、ユーザーは FTP を使用してファイルをアップロードできます。ファイルをアップロードするディレクトリーには、public_content_rw_tタイプにラベルを付け、それに応じて Linux の権限を設定する必要があります。 ftpd_full_access- このブール値が有効になると、アクセスの制御に Linux (DAC) の権限のみが使用され、認証されたユーザーは、
public_content_tまたはpublic_content_rw_tタイプのラベルが付いていないファイルへの読み取りと書き込みが可能になります。 ftpd_use_cifs- ブール値を有効にすると、
vsftpdは、cifs_tタイプでラベル付けされたファイルおよびディレクトリーにアクセスできるようになるため、このブール値を有効にすると、vsftpdを介して、Samba を使用してマウントしたファイルシステムを共有できます。 ftpd_use_nfs- ブール値を有効にすると、
vsftpdはnfs_tタイプでラベル付けされたファイルとディレクトリーにアクセスできるようになるため、このブール値を使用すると、vsftpd経由で NFS を使用してマウントしたファイルシステムを共有できます。 ftpd_connect_db- FTP デーモンによるデータベースへの接続の開始を許可します。
httpd_enable_ftp_serverhttpdデーモンが FTP ポートをリッスンし、FTP サーバーとして機能できるようにします。tftp_anon_write- ブール値を有効にすると、特別なアクセス制限がない共通ファイル用に予約されている領域など、公開ディレクトリーへの TFTP アクセスが許可されます。
ftp_home_dir ブール値が提供されません。詳細は、Red Hat Enterprise Linux 7.3 Release Notes ドキュメントを参照してください。
getsebool -a | grep service_name
~]$ getsebool -a | grep service_name
sepolicy booleans -b boolean_name
~]$ sepolicy booleans -b boolean_name
sepolicy ユーティリティーを提供する追加の policycoreutils-devel パッケージが必要であることに注意してください。
第16章 ネットワークファイルシステム リンクのコピーリンクがクリップボードにコピーされました!
rpm -q nfs-utils package nfs-utils is not installed
~]$ rpm -q nfs-utils
package nfs-utils is not installed
yum ユーティリティーを使って root でインストールします。
yum install nfs-utils
~]# yum install nfs-utils
16.1. NFS と SELinux リンクのコピーリンクがクリップボードにコピーされました!
nfsd プロセスを除き、デフォルトで制限されています。nfsd プロセスは、制限のない kernel_t ドメインタイプでラベル付けされています。SELinux ポリシーでは、NFS がデフォルトでファイルを共有できるようになっています。また、クライアントとサーバー間で SELinux ラベルを渡すことに対応しています。これにより、NFS ボリュームにアクセスする制限されたドメインに対するセキュリティー制御が強化されます。たとえば、ホームディレクトリーを NFS ボリュームに設定している場合は、ホームディレクトリーにのみアクセスでき、ボリューム上のその他のディレクトリーにはアクセスできないように、限定ドメインを指定できます。同様に、セキュア仮想化などのアプリケーションは、NFS ボリュームでイメージファイルのラベルを設定できるため、仮想マシンの分離レベルが向上します。
16.2. タイプ リンクのコピーリンクがクリップボードにコピーされました!
nfs_t タイプを使用します。root ユーザーは、mount オプションを使用して、デフォルトのタイプを上書きできます。NFS では、以下のタイプが使用されます。異なるタイプを使用すると、柔軟なアクセスを設定できます。
var_lib_nfs_t- このタイプは、
/var/lib/nfs/ディレクトリーにコピーまたは作成される既存ファイルおよび新規ファイルに使用されます。このタイプは、通常の操作で変更する必要はありません。変更をデフォルト設定に戻すには、root でrestorecon -R -v /var/lib/nfs を実行します。 nfsd_exec_t/usr/sbin/rpc.nfsdファイルには、nfsd_exec_tのラベルが付けられています。また、他のシステム実行ファイルおよびライブラリーも NFS に関連しています。この種類のファイルにはラベルを付けないでください。nfsd_exec_tは、nfsd_tに移行します。
16.3. ブール値 リンクのコピーリンクがクリップボードにコピーされました!
ftpd_use_nfs- このブール値を有効にすると、
ftpdデーモンは NFS ボリュームにアクセスできるようになります。 cobbler_use_nfs- このブール値を有効にすると、
cobblerdデーモンは NFS ボリュームにアクセスできるようになります。 git_system_use_nfs- このブール値を有効にすると、Git システムデーモンは、NFS ボリュームのシステム共有リポジトリーを読み取ることができます。
httpd_use_nfs- このブール値を有効にすると、
httpdデーモンは、NFS ボリュームに保存されているファイルにアクセスできるようになります。 samba_share_nfs- このブール値を有効にすると、
smbdデーモンが NFS ボリュームを共有できるようになります。このブール値を無効にすると、smbdは、Samba を使用して NFS 共有に完全にアクセスできなくなります。 sanlock_use_nfs- これを有効にすると、ブール値により、
sanlockデーモンが NFS ボリュームを管理できるようになります。 sge_use_nfs- このブール値を有効にすると、
sgeスケジューラーは NFS ボリュームにアクセスできるようになります。 use_nfs_home_dirs- このブール値を有効にすると、NFS ホームディレクトリーのサポートが追加されます。
virt_use_nfs- このブール値を有効にすると、信頼できる仮想ゲストが NFS ボリュームのファイルを管理できるようになります。
xen_use_nfs- このブール値を有効にすると、
Xenは NFS ボリュームのファイルを管理できるようになります。 git_cgi_use_nfs- このブール値を有効にすると、CGI (Git Common Gateway Interface) は NFS ボリュームにアクセスできるようになります。
getsebool -a | grep service_name
~]$ getsebool -a | grep service_name
sepolicy booleans -b boolean_name
~]$ sepolicy booleans -b boolean_name
sepolicy ユーティリティーを提供する追加の policycoreutils-devel パッケージが必要であることに注意してください。
16.4. 設定の例 リンクのコピーリンクがクリップボードにコピーされました!
16.4.1. SELinux ラベル付き NFS のサポートの有効化 リンクのコピーリンクがクリップボードにコピーされました!
nfs-srv で実行する必要があります。
- NFS サーバーが実行中の場合は、停止します。
systemctl stop nfs
[nfs-srv]# systemctl stop nfsCopy to Clipboard Copied! Toggle word wrap Toggle overflow サーバーが停止していることを確認します。systemctl status nfs nfs-server.service - NFS Server Loaded: loaded (/usr/lib/systemd/system/nfs-server.service; disabled) Active: inactive (dead)
[nfs-srv]# systemctl status nfs nfs-server.service - NFS Server Loaded: loaded (/usr/lib/systemd/system/nfs-server.service; disabled) Active: inactive (dead)Copy to Clipboard Copied! Toggle word wrap Toggle overflow /etc/sysconfig/nfsファイルを編集して、RPCNFSDARGSフラグを"-V 4.2"に設定します。# Optional arguments passed to rpc.nfsd. See rpc.nfsd(8) RPCNFSDARGS="-V 4.2"
# Optional arguments passed to rpc.nfsd. See rpc.nfsd(8) RPCNFSDARGS="-V 4.2"Copy to Clipboard Copied! Toggle word wrap Toggle overflow - サーバーを再起動して、サーバーが実行していることを確認します。この出力には以下の情報が含まれます。タイムスタンプのみが異なります。
systemctl start nfs
[nfs-srv]# systemctl start nfsCopy to Clipboard Copied! Toggle word wrap Toggle overflow systemctl status nfs nfs-server.service - NFS Server Loaded: loaded (/usr/lib/systemd/system/nfs-server.service; disabled) Active: active (exited) since Wed 2013-08-28 14:07:11 CEST; 4s ago
[nfs-srv]# systemctl status nfs nfs-server.service - NFS Server Loaded: loaded (/usr/lib/systemd/system/nfs-server.service; disabled) Active: active (exited) since Wed 2013-08-28 14:07:11 CEST; 4s agoCopy to Clipboard Copied! Toggle word wrap Toggle overflow - クライアントで、NFS サーバーをマウントします。
mount -o v4.2 server:mntpoint localmountpoint
[nfs-client]# mount -o v4.2 server:mntpoint localmountpointCopy to Clipboard Copied! Toggle word wrap Toggle overflow - すべての SELinux ラベルが、サーバーからクライアントに正常に渡されるようになりました。
ls -Z file -rw-rw-r--. user user unconfined_u:object_r:svirt_image_t:s0 file ls -Z file -rw-rw-r--. user user unconfined_u:object_r:svirt_image_t:s0 file
[nfs-srv]$ ls -Z file -rw-rw-r--. user user unconfined_u:object_r:svirt_image_t:s0 file [nfs-client]$ ls -Z file -rw-rw-r--. user user unconfined_u:object_r:svirt_image_t:s0 fileCopy to Clipboard Copied! Toggle word wrap Toggle overflow
第17章 BIND (Berkeley Internet Name Domain) リンクのコピーリンクがクリップボードにコピーされました!
named デーモンを使用して名前解決サービスを実行します。BIND を使用すると、数値アドレスではなく、名前を使用してコンピューターのリソースやサービスを特定できます。
rpm -q bind package bind is not installed
~]$ rpm -q bind
package bind is not installed
yum ユーティリティーを使用し、インストールします。
yum install bind
~]# yum install bind
17.1. BIND および SELinux リンクのコピーリンクがクリップボードにコピーされました!
/var/named/slaves/ ディレクトリー、/var/named/dynamic/ ディレクトリー、および /var/named/data/ ディレクトリーに対するデフォルトのパーミッションにより、ゾーン転送と動的 DNS 更新を使用したゾーンファイルの更新が可能になります。/var/named/ のファイルには、マスターゾーンファイルに使用される named_zone_t タイプがラベル付けされています。
/var/named/slaves/ に配置するように/etc/named.conf ファイルを設定します。以下は、/var/named/slaves/ に testdomain.com のゾーンファイルを保存するスレーブ DNS サーバーの /etc/named.conf のドメインエントリーの例です。
named_zone_t のラベルが付いている場合は、ゾーン転送を許可し、動的 DNS によるゾーンファイルの更新を許可するために、named_write_master_zones ブール値を有効にする必要があります。また、named ユーザーまたはグループに読み取り、書き込み、実行のアクセスを許可するには、親ディレクトリーのモードを変更する必要があります。
/var/named/ のゾーンファイルにnamed_cache_t タイプのラベルが付いている場合は、ファイルシステムの再ラベル付け、または実行中の restorecon -R /var/ により、ファイルシステムのタイプが named_zone_t に変更されます。
17.2. タイプ リンクのコピーリンクがクリップボードにコピーされました!
named_zone_t- マスターゾーンファイルに使用されます。その他のサービスでは、このタイプのファイルを変更できません。
namedデーモンは、named_write_master_zonesブール値が有効になっている場合に限り、このタイプのファイルを変更できます。 named_cache_t- デフォルトでは、
namedは、このタイプのラベルが付いたファイルに書き込むことができます。ブール値は追加されません。/var/named/slaves/ディレクトリー、/var/named/dynamic/ディレクトリー、および/var/named/data/ディレクトリーでコピーまたは作成されたファイルには、named_cache_tのタイプに応じて自動的にラベルが付けられます。 named_var_run_t/var/run/bind/ディレクトリー、/var/run/named/ディレクトリー、および/var/run/unbound/ディレクトリーでコピーまたは作成されたファイルには、named_var_run_tのタイプに応じて自動的にラベルが付けられます。named_conf_t- BIND 関連の設定ファイルは、通常
/etcディレクトリーに保存され、自動的にnamed_conf_tのタイプのラベルが付けられます。 named_exec_t- BIND 関連の実行ファイルは、通常
/usr/sbin/ディレクトリーに保存され、自動的にnamed_exec_tタイプのラベルが付けられます。 named_log_t- BIND 関連のログファイルは、通常
/var/log/ディレクトリーに保存され、自動的にnamed_log_tのタイプのラベルが付けられます。 named_unit_file_t/usr/lib/systemd/system/ディレクトリー内の実行可能な BIND 関連ファイルには、named_unit_file_tのタイプに応じて自動的にラベルが付けられます。
17.3. ブール値 リンクのコピーリンクがクリップボードにコピーされました!
named_write_master_zones- このブール値を無効にすると、
namedは、named_zone_tタイプでラベル付けされたゾーンファイルまたはディレクトリーに書き込みできなくなります。デーモンは通常、ゾーンファイルに書き込む必要はありません。ただし、必要な場合、またはセカンダリーサーバーがゾーンファイルに書き込む必要がある場合は、このブール値を有効にしてこのアクションを許可します named_tcp_bind_http_port- このブール値を有効にすると、BIND による Apache ポートのバインドが可能になります。
getsebool -a | grep service_name
~]$ getsebool -a | grep service_name
sepolicy booleans -b boolean_name
~]$ sepolicy booleans -b boolean_name
sepolicy ユーティリティーを提供する追加の policycoreutils-devel パッケージが必要であることに注意してください。
17.4. 設定の例 リンクのコピーリンクがクリップボードにコピーされました!
17.4.1. 動的 DNS リンクのコピーリンクがクリップボードにコピーされました!
/var/named/dynamic/ ディレクトリーを使用します。このディレクトリーで作成またはコピーしたファイルは、named による書き込みを許可する Linux 権限を継承します。このようなファイルには named_cache_t タイプのラベルが付いているため、SELinux では、named がそれらに書き込むことができます。
/var/named/dynamic/ のゾーンファイルに named_zone_t タイプのラベルが付いている場合は、マージ前に更新を最初にジャーナルに書き込む必要があるため、動的 DNS 更新が一定期間成功しないことがあります。ジャーナルのマージを試行する際に、ゾーンファイルにnamed_zone_t タイプのラベルが付けられている場合は、以下のようなエラーがログに記録されます。
named[PID]: dumping master file: rename: /var/named/dynamic/zone-name: permission denied
named[PID]: dumping master file: rename: /var/named/dynamic/zone-name: permission denied
setroubleshoot: SELinux is preventing named (named_t) "unlink" to zone-name (named_zone_t)
setroubleshoot: SELinux is preventing named (named_t) "unlink" to zone-name (named_zone_t)
restorecon ユーティリティーを使用します。
restorecon -R -v /var/named/dynamic
~]# restorecon -R -v /var/named/dynamic
第18章 同時バージョン管理システム リンクのコピーリンクがクリップボードにコピーされました!
rpm -q cvs package cvs is not installed
~]$ rpm -q cvs
package cvs is not installed
yum ユーティリティーを使って root でインストールします。
yum install cvs
~]# yum install cvs
18.1. CVS と SELinux リンクのコピーリンクがクリップボードにコピーされました!
cvs デーモンは、cvs_t のタイプにラベルを付けて実行します。Red Hat Enterprise Linux におけるデフォルトでは、CVS は特定のディレクトリーの読み取りと書き込みのみを許可されています。ラベル cvs_data_t は、cvs が読み取りおよび書き込みを行う領域を定義します。SELinux で CVS を使用する場合は、クライアントが CVS データ用に予約された領域に完全アクセスするために、正しいラベルの割り当てが必須となります。
18.2. タイプ リンクのコピーリンクがクリップボードにコピーされました!
cvs_data_t- このタイプは、CVS リポジトリーのデータに使用されます。CVS は、このタイプのデータがある場合に限り、そのデータへの完全アクセスを取得できます。
cvs_exec_t- このタイプは、
/usr/bin/cvsバイナリーに使用されます。
18.3. ブール値 リンクのコピーリンクがクリップボードにコピーされました!
cvs_read_shadow- このブール値により、
cvsデーモンはユーザー認証用の/etc/shadowファイルにアクセスできるようになります。
getsebool -a | grep service_name
~]$ getsebool -a | grep service_name
sepolicy booleans -b boolean_name
~]$ sepolicy booleans -b boolean_name
sepolicy ユーティリティーを提供する追加の policycoreutils-devel パッケージが必要であることに注意してください。
18.4. 設定の例 リンクのコピーリンクがクリップボードにコピーされました!
18.4.1. CDK の設定 リンクのコピーリンクがクリップボードにコピーされました!
192.168.1.1 の cvs-srv の CVS サーバーと、ホスト名が cvs-client で IP アドレスが 192.168.1.100 のクライアント の 2 つのホストが使用されます。両方のホストが同じサブネット (192.168.1.0/24) にあります。これは一例で、cvs パッケージと xinetd パッケージがインストールされ、SELinux targeted ポリシーが使用され、SELinux が実施モードで実行されていることを前提としています。
cvs-srv 上で実行されているはずです。
- この例では、cvs パッケージと xinetd パッケージが必要です。パッケージがインストールされていることを確認します。
rpm -q cvs xinetd package cvs is not installed package xinetd is not installed
[cvs-srv]$ rpm -q cvs xinetd package cvs is not installed package xinetd is not installedCopy to Clipboard Copied! Toggle word wrap Toggle overflow インストールされていない場合は、root でyumユーティリティーを使用してインストールします。yum install cvs xinetd
[cvs-srv]# yum install cvs xinetdCopy to Clipboard Copied! Toggle word wrap Toggle overflow - root で次のコマンドを実行して、
CVSという名前のグループを作成します。groupadd CVS
[cvs-srv]# groupadd CVSCopy to Clipboard Copied! Toggle word wrap Toggle overflow これは、system-config-usersユーティリティーを使用しても実行できます。 - ユーザー名が
cvsuserのユーザーを作成し、作成したユーザーを CVS グループのメンバーにします。これは、system-config-usersを使用して実行できます。 /etc/servicesを編集し、CVS サーバーに、以下のようなコメント解除されたエントリーがあることを確認します。cvspserver 2401/tcp # CVS client/server operations cvspserver 2401/udp # CVS client/server operations
cvspserver 2401/tcp # CVS client/server operations cvspserver 2401/udp # CVS client/server operationsCopy to Clipboard Copied! Toggle word wrap Toggle overflow - ファイルシステムの root 領域に CVS リポジトリーを作成します。SELinux を使用する場合は、root ファイルシステムにリポジトリーを置いて、他のサブディレクトリーに影響を及ぼさずに再帰的なラベルを付けられるようにすることが最善の方法です。たとえば、root で、リポジトリーを格納する
/cvs/ディレクトリーを作成します。mkdir /cvs
[root@cvs-srv]# mkdir /cvsCopy to Clipboard Copied! Toggle word wrap Toggle overflow - すべてのユーザーに、
/cvs/ディレクトリーの完全なパーミッションを付与します。chmod -R 777 /cvs
[root@cvs-srv]# chmod -R 777 /cvsCopy to Clipboard Copied! Toggle word wrap Toggle overflow 警告これは単なる例で、このような権限は実稼働システムでは使用できません。 /etc/xinetd.d/cvsファイルを編集し、CVS セクションがコメント解除されており、/cvs/ディレクトリーを使用するように設定されていることを確認します。ファイルは以下のようになります。Copy to Clipboard Copied! Toggle word wrap Toggle overflow xinetdデーモンを起動します。systemctl start xinetd.service
[cvs-srv]# systemctl start xinetd.serviceCopy to Clipboard Copied! Toggle word wrap Toggle overflow system-config-firewallユーティリティーを使用して、ポート 2401 で TCP 経由での着信接続を許可する規則を追加します。- クライアントで、
cvsuserユーザーとして以下のコマンドを実行します。cvs -d /cvs init
[cvsuser@cvs-client]$ cvs -d /cvs initCopy to Clipboard Copied! Toggle word wrap Toggle overflow - この時点で、CVS は設定されていますが、SELinux はログインとファイルアクセスを拒否します。これを実証するには、
cvs-clientで$CVSROOT変数を設定し、リモートでログインを試みます。cvs-clientでは、以下の手順を行う必要があります。Copy to Clipboard Copied! Toggle word wrap Toggle overflow SELinux がアクセスをブロックしました。SELinux にこのアクセスを許可させるために、次のステップはcvs-srvで実行されることになっています。 /cvs/ディレクトリーのコンテキストを root 権限で変更し、/cvs/ディレクトリーの既存データーおよび新規データーに再帰的にラベル付けするcvs_data_tタイプを指定します。semanage fcontext -a -t cvs_data_t '/cvs(/.*)?' restorecon -R -v /cvs
[root@cvs-srv]# semanage fcontext -a -t cvs_data_t '/cvs(/.*)?' [root@cvs-srv]# restorecon -R -v /cvsCopy to Clipboard Copied! Toggle word wrap Toggle overflow - クライアント
cvs-clientは、このリポジトリーにログインし、すべての CVS リソースにアクセスできるようになります。Copy to Clipboard Copied! Toggle word wrap Toggle overflow
第19章 Squid キャッシングプロキシー リンクのコピーリンクがクリップボードにコピーされました!
rpm -q squid package squid is not installed
~]$ rpm -q squid
package squid is not installed
yum ユーティリティーを使って root でインストールします。
yum install squid
~]# yum install squid
19.1. Squid キャッシングプロキシーおよび SELinux リンクのコピーリンクがクリップボードにコピーされました!
- getenforce コマンドを実行して、SELinux が Enforcing モードで実行されていることを確認します。
getenforce Enforcing
~]$ getenforce EnforcingCopy to Clipboard Copied! Toggle word wrap Toggle overflow SELinux が Enforcing モードで実行されていると、このコマンドはEnforcingを返します。 - root で次のコマンドを実行して、
squidデーモンを起動します。systemctl start squid.service
~]# systemctl start squid.serviceCopy to Clipboard Copied! Toggle word wrap Toggle overflow サービスが実行中であることを確認します。出力には以下の情報が含まれている必要があります (タイムスタンプのみは異なります)。systemctl status squid.service squid.service - Squid caching proxy Loaded: loaded (/usr/lib/systemd/system/squid.service; disabled) Active: active (running) since Mon 2013-08-05 14:45:53 CEST; 2s ago
~]# systemctl status squid.service squid.service - Squid caching proxy Loaded: loaded (/usr/lib/systemd/system/squid.service; disabled) Active: active (running) since Mon 2013-08-05 14:45:53 CEST; 2s agoCopy to Clipboard Copied! Toggle word wrap Toggle overflow squidプロセスを表示するには、次のコマンドを実行します。ps -eZ | grep squid system_u:system_r:squid_t:s0 27018 ? 00:00:00 squid system_u:system_r:squid_t:s0 27020 ? 00:00:00 log_file_daemon
~]$ ps -eZ | grep squid system_u:system_r:squid_t:s0 27018 ? 00:00:00 squid system_u:system_r:squid_t:s0 27020 ? 00:00:00 log_file_daemonCopy to Clipboard Copied! Toggle word wrap Toggle overflow squidプロセスに関連付けられた SELinux コンテキストはsystem_u:system_r:squid_t:s0です。コンテキストの 2 番目の部分squid_tはタイプです。タイプは、プロセスのドメインとファイルのタイプを定義します。この例では、squid プロセスがsquid_tドメインで実行しています。
squid_tなど) で実行されるプロセスが、ファイル、その他のプロセス、およびシステム一般とどのように対話するかを定義します。squid によるアクセスを可能にするには、ファイルが正しくラベル付けされている必要があります。
/etc/squid/squid.conf ファイルが、デフォルトの TCP ポート 3128、3401、または 4827 以外のポートを squid がリッスンするように設定されている場合は、semanage port コマンドを使用して、必要なポート番号を SELinux ポリシー設定に追加する必要があります。以下の例では、SELinux ポリシー設定で最初に定義されていないポートをリッスンするように squid を設定すると、サーバーが起動しなくなります。また、この例では、ポリシーで定義されていない標準以外のポートをデーモンが正常にリッスンできるように SELinux システムを設定する方法も示しています。この例では、squid パッケージがインストールされていることを前提としています。この例では、各コマンドを root ユーザーとして実行します。
squidデーモンが実行していないことを確認します。systemctl status squid.service squid.service - Squid caching proxy Loaded: loaded (/usr/lib/systemd/system/squid.service; disabled) Active: inactive (dead)
~]# systemctl status squid.service squid.service - Squid caching proxy Loaded: loaded (/usr/lib/systemd/system/squid.service; disabled) Active: inactive (dead)Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力が異なる場合は、プロセスを停止します。systemctl stop squid.service
~]# systemctl stop squid.serviceCopy to Clipboard Copied! Toggle word wrap Toggle overflow squidがリッスンできるポートを表示するには、以下のコマンドを実行します。semanage port -l | grep -w -i squid_port_t squid_port_t tcp 3401, 4827 squid_port_t udp 3401, 4827
~]# semanage port -l | grep -w -i squid_port_t squid_port_t tcp 3401, 4827 squid_port_t udp 3401, 4827Copy to Clipboard Copied! Toggle word wrap Toggle overflow - root で
/etc/squid/squid.confを編集します。http_portオプションを設定して、squid用の SELinux ポリシー設定で設定されていないポートのリストを表示するようにします。この例では、デーモンがポート 10000 をリッスンするように設定されています。# Squid normally listens to port 3128 http_port 10000
# Squid normally listens to port 3128 http_port 10000Copy to Clipboard Copied! Toggle word wrap Toggle overflow - setsebool コマンドを実行して、
squid_connect_anyのブール値が off に設定されていることを確認します。これにより、squidが特定のポートでのみ動作するようになります。setsebool -P squid_connect_any 0
~]# setsebool -P squid_connect_any 0Copy to Clipboard Copied! Toggle word wrap Toggle overflow squidデーモンを起動します。systemctl start squid.service Job for squid.service failed. See 'systemctl status squid.service' and 'journalctl -xn' for details.
~]# systemctl start squid.service Job for squid.service failed. See 'systemctl status squid.service' and 'journalctl -xn' for details.Copy to Clipboard Copied! Toggle word wrap Toggle overflow 以下のような SELinux 拒否メッセージが記録されます。localhost setroubleshoot: SELinux is preventing the squid (squid_t) from binding to port 10000. For complete SELinux messages. run sealert -l 97136444-4497-4fff-a7a7-c4d8442db982
localhost setroubleshoot: SELinux is preventing the squid (squid_t) from binding to port 10000. For complete SELinux messages. run sealert -l 97136444-4497-4fff-a7a7-c4d8442db982Copy to Clipboard Copied! Toggle word wrap Toggle overflow - SELinux で、
httpdがポート 10000 をリッスンできるようにするには、以下のコマンドが必要です。semanage port -a -t squid_port_t -p tcp 10000
~]# semanage port -a -t squid_port_t -p tcp 10000Copy to Clipboard Copied! Toggle word wrap Toggle overflow squidを再起動して、新しいポートでリッスンするようにします。systemctl start squid.service
~]# systemctl start squid.serviceCopy to Clipboard Copied! Toggle word wrap Toggle overflow - 現在、SELinux は、標準以外のポート (この例では TCP 10000) で Squid がリッスンできるように設定されており、このポートで正常に起動します。
19.2. タイプ リンクのコピーリンクがクリップボードにコピーされました!
httpd_squid_script_exec_t- このタイプは、
cachemgr.cgiなどのユーティリティーに使用されます。このユーティリティーは、Squid とその設定に関するさまざまな統計情報を提供します。 squid_cache_t/etc/squid/squid.confのcache_dirディレクティブで定義されているように、Squid によりキャッシュされるデータにこのタイプを使用します。初期設定では、/var/cache/squid/ディレクトリーおよび/var/spool/squid/ディレクトリーに作成またはコピーされるファイルには、squid_cache_tタイプに応じたラベルが付けられています。/var/squidGuard/ディレクトリーに作成またはコピーされたsquid用の squidGuard URL リダイレクタプラグインには、squid_cache_tタイプのラベルが付けられています。Squid は、キャッシュされたデータに対して、このタイプのラベルが付いたファイルおよびディレクトリーのみを使用できます。squid_conf_t- このタイプは、Squid が設定に使用するディレクトリーおよびファイルに使用されます。既存ファイル、または
/etc/squid/ディレクトリーおよび/usr/share/squid/ディレクトリーで作成またはコピーされたファイルには、エラーメッセージやアイコンなどを含む、このタイプのラベルが付けられています。 squid_exec_t- このタイプは、
squidのバイナリー (/usr/sbin/squid) に使用されます。 squid_log_t- このタイプはログに使用されます。既存のファイル、
/var/log/squid/または/var/log/squidGuard/に作成またはコピーされたファイルには、この種類のラベルを付ける必要があります。 squid_initrc_exec_t- このタイプは、
/etc/rc.d/init.d/squidにあるsquidを起動するために必要な初期化ファイルに使用されます。 squid_var_run_t- このタイプは、
/var/run/ディレクトリーのファイル、とりわけ/var/run/squid.pidという名前のプロセス ID (PID) で使用されます。この PID は、実行時に Squid により作成されます。
19.3. ブール値 リンクのコピーリンクがクリップボードにコピーされました!
squid_connect_any- このブール値を有効にすると、Squid は任意のポートでリモートホストへの接続を開始できます。
squid_use_tproxy- これを有効にすると、ブール値により、Squid を透過プロキシーとして実行できます。
getsebool -a | grep service_name
~]$ getsebool -a | grep service_name
sepolicy booleans -b boolean_name
~]$ sepolicy booleans -b boolean_name
sepolicy ユーティリティーを提供する追加の policycoreutils-devel パッケージが必要であることに注意してください。
19.4. 設定の例 リンクのコピーリンクがクリップボードにコピーされました!
19.4.1. 標準以外のポートへの Squid 接続 リンクのコピーリンクがクリップボードにコピーされました!
- squidがインストールされていることを確認します。
rpm -q squid package squid is not installed
~]$ rpm -q squid package squid is not installedCopy to Clipboard Copied! Toggle word wrap Toggle overflow このパッケージがインストールされていない場合は、root でyumユーティリティーを使用してインストールします。yum install squid
~]# yum install squidCopy to Clipboard Copied! Toggle word wrap Toggle overflow - 主な設定ファイル
/etc/squid/squid.confを編集し、cache_dirディレクティブがコメント解除されており、以下のようになっていることを確認します。cache_dir ufs /var/spool/squid 100 16 256
cache_dir ufs /var/spool/squid 100 16 256Copy to Clipboard Copied! Toggle word wrap Toggle overflow この行は、この例で使用するcache_dirディレクティブのデフォルト設定を指定します。これは、Squid ストレージ形式 (ufs)、キャッシュが存在するシステムのディレクトリー (/var/spool/squid)、キャッシュに使用するディスク領域の量 (100)、および作成する第 1 レベルおよび第 2 レベルのキャッシュディレクトリーの数 (それぞれ16および256) で設定されます。 - 同じ設定ファイルで、
http_access allow localnetディレクティブのコメントが解除されていることを確認します。これにより、Red Hat Enterprise Linux への Squid のデフォルトインストールで自動的に設定されるlocalnetACL からのトラフィックが許可されます。これにより、既存の RFC1918 ネットワークのクライアントマシンがプロキシーを介してアクセスできるようになります。これは、この単純な例としては十分です。 - 同じ設定ファイルで、
visible_hostnameディレクティブがコメント解除され、マシンのホスト名に設定されていることを確認します。この値は、ホストの完全修飾ドメイン名 (FQDN) にする必要があります。visible_hostname squid.example.com
visible_hostname squid.example.comCopy to Clipboard Copied! Toggle word wrap Toggle overflow - root で、以下のコマンドを実行して、
squidデーモンを起動します。squidを初めて起動する際に、このコマンドは、cache_dirディレクティブで指定した方法でキャッシュディレクトリーを初期化し、デーモンを起動します。systemctl start squid.service
~]# systemctl start squid.serviceCopy to Clipboard Copied! Toggle word wrap Toggle overflow squidが正常に起動していることを確認します。この出力には、以下の情報が含まれます。タイムスタンプのみが異なります。systemctl status squid.service squid.service - Squid caching proxy Loaded: loaded (/usr/lib/systemd/system/squid.service; disabled) Active: active (running) since Thu 2014-02-06 15:00:24 CET; 6s ago
~]# systemctl status squid.service squid.service - Squid caching proxy Loaded: loaded (/usr/lib/systemd/system/squid.service; disabled) Active: active (running) since Thu 2014-02-06 15:00:24 CET; 6s agoCopy to Clipboard Copied! Toggle word wrap Toggle overflow squid_var_run_t値からわかるように、squidプロセス ID (PID) が制限付きサービスとして起動していることを確認します。ls -lZ /var/run/squid.pid -rw-r--r--. root squid unconfined_u:object_r:squid_var_run_t:s0 /var/run/squid.pid
~]# ls -lZ /var/run/squid.pid -rw-r--r--. root squid unconfined_u:object_r:squid_var_run_t:s0 /var/run/squid.pidCopy to Clipboard Copied! Toggle word wrap Toggle overflow - この時点で、以前に設定した
localnetACL に接続したクライアントマシンは、このホストの内部インターフェイスをプロキシーとして正常に使用できます。これは、すべての一般的な Web ブラウザーの設定で、またはシステム全体で設定できます。Squid はターゲットマシン (TCP 3128) のデフォルトポートでリッスンしていますが、ターゲットマシンは共通ポートを介したインターネット上の他のサービスへの発信接続のみを許可します。これは、SELinux 自体が定義するポリシーです。次の手順で示すように、SELinux は標準以外のポートへのアクセスを拒否します。 - クライアントが、TCP ポート 10000 でリッスンしている Web サイトなどの Squid プロキシーを使用して、標準以外のポートを使用して要求を行うと、以下のような拒否がログに記録されます。
SELinux is preventing the squid daemon from connecting to network port 10000
SELinux is preventing the squid daemon from connecting to network port 10000Copy to Clipboard Copied! Toggle word wrap Toggle overflow - これを可能にするには、
squid_connect_anyブール値を変更する必要があります。これは、デフォルトで無効になっているためです。setsebool -P squid_connect_any on
~]# setsebool -P squid_connect_any onCopy to Clipboard Copied! Toggle word wrap Toggle overflow 注記再起動後も、setsebool の変更を保持したくない場合は、-Pオプションを使用しないでください。 - Squid がクライアントに代わってポートへの接続を開始できるようになったため、クライアントはインターネットの標準以外のポートにアクセスできるようになりました。
第20章 MariaDB (MySQL の代替) リンクのコピーリンクがクリップボードにコピーされました!
mysqld) と、多くのクライアントプログラムおよびライブラリーで設定されます。[18]
rpm -q mariadb-server package mariadb-server is not installed
~]$ rpm -q mariadb-server
package mariadb-server is not installed
yum ユーティリティーを使用してインストールします。
yum install mariadb-server
~]# yum install mariadb-server
20.1. MariaDB と SELinux リンクのコピーリンクがクリップボードにコピーされました!
- getenforce コマンドを実行して、SELinux が Enforcing モードで実行されていることを確認します。
getenforce Enforcing
~]$ getenforce EnforcingCopy to Clipboard Copied! Toggle word wrap Toggle overflow SELinux が Enforcing モードで実行されていると、このコマンドはEnforcingを返します。 - root で次のコマンドを入力して、
mariadbを起動します。systemctl start mariadb.service
~]# systemctl start mariadb.serviceCopy to Clipboard Copied! Toggle word wrap Toggle overflow サービスが実行中であることを確認します。出力には以下の情報が含まれている必要があります (タイムスタンプのみは異なります)。systemctl status mariadb.service mariadb.service - MariaDB database server Loaded: loaded (/usr/lib/systemd/system/mariadb.service; disabled) Active: active (running) since Mon 2013-08-05 11:20:11 CEST; 3h 28min ago
~]# systemctl status mariadb.service mariadb.service - MariaDB database server Loaded: loaded (/usr/lib/systemd/system/mariadb.service; disabled) Active: active (running) since Mon 2013-08-05 11:20:11 CEST; 3h 28min agoCopy to Clipboard Copied! Toggle word wrap Toggle overflow mysqldプロセスを表示するには、次のコマンドを実行します。ps -eZ | grep mysqld system_u:system_r:mysqld_safe_t:s0 12831 ? 00:00:00 mysqld_safe system_u:system_r:mysqld_t:s0 13014 ? 00:00:00 mysqld
~]$ ps -eZ | grep mysqld system_u:system_r:mysqld_safe_t:s0 12831 ? 00:00:00 mysqld_safe system_u:system_r:mysqld_t:s0 13014 ? 00:00:00 mysqldCopy to Clipboard Copied! Toggle word wrap Toggle overflow mysqldプロセスに関連付けられた SELinux コンテキストはsystem_u:system_r:mysqld_t:s0です。コンテキストの 2 番目の部分mysqld_tはタイプです。タイプは、プロセスのドメインとファイルのタイプを定義します。この例では、mysqldプロセスがmysqld_tドメインで実行しています。
20.2. タイプ リンクのコピーリンクがクリップボードにコピーされました!
mysqld では、以下のタイプが使用されます。異なるタイプを使用すると、柔軟なアクセスを設定できます。
mysqld_db_t- このタイプは、MariaDB データベースの場所に使用されます。Red Hat Enterprise Linux では、データベースのデフォルトの場所は
/var/lib/mysql/ディレクトリーですが、これは変更できます。MariaDB データベースの場所を変更する場合は、このタイプのラベルを、新しい場所に作成する必要があります。デフォルトのデータベースの場所を変更する方法と、新しいセクションに適切なラベルを付ける方法は、「MariaDB によるデータベースの場所の変更」 の例を参照してください。 mysqld_etc_t- このタイプは、MariaDB のメイン設定ファイル
/etc/my.cnfおよび/etc/mysql/ディレクトリー内のその他の設定ファイルに使用されます。 mysqld_exec_t- このタイプは、
/usr/libexec/mysqldにあるmysqldバイナリーに使用されます。これは、Red Hat Enterprise Linux における MariaDB バイナリーのデフォルトの場所です。他のシステムは、このバイナリーを/usr/sbin/mysqldに置くことができます。このバイナリーには、このタイプのラベルを付ける必要があります。 mysqld_unit_file_t- このタイプは、Red Hat Enterprise Linux のデフォルトでは、
/usr/lib/systemd/system/ディレクトリーにある実行ファイル MariaDB 関連のファイルに使用されます。 mysqld_log_t- MariaDB のログには、適切な操作を行うためにこのタイプのラベルを付ける必要があります。
mysql.*ワイルドカードに一致する/var/log/ディレクトリー内のすべてのログファイルに、この種類のラベルを付ける必要があります。 mysqld_var_run_t- このタイプは、
/var/run/mariadb/ディレクトリーのファイル、特に、実行時にmysqldデーモンにより作成される/var/run/mariadb/mariadb.pidという名前のプロセス ID (PID)で使用されます。このタイプは、/var/lib/mysql/mysql.sockなどの関連するソケットファイルにも使用されます。このようなファイルには、限定サービスとして適切な操作を行うために、正しくラベルを付ける必要があります。
20.3. ブール値 リンクのコピーリンクがクリップボードにコピーされました!
selinuxuser_mysql_connect_enabled- このブール値を有効にすると、ローカルの MariaDB サーバーに接続できるようになります。
exim_can_connect_db- このブール値を有効にすると、
eximメーラーはデータベースサーバーへの接続を開始できます。 ftpd_connect_db- このブール値を有効にすると、
ftpデーモンがデータベースサーバーへの接続を開始できるようになります。 httpd_can_network_connect_db- Web サーバーがデータベースサーバーと通信するには、このブール値を有効にする必要があります。
getsebool -a | grep service_name
~]$ getsebool -a | grep service_name
sepolicy booleans -b boolean_name
~]$ sepolicy booleans -b boolean_name
sepolicy ユーティリティーを提供する追加の policycoreutils-devel パッケージが必要であることに注意してください。
20.4. 設定の例 リンクのコピーリンクがクリップボードにコピーされました!
20.4.1. MariaDB によるデータベースの場所の変更 リンクのコピーリンクがクリップボードにコピーされました!
/var/lib/mysql/ です。ここでは、SELinux がデフォルトであると想定している場所であるため、mysqld_db_t タイプを使用して、この領域はすでに適切にラベル付けされています。
auditd サービスが実行中であること、および /var/lib/mysql/ のデフォルトの場所に有効なデータベースがあることを前提としています。
mysqlのデフォルトのデータベースの場所の SELinux コンテキストを表示します。ls -lZ /var/lib/mysql drwx------. mysql mysql system_u:object_r:mysqld_db_t:s0 mysql
~]# ls -lZ /var/lib/mysql drwx------. mysql mysql system_u:object_r:mysqld_db_t:s0 mysqlCopy to Clipboard Copied! Toggle word wrap Toggle overflow これは、データベースファイルの場所のデフォルトのコンテキスト要素であるmysqld_db_tを示しています。このコンテキストを適切に機能させるために、この例で使用される新しいデータベースの場所に、手動で適用する必要があります。- 次のコマンドを入力し、
mysqldroot パスワードを入力して、利用可能なデータベースを表示します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow mariadb.serviceサービスを停止します。systemctl stop mariadb.service
~]# systemctl stop mariadb.serviceCopy to Clipboard Copied! Toggle word wrap Toggle overflow - データベースの新しい場所に、新しいディレクトリーを作成します。この例では、
/mysql/が使用されています。mkdir -p /mysql
~]# mkdir -p /mysqlCopy to Clipboard Copied! Toggle word wrap Toggle overflow - 古い場所から新しい場所に、データベースファイルをコピーします。
cp -R /var/lib/mysql/* /mysql/
~]# cp -R /var/lib/mysql/* /mysql/Copy to Clipboard Copied! Toggle word wrap Toggle overflow - mysql ユーザーおよびグループによるアクセスを許可するように、この場所の所有権を変更します。これにより、SELinux が引き続き監視する従来の Unix パーミッションが設定されます。
chown -R mysql:mysql /mysql
~]# chown -R mysql:mysql /mysqlCopy to Clipboard Copied! Toggle word wrap Toggle overflow - 以下のコマンドを実行すると、作成したディレクトリーの初期コンテキストが表示されます。
ls -lZ /mysql drwxr-xr-x. mysql mysql unconfined_u:object_r:usr_t:s0 mysql
~]# ls -lZ /mysql drwxr-xr-x. mysql mysql unconfined_u:object_r:usr_t:s0 mysqlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 新しく作成されたこのディレクトリーのコンテキストusr_tは、現在、MariaDB データベースファイルの場所として SELinux には適していません。コンテキストを変更すると、MariaDB はこのエリアで適切に機能できるようになります。 - テキストエディターで、MariaDB のメイン設定ファイル
/etc/my.cnfを開き、新しい場所を参照できるようにdatadirオプションを変更します。この例で入力する必要のある値は/mysqlです。[mysqld] datadir=/mysql
[mysqld] datadir=/mysqlCopy to Clipboard Copied! Toggle word wrap Toggle overflow このファイルを保存して終了します。 mariadb.serviceを起動します。サービスの起動に失敗し、拒否メッセージが/var/log/messagesファイルに記録されます。systemctl start mariadb.service Job for mariadb.service failed. See 'systemctl status mariadb.service' and 'journalctl -xn' for details.
~]# systemctl start mariadb.service Job for mariadb.service failed. See 'systemctl status mariadb.service' and 'journalctl -xn' for details.Copy to Clipboard Copied! Toggle word wrap Toggle overflow ただし、auditデーモンがsetroubleshootとともに実行されている場合は、拒否のログが/var/log/audit/audit.logに記録されます。SELinux is preventing /usr/libexec/mysqld "write" access on /mysql. For complete SELinux messages. run sealert -l b3f01aff-7fa6-4ebe-ad46-abaef6f8ad71
SELinux is preventing /usr/libexec/mysqld "write" access on /mysql. For complete SELinux messages. run sealert -l b3f01aff-7fa6-4ebe-ad46-abaef6f8ad71Copy to Clipboard Copied! Toggle word wrap Toggle overflow この拒否の理由は、MariaDB データファイルに対して/mysql/が正しくラベル付けされていないことです。SELinux により、MariaDB がusr_tとラベル付けされたコンテンツにアクセスできなくなりました。この問題を解決するには、以下の手順を実行します。- 以下のコマンドを入力して、
/mysql/のコンテキストマッピングを追加します。semanageユーティリティーは、デフォルトではインストールされないことに注意してください。同梱されていない場合は、policycoreutils-python をインストールしてください。semanage fcontext -a -t mysqld_db_t "/mysql(/.*)?"
~]# semanage fcontext -a -t mysqld_db_t "/mysql(/.*)?"Copy to Clipboard Copied! Toggle word wrap Toggle overflow - このマッピングは、
/etc/selinux/targeted/contexts/files/file_contexts.localファイルに書き込まれます。grep -i mysql /etc/selinux/targeted/contexts/files/file_contexts.local /mysql(/.*)? system_u:object_r:mysqld_db_t:s0
~]# grep -i mysql /etc/selinux/targeted/contexts/files/file_contexts.local /mysql(/.*)? system_u:object_r:mysqld_db_t:s0Copy to Clipboard Copied! Toggle word wrap Toggle overflow - これで
restoreconユーティリティーを使用して、このコンテキストマッピングを実行中のシステムに適用します。restorecon -R -v /mysql
~]# restorecon -R -v /mysqlCopy to Clipboard Copied! Toggle word wrap Toggle overflow /mysql/の場所には MariaDB の正しいコンテキストでラベル付けされ、mysqldが起動します。systemctl start mariadb.service
~]# systemctl start mariadb.serviceCopy to Clipboard Copied! Toggle word wrap Toggle overflow /mysql/に対してコンテキストが変更されたことを確認します。ls -lZ /mysql drwxr-xr-x. mysql mysql system_u:object_r:mysqld_db_t:s0 mysql
~]$ ls -lZ /mysql drwxr-xr-x. mysql mysql system_u:object_r:mysqld_db_t:s0 mysqlCopy to Clipboard Copied! Toggle word wrap Toggle overflow - この場所が変更され、ラベルが付けられ、
mysqldが正常に起動されました。この時点で、実行中のすべてのサービスをテストして、通常の操作を確認してください。
第21章 PostgreSQL リンクのコピーリンクがクリップボードにコピーされました!
rpm -q postgresql-server
~]# rpm -q postgresql-server
yum ユーティリティーを使用してインストールします。
yum install postgresql-server
~]# yum install postgresql-server
21.1. PostgreSQL および SELinux リンクのコピーリンクがクリップボードにコピーされました!
- getenforce コマンドを実行して、SELinux が Enforcing モードで実行されていることを確認します。
getenforce Enforcing
~]$ getenforce EnforcingCopy to Clipboard Copied! Toggle word wrap Toggle overflow SELinux が Enforcing モードで実行されていると、このコマンドはEnforcingを返します。 - root で次のコマンドを入力して、
postgresqlを起動します。systemctl start postgresql.service
~]# systemctl start postgresql.serviceCopy to Clipboard Copied! Toggle word wrap Toggle overflow サービスが実行中であることを確認します。出力には以下の情報が含まれている必要があります (タイムスタンプのみは異なります)。systemctl start postgresql.service postgresql.service - PostgreSQL database server Loaded: loaded (/usr/lib/systemd/system/postgresql.service; disabled) Active: active (running) since Mon 2013-08-05 14:57:49 CEST; 12s
~]# systemctl start postgresql.service postgresql.service - PostgreSQL database server Loaded: loaded (/usr/lib/systemd/system/postgresql.service; disabled) Active: active (running) since Mon 2013-08-05 14:57:49 CEST; 12sCopy to Clipboard Copied! Toggle word wrap Toggle overflow postgresqlプロセスを表示するには、次のコマンドを実行します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow postgresqlプロセスに関連付けられた SELinux コンテキストはsystem_u:system_r:postgresql_t:s0です。文脈の最後の部分であるpostgresql_tはタイプです。タイプは、プロセスのドメインとファイルのタイプを定義します。この例では、postgresqlプロセスがpostgresql_tドメインで実行しています。
21.2. タイプ リンクのコピーリンクがクリップボードにコピーされました!
postgresql では、以下のタイプが使用されます。異なるタイプを使用すると、柔軟なアクセスを設定できます。以下のリストでは、使用可能な場所全体を一致させるために、複数の正規表現を使用していることに注意してください。
postgresql_db_t- このタイプは複数の場所で使用されます。このタイプのラベルが付いた場所は、PostgreSQL のデータファイルに使用されます。
/usr/lib/pgsql/test/regres/usr/share/jonas/pgsql/var/lib/pgsql/data/var/lib/postgres(ql)?
postgresql_etc_t- このタイプは、
/etc/postgresql/ディレクトリーの設定ファイルに使用されます。 postgresql_exec_t- このタイプは複数の場所で使用されます。このタイプのラベルが付いた場所は、PostgreSQL のバイナリーに使用されます。
/usr/bin/initdb(.sepgsql)?/usr/bin/(se)?postgres/usr/lib(64)?/postgresql/bin/.*/usr/lib(64)?/pgsql/test/regress/pg_regress
systemd_unit_file_t- このタイプは、
/usr/lib/systemd/system/ディレクトリーに置かれている PostgreSQL 関連の実行ファイルに使用されます。 postgresql_log_t- このタイプは複数の場所で使用されます。このタイプのラベルが付いた場所は、ログファイルに使用されます。
/var/lib/pgsql/logfile/var/lib/pgsql/pgstartup.log/var/lib/sepgsql/pgstartup.log/var/log/postgresql/var/log/postgres.log.*/var/log/rhdb/rhdb/var/log/sepostgresql.log.*
postgresql_var_run_t- このタイプは、
/var/run/postgresql/ディレクトリーのプロセス ID (PID) など、PostgreSQL のランタイムファイルに使用されます。
21.3. ブール値 リンクのコピーリンクがクリップボードにコピーされました!
selinuxuser_postgresql_connect_enabled- ブール値を有効にすると、(PostgreSQL により定義される) ユーザードメインがデータベースサーバーへの接続を確立できるようになります。
getsebool -a | grep service_name
~]$ getsebool -a | grep service_name
sepolicy booleans -b boolean_name
~]$ sepolicy booleans -b boolean_name
sepolicy ユーティリティーを提供する追加の policycoreutils-devel パッケージが必要であることに注意してください。
21.4. 設定の例 リンクのコピーリンクがクリップボードにコピーされました!
21.4.1. PostgreSQL データベースの場所の変更 リンクのコピーリンクがクリップボードにコピーされました!
/var/lib/pgsql/data/ です。ここでは、SELinux がデフォルトであると想定している場所であるため、postgresql_db_t タイプを使用して、この領域はすでに適切にラベル付けされています。
postgresqlのデフォルトのデータベースの場所の SELinux コンテキストを表示します。ls -lZ /var/lib/pgsql drwx------. postgres postgres system_u:object_r:postgresql_db_t:s0 data
~]# ls -lZ /var/lib/pgsql drwx------. postgres postgres system_u:object_r:postgresql_db_t:s0 dataCopy to Clipboard Copied! Toggle word wrap Toggle overflow これは、データベースファイルの場所のデフォルトのコンテキスト要素であるpostgresql_db_tを示しています。このコンテキストを適切に機能させるために、この例で使用される新しいデータベースの場所に、手動で適用する必要があります。- データベースの新しい場所に、新しいディレクトリーを作成します。この例では、
/opt/postgresql/data/が使用されています。別の場所を使用する場合は、以下の手順のテキストを、使用している場所に置き換えます。mkdir -p /opt/postgresql/data
~]# mkdir -p /opt/postgresql/dataCopy to Clipboard Copied! Toggle word wrap Toggle overflow - 新しい場所のディレクトリーのリスト表示を実行します。新規ディレクトリーの最初のコンテキストは
usr_tであることに注意してください。このコンテキストは、SELinux が PostgreSQL にその保護メカニズムを提供するためには不十分です。コンテキストを変更すると、新しいエリアで適切に機能できるようになります。ls -lZ /opt/postgresql/ drwxr-xr-x. root root unconfined_u:object_r:usr_t:s0 data
~]# ls -lZ /opt/postgresql/ drwxr-xr-x. root root unconfined_u:object_r:usr_t:s0 dataCopy to Clipboard Copied! Toggle word wrap Toggle overflow - postgres ユーザーおよびグループによるアクセスを許可するために、新しい場所の所有権を変更します。これにより、SELinux が引き続き監視する従来の Unix パーミッションが設定されます。
chown -R postgres:postgres /opt/postgresql
~]# chown -R postgres:postgres /opt/postgresqlCopy to Clipboard Copied! Toggle word wrap Toggle overflow - テキストエディターで
/etc/systemd/system/postgresql.serviceファイルを開き、PGDATA変数およびPGLOG変数を変更して、新しい場所を指定します。vi /etc/systemd/system/postgresql.service PGDATA=/opt/postgresql/data PGLOG=/opt/postgresql/data/pgstartup.log
~]# vi /etc/systemd/system/postgresql.service PGDATA=/opt/postgresql/data PGLOG=/opt/postgresql/data/pgstartup.logCopy to Clipboard Copied! Toggle word wrap Toggle overflow このファイルを保存し、テキストエディターを終了します。/etc/systemd/system/postgresql.serviceファイルが存在しない場合は作成し、次の内容を挿入します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 新しい場所でデータベースを初期化します。
su - postgres -c "initdb -D /opt/postgresql/data"
~]$ su - postgres -c "initdb -D /opt/postgresql/data"Copy to Clipboard Copied! Toggle word wrap Toggle overflow - データベースの場所を変更すると、この時点でサービスの起動に失敗します。
systemctl start postgresql.service Job for postgresql.service failed. See 'systemctl status postgresql.service' and 'journalctl -xn' for details.
~]# systemctl start postgresql.service Job for postgresql.service failed. See 'systemctl status postgresql.service' and 'journalctl -xn' for details.Copy to Clipboard Copied! Toggle word wrap Toggle overflow SELinux によりサービスが起動しなくなりました。これは、新しい場所に適切なラベルが付けられていないためです。以下の手順では、新しい場所 (/opt/postgresql/) にラベルを付け、postgresql サービスを適切に起動する方法を説明します。 semanageユーティリティーを使用して、/opt/postgresql/およびその中のその他のディレクトリーやファイルに対するコンテキストマッピングを追加します。semanage fcontext -a -t postgresql_db_t "/opt/postgresql(/.*)?"
~]# semanage fcontext -a -t postgresql_db_t "/opt/postgresql(/.*)?"Copy to Clipboard Copied! Toggle word wrap Toggle overflow - このマッピングは、
/etc/selinux/targeted/contexts/files/file_contexts.localファイルに書き込まれます。grep -i postgresql /etc/selinux/targeted/contexts/files/file_contexts.local /opt/postgresql(/.*)? system_u:object_r:postgresql_db_t:s0
~]# grep -i postgresql /etc/selinux/targeted/contexts/files/file_contexts.local /opt/postgresql(/.*)? system_u:object_r:postgresql_db_t:s0Copy to Clipboard Copied! Toggle word wrap Toggle overflow - これで
restoreconユーティリティーを使用して、このコンテキストマッピングを実行中のシステムに適用します。restorecon -R -v /opt/postgresql
~]# restorecon -R -v /opt/postgresqlCopy to Clipboard Copied! Toggle word wrap Toggle overflow /opt/postgresql/の場所に、PostgreSQL の正しいコンテキストのラベルが付けられるようになり、postgresqlサービスが正常に起動します。systemctl start postgresql.service
~]# systemctl start postgresql.serviceCopy to Clipboard Copied! Toggle word wrap Toggle overflow /opt/postgresql/のコンテキストが正しいことを確認します。ls -lZ /opt drwxr-xr-x. root root system_u:object_r:postgresql_db_t:s0 postgresql
~]$ ls -lZ /opt drwxr-xr-x. root root system_u:object_r:postgresql_db_t:s0 postgresqlCopy to Clipboard Copied! Toggle word wrap Toggle overflow postgresql処理で新しい場所が表示されることを、ps コマンドで確認します。ps aux | grep -i postmaster postgres 21564 0.3 0.3 42308 4032 ? S 10:13 0:00 /usr/bin/postmaster -p 5432 -D /opt/postgresql/data/
~]# ps aux | grep -i postmaster postgres 21564 0.3 0.3 42308 4032 ? S 10:13 0:00 /usr/bin/postmaster -p 5432 -D /opt/postgresql/data/Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 場所が変更され、ラベルが付けられ、
postgresqlが正常に起動しました。この時点で、実行中のすべてのサービスをテストして、通常の操作を確認してください。
第22章 rsync リンクのコピーリンクがクリップボードにコピーされました!
rsync ユーティリティーは、高速なファイル転送を実行し、システム間でデータの同期に使用されます。[20]
rpm -q rsync package rsync is not installed
~]$ rpm -q rsync
package rsync is not installed
yum ユーティリティーを使用してインストールします。
yum install rsync
~]# yum install rsync
22.1. rsync および SELinux リンクのコピーリンクがクリップボードにコピーされました!
rsync デーモンを使用してファイルを共有する場合は、ファイルおよびディレクトリーに public_content_t タイプのラベルを付ける必要があります。ほとんどのサービスと同様に、SELinux が rsync 経由でその防御メカニズムを実行するには、正しいラベリングが必要になります。[21]
22.2. タイプ リンクのコピーリンクがクリップボードにコピーされました!
rsync では、以下のタイプが使用されます。フレキシブルアクセスを設定するには、以下のいずれかを行います。
public_content_t- これは、
rsyncを使用して共有するファイル (および実際のファイル) の場所に使用される一般的なタイプです。rsyncと共有するファイルを格納する特殊なディレクトリーを作成する場合は、そのディレクトリーとその内容に、このラベルを適用する必要があります。 rsync_exec_t- このタイプは、
/usr/bin/rsyncシステムバイナリーに使用されます。 rsync_log_t- このタイプは、
rsyncログファイルに使用されます。デフォルトでは/var/log/rsync.logにあります。rsync ログファイルの場所を変更するには、実行時に rsync コマンドの--log-file=FILEを使用します。 rsync_var_run_t- このタイプは、
/var/run/rsyncd.lockにあるrsyncdロックファイルに使用されます。このロックファイルは、rsyncサーバーが接続制限を管理するために使用されます。 rsync_data_t- このタイプは、rsync ドメインとして使用し、その他のサービスのアクセス範囲から分離するファイルおよびディレクトリーに使用されます。また、
public_content_tは、ファイルまたはディレクトリーが複数のサービス (たとえば、rsync ドメインとしての FTP および NFS ディレクトリー) と相互作用する場合に使用できる、一般的な SELinux コンテキストタイプです。 rsync_etc_t- このタイプは、
/etcディレクトリー内の rsync 関連のファイルに使用されます。
22.3. ブール値 リンクのコピーリンクがクリップボードにコピーされました!
rsync_anon_write- ブール値を有効にすると、
rsync_tドメイン内のrsyncが、public_content_rw_tタイプがあるファイル、リンク、およびディレクトリーを管理できるようになります。多くの場合、これは公共のファイル転送サービスに使用される公共ファイルです。ファイルおよびディレクトリーには、このタイプのラベルを付ける必要があります。 rsync_client- ブール値を有効にすると、
rsyncは、rsync_port_tとして定義されたポートへの接続を開始するだけでなく、rsync_data_tタイプがあるファイル、リンク、およびディレクトリーを管理できるようになります。SELinux がその制御を行えるようにするには、rsyncがrsync_tドメインに存在する必要があることに注意してください。本章の設定例は、rsync_tドメインで実行しているrsyncを示しています。 rsync_export_all_ro- このブール値を有効にすると、
rsync_tドメインのrsyncが、クライアントへの読み取り専用アクセスを持つ NFS および CIFS ボリュームをエクスポートできるようになります。
getsebool -a | grep service_name
~]$ getsebool -a | grep service_name
sepolicy booleans -b boolean_name
~]$ sepolicy booleans -b boolean_name
sepolicy ユーティリティーを提供する追加の policycoreutils-devel パッケージが必要であることに注意してください。
22.4. 設定の例 リンクのコピーリンクがクリップボードにコピーされました!
22.4.1. デーモンとしての Rsync リンクのコピーリンクがクリップボードにコピーされました!
rsync デーモンが標準以外のポートで通常どおり実行できるように SELinux ポリシーを変更する方法を示します。
手順22.1 rsync を rsync_t として起動させる
- getenforce コマンドを実行して、SELinux が Enforcing モードで実行されていることを確認します。
getenforce Enforcing
~]$ getenforce EnforcingCopy to Clipboard Copied! Toggle word wrap Toggle overflow SELinux が Enforcing モードで実行されていると、このコマンドはEnforcingを返します。 - which コマンドを実行して、rsync バイナリーがシステムパスにあることを確認します。
which rsync /usr/bin/rsync
~]$ which rsync /usr/bin/rsyncCopy to Clipboard Copied! Toggle word wrap Toggle overflow - rsync をデーモンとして実行する場合は、設定ファイルを使用して、
/etc/rsyncd.confとして保存する必要があります。この例で使用されている以下の設定ファイルは非常に単純であり、使用可能なすべてのオプションを示しているわけではなく、rsyncデーモンを示すだけで十分であることに注意してください。Copy to Clipboard Copied! Toggle word wrap Toggle overflow - rsync がデーモンモードで動作するための簡単な設定ファイルが存在するようになったため、以下のコマンドを実行して起動できます。
systemctl start rsyncd.service
~]# systemctl start rsyncd.serviceCopy to Clipboard Copied! Toggle word wrap Toggle overflow rsyncdが正常に起動したことを確認します (出力は以下のようになります。タイムスタンプのみが異なります)。Copy to Clipboard Copied! Toggle word wrap Toggle overflow SELinux は、rsync_tドメインで実行しているときに、rsyncデーモンにプロテクションメカニズムを適用できるようになりました。ps -eZ | grep rsync system_u:system_r:rsync_t:s0 3220 ? 00:00:00 rsync
~]$ ps -eZ | grep rsync system_u:system_r:rsync_t:s0 3220 ? 00:00:00 rsyncCopy to Clipboard Copied! Toggle word wrap Toggle overflow
rsync_t ドメインで実行しているrsyncdを取得する方法を示しています。Rsync は、ソケットが有効なサービスとして実行することもできます。これにより、クライアントがサービスへの接続を試行するまで、rsyncdが実行されません。rsyncd がソケットにより起動したサービスとして実行できるようにするには、上記の手順を行います。rsyncd をソケット起動サービスとして起動するには、root で以下のコマンドを実行します。
systemctl start rsyncd.socket
~]# systemctl start rsyncd.socket
手順22.2 デフォルト以外のポートでの rsync デーモンの実行
/etc/rsyncd.confファイルを変更し、グローバル設定領域 (つまりファイル領域が定義する前) のファイルの一番上にあるport = 10000行を追加します。新しい設定ファイルは以下のようになります。Copy to Clipboard Copied! Toggle word wrap Toggle overflow - この新しい設定で
rsyncデーモンを起動すると、次のような拒否メッセージが SELinux によりログに記録されます。Jul 22 10:46:59 localhost setroubleshoot: SELinux is preventing the rsync (rsync_t) from binding to port 10000. For complete SELinux messages, run sealert -l c371ab34-639e-45ae-9e42-18855b5c2de8
Jul 22 10:46:59 localhost setroubleshoot: SELinux is preventing the rsync (rsync_t) from binding to port 10000. For complete SELinux messages, run sealert -l c371ab34-639e-45ae-9e42-18855b5c2de8Copy to Clipboard Copied! Toggle word wrap Toggle overflow semanageユーティリティーを使用して、rsync_port_tの SELinux ポリシーに TCP ポート 10000 を追加します。semanage port -a -t rsync_port_t -p tcp 10000
~]# semanage port -a -t rsync_port_t -p tcp 10000Copy to Clipboard Copied! Toggle word wrap Toggle overflow rsync_port_tの SELinux ポリシーに TCP ポート 10000 が追加され、rsyncdはこのポートで通常どおり起動して動作するようになりました。systemctl start rsyncd.service
~]# systemctl start rsyncd.serviceCopy to Clipboard Copied! Toggle word wrap Toggle overflow netstat -lnp | grep 10000 tcp 0 0 0.0.0.0:10000 0.0.0.0:* LISTEN 9910/rsync
~]# netstat -lnp | grep 10000 tcp 0 0 0.0.0.0:10000 0.0.0.0:* LISTEN 9910/rsyncCopy to Clipboard Copied! Toggle word wrap Toggle overflow
rsyncd の TCP ポート 10000 での動作が許可されるようになりました。
第23章 postfix リンクのコピーリンクがクリップボードにコピーされました!
rpm -q postfix package postfix is not installed
~]$ rpm -q postfix
package postfix is not installed
yum ユーティリティー root を使用して、インストールします。
yum install postfix
~]# yum install postfix
23.1. Postfix および SELinux リンクのコピーリンクがクリップボードにコピーされました!
- getenforce コマンドを実行して、SELinux が Enforcing モードで実行されていることを確認します。
getenforce Enforcing
~]$ getenforce EnforcingCopy to Clipboard Copied! Toggle word wrap Toggle overflow SELinux が Enforcing モードで実行されていると、このコマンドはEnforcingを返します。 - root で次のコマンドを入力して、
postfixを起動します。systemctl start postfix.service
~]# systemctl start postfix.serviceCopy to Clipboard Copied! Toggle word wrap Toggle overflow サービスが実行中であることを確認します。出力には以下の情報が含まれている必要があります (タイムスタンプのみは異なります)。systemctl status postfix.service postfix.service - Postfix Mail Transport Agent Loaded: loaded (/usr/lib/systemd/system/postfix.service; disabled) Active: active (running) since Mon 2013-08-05 11:38:48 CEST; 3h 25min ago
~]# systemctl status postfix.service postfix.service - Postfix Mail Transport Agent Loaded: loaded (/usr/lib/systemd/system/postfix.service; disabled) Active: active (running) since Mon 2013-08-05 11:38:48 CEST; 3h 25min agoCopy to Clipboard Copied! Toggle word wrap Toggle overflow - 次のコマンドを実行して、
postfixプロセスを表示します。ps -eZ | grep postfix system_u:system_r:postfix_master_t:s0 1651 ? 00:00:00 master system_u:system_r:postfix_pickup_t:s0 1662 ? 00:00:00 pickup system_u:system_r:postfix_qmgr_t:s0 1663 ? 00:00:00 qmgr
~]$ ps -eZ | grep postfix system_u:system_r:postfix_master_t:s0 1651 ? 00:00:00 master system_u:system_r:postfix_pickup_t:s0 1662 ? 00:00:00 pickup system_u:system_r:postfix_qmgr_t:s0 1663 ? 00:00:00 qmgrCopy to Clipboard Copied! Toggle word wrap Toggle overflow ここでは、Postfixmasterプロセスに関連する SELinux コンテキストがsystem_u:system_r:postfix_master_t:s0になっています。文脈の最後の部分であるpostfix_master_tは、この処理のタイプです。タイプは、プロセスのドメインとファイルのタイプを定義します。この例では、masterプロセスがpostfix_master_tドメインで実行しています。
23.2. タイプ リンクのコピーリンクがクリップボードにコピーされました!
postfix_etc_t- このタイプは、
/etc/postfix/ディレクトリーの Postfix の設定ファイルに使用されます。 postfix_data_t- このタイプは、
/var/lib/postfix/ディレクトリーの Postfix データファイルに使用されます。 postfix_var_run_t- このタイプは、
/run/ディレクトリーに保存されている Postfix ファイルに使用されます。 postfix_initrc_exec_t- Postfix 実行ファイルには、
postfix_initrc_exec_tタイプにラベルが付いています。実行すると、postfix_initrc_tドメインに移行します。 postfix_spool_t- このタイプは、
/var/spool/ディレクトリーに保存されている Postfix ファイルに使用されます。
grep postfix /etc/selinux/targeted/contexts/files/file_contexts
~]$ grep postfix /etc/selinux/targeted/contexts/files/file_contexts
23.3. ブール値 リンクのコピーリンクがクリップボードにコピーされました!
postfix_local_write_mail_spool- ブール値を有効にすると、Postfix はシステムのローカルメールスプールに書き込むことができるようになります。Postfix では、ローカルのスプールを使用する場合に、通常の操作でこのブール値を有効にする必要があります。
getsebool -a | grep service_name
~]$ getsebool -a | grep service_name
sepolicy booleans -b boolean_name
~]$ sepolicy booleans -b boolean_name
sepolicy ユーティリティーを提供する追加の policycoreutils-devel パッケージが必要であることに注意してください。
23.4. 設定の例 リンクのコピーリンクがクリップボードにコピーされました!
23.4.1. SpamAssassin および Postfix リンクのコピーリンクがクリップボードにコピーされました!
rpm -q spamassassin package spamassassin is not installed
~]$ rpm -q spamassassin
package spamassassin is not installed
yum ユーティリティーを使用してインストールします。
yum install spamassassin
~]# yum install spamassassin
手順23.1 デフォルト以外のポートで SpamAssassin を実行する
semanageユーティリティーを root で実行し、SELinux によりspamdデーモンがデフォルトでリッスンできるようになっているポートを表示します。semanage port -l | grep spamd spamd_port_t tcp 783
~]# semanage port -l | grep spamd spamd_port_t tcp 783Copy to Clipboard Copied! Toggle word wrap Toggle overflow これは、TCP/783 がspamd_port_tで SpamAssassin の動作ポートとして定義されていることを示しています。/etc/sysconfig/spamassassin設定ファイルを編集して、サンプルポート TCP/10000 で SpamAssassin を起動するように変更します。# Options to spamd SPAMDOPTIONS="-d -p 10000 -c m5 -H"
# Options to spamd SPAMDOPTIONS="-d -p 10000 -c m5 -H"Copy to Clipboard Copied! Toggle word wrap Toggle overflow この行では、SpamAssassin がポート 10000 で動作することを指定するようになりました。以下の例では、このソケットを開くことができるように SELinux ポリシーを変更する方法を説明します。- SpamAssassin を起動すると、以下のようなエラーメッセージが表示されます。
systemctl start spamassassin.service Job for spamassassin.service failed. See 'systemctl status spamassassin.service' and 'journalctl -xn' for details.
~]# systemctl start spamassassin.service Job for spamassassin.service failed. See 'systemctl status spamassassin.service' and 'journalctl -xn' for details.Copy to Clipboard Copied! Toggle word wrap Toggle overflow この出力は、SELinux がこのポートへのアクセスをブロックしたことを示しています。 - 以下のような拒否メッセージが SELinux により記録されます。
SELinux is preventing the spamd (spamd_t) from binding to port 10000.
SELinux is preventing the spamd (spamd_t) from binding to port 10000.Copy to Clipboard Copied! Toggle word wrap Toggle overflow - root で
semanageを実行して SELinux ポリシーを変更し、SpamAssassin がサンプルポート (TCP/10000) で動作できるようにします。semanage port -a -t spamd_port_t -p tcp 10000
~]# semanage port -a -t spamd_port_t -p tcp 10000Copy to Clipboard Copied! Toggle word wrap Toggle overflow - SpamAssassin が起動し、TCP ポート 10000 で動作していることを確認します。
systemctl start spamassassin.service netstat -lnp | grep 10000 tcp 0 0 127.0.0.1:10000 0.0.0.0:* LISTEN 2224/spamd.pid
~]# systemctl start spamassassin.service ~]# netstat -lnp | grep 10000 tcp 0 0 127.0.0.1:10000 0.0.0.0:* LISTEN 2224/spamd.pidCopy to Clipboard Copied! Toggle word wrap Toggle overflow - この時点で、
spamdは、SELinux ポリシーでそのポートへのアクセスが許可されているため、TCP ポート 10000 で適切に動作しています。
第24章 DHCP リンクのコピーリンクがクリップボードにコピーされました!
dhcpd デーモンは、Red Hat Enterprise Linux で使用され、クライアントのレイヤー 3 の TCP/IP 詳細を動的に配信して設定します。
dhcpd デーモンを提供します。以下のコマンドを実行して、dhcp パッケージがインストールされているかどうかを確認します。
rpm -q dhcp package dhcp is not installed
~]# rpm -q dhcp
package dhcp is not installed
yum ユーティリティーを使用してインストールします。
yum install dhcp
~]# yum install dhcp
24.1. DHCP および SELinux リンクのコピーリンクがクリップボードにコピーされました!
dhcpd が有効になると、デフォルトで制限付きで実行されます。制限のあるプロセスは、独自のドメインで実行され、他の制限のあるプロセスから分離されます。制限のあるプロセスが攻撃者によって侵害された場合、SELinux ポリシーの設定に応じて、攻撃者のリソースへのアクセスと、攻撃者が行う可能性のある損害は制限されます。以下の例は、dhcpd と、そのドメインで実行している関連プロセスを示しています。この例では、dhcp がインストールされ、dhcpd サービスが開始していることを前提としています。
- getenforce コマンドを実行して、SELinux が Enforcing モードで実行されていることを確認します。
getenforce Enforcing
~]$ getenforce EnforcingCopy to Clipboard Copied! Toggle word wrap Toggle overflow SELinux が Enforcing モードで実行されていると、このコマンドはEnforcingを返します。 - root で次のコマンドを入力して、
dhcpdを起動します。systemctl start dhcpd.service
~]# systemctl start dhcpd.serviceCopy to Clipboard Copied! Toggle word wrap Toggle overflow サービスが実行中であることを確認します。出力には以下の情報が含まれている必要があります (タイムスタンプのみは異なります)。systemctl status dhcpd.service dhcpd.service - DHCPv4 Server Daemon Loaded: loaded (/usr/lib/systemd/system/dhcpd.service; disabled) Active: active (running) since Mon 2013-08-05 11:49:07 CEST; 3h 20min ago
~]# systemctl status dhcpd.service dhcpd.service - DHCPv4 Server Daemon Loaded: loaded (/usr/lib/systemd/system/dhcpd.service; disabled) Active: active (running) since Mon 2013-08-05 11:49:07 CEST; 3h 20min agoCopy to Clipboard Copied! Toggle word wrap Toggle overflow - 次のコマンドを実行して、
dhcpdプロセスを表示します。ps -eZ | grep dhcpd system_u:system_r:dhcpd_t:s0 5483 ? 00:00:00 dhcpd
~]$ ps -eZ | grep dhcpd system_u:system_r:dhcpd_t:s0 5483 ? 00:00:00 dhcpdCopy to Clipboard Copied! Toggle word wrap Toggle overflow dhcpd プロセスに関連付けられた SELinux コンテキストはsystem_u:system_r:dhcpd_t:s0です。
24.2. タイプ リンクのコピーリンクがクリップボードにコピーされました!
dhcp_etc_t- このタイプは、主に、設定ファイルを含む
/etcディレクトリーのファイルに使用されます。 dhcpd_var_run_t- このタイプは、
/var/run/ディレクトリーのdhcpdの PID ファイルに使用されます。 dhcpd_exec_t- このタイプは、DHCP 実行ファイルを
dhcpd_tドメインに移行するために使用されます。 dhcpd_initrc_exec_t- このタイプは、DHCP 実行ファイルを
dhcpd_initrc_tドメインに移行するために使用されます。
dhcpd ファイルのリストとそのタイプを表示するには、次のコマンドを実行します。
grep dhcp /etc/selinux/targeted/contexts/files/file_contexts
~]$ grep dhcp /etc/selinux/targeted/contexts/files/file_contexts
第25章 OpenShift by Red Hat リンクのコピーリンクがクリップボードにコピーされました!
rpm -q openshift-clients package openshift-clients is not installed
~]$ rpm -q openshift-clients
package openshift-clients is not installed
25.1. OpenShift および SELinux リンクのコピーリンクがクリップボードにコピーされました!
25.2. タイプ リンクのコピーリンクがクリップボードにコピーされました!
プロセスのタイプ
openshift_t- OpenShift プロセスは、
openshift_tSELinux のタイプに関連付けられています。
実行ファイルのタイプ
openshift_cgroup_read_exec_t- SELinux では、このタイプのファイルを使用して、実行ファイルを
openshift_cgroup_read_tドメインに移行できます。 openshift_cron_exec_t- SELinux では、このタイプのファイルを使用して、実行ファイルを
openshift_cron_tドメインに移行できます。 openshift_initrc_exec_t- SELinux では、このタイプのファイルを使用して、実行ファイルを
openshift_initrc_tドメインに移行できます。
書き込み可能なタイプ
openshift_cgroup_read_tmp_t- このタイプでは、
/tmpディレクトリー内の OpenShift 制御グループ (cgroup) による一時ファイルの読み取りとアクセスが可能になります。 openshift_cron_tmp_t- このタイプでは、OpenShift cron ジョブの一時ファイルを
/tmpに保存できます。 openshift_initrc_tmp_t- このタイプでは、OpenShift
initrc一時ファイルを/tmpに保存できます。 openshift_log_t- このタイプのファイルは、OpenShift ログデータとして扱われ、通常は
/var/log/ディレクトリーに保存されます。 openshift_rw_file_t- OpenShift には、このタイプのラベルが付いたファイルの読み取りと書き込みのパーミッションがあります。
openshift_tmp_t- このタイプは、OpenShift 一時ファイルを
/tmpに保存するために使用されます。 openshift_tmpfs_t- このタイプを使用すると、OpenShift データを tmpfs ファイルシステムに保存できます。
openshift_var_lib_t- このタイプを使用すると、
/var/lib/ディレクトリーに OpenShift ファイルを保存できます。 openshift_var_run_t- このタイプを使用すると、
/run/ディレクトリーまたは/var/run/ディレクトリーに OpenShift ファイルを保存できます。
25.3. ブール値 リンクのコピーリンクがクリップボードにコピーされました!
openshift_use_nfs- ブール値を有効にすると、NFS 共有に OpenShift をインストールできるようになります。
getsebool -a | grep service_name
~]$ getsebool -a | grep service_name
sepolicy booleans -b boolean_name
~]$ sepolicy booleans -b boolean_name
sepolicy ユーティリティーを提供する追加の policycoreutils-devel パッケージが必要であることに注意してください。
25.4. 設定の例 リンクのコピーリンクがクリップボードにコピーされました!
25.4.1. デフォルトの OpenShift ディレクトリーの変更 リンクのコピーリンクがクリップボードにコピーされました!
/var/lib/openshift/ ディレクトリーに保存します。このディレクトリーには openshift_var_lib_t SELinux のタイプのラベルが付いています。OpenShift が別のディレクトリーにデータを保存できるようにするには、適切な SELinux コンテキストで、新しいディレクトリーにラベルを付けます。
/srv/openshift/ に保存するために、デフォルトの OpenShift ディレクトリーを変更する方法を示しています。
手順25.1 データを保存するためのデフォルトの OpenShift ディレクトリーの変更
- root で、
/srvディレクトリーに新しいopenshift/ディレクトリーを作成します。新しいディレクトリーには、var_tのタイプにラベルが付けられます。mkdir /srv/openshift
~]# mkdir /srv/openshiftCopy to Clipboard Copied! Toggle word wrap Toggle overflow ls -Zd /srv/openshift drwxr-xr-x. root root unconfined_u:object_r:var_t:s0 openshift/
~]$ ls -Zd /srv/openshift drwxr-xr-x. root root unconfined_u:object_r:var_t:s0 openshift/Copy to Clipboard Copied! Toggle word wrap Toggle overflow - root で、
semanageユーティリティーを使用して、/srv/openshift/を適切な SELinux コンテキストにマッピングします。semanage fcontext -a -e /var/lib/openshift /srv/openshift
~]# semanage fcontext -a -e /var/lib/openshift /srv/openshiftCopy to Clipboard Copied! Toggle word wrap Toggle overflow - 次に、root で
restoreconユーティリティーを使用して変更を適用します。restorecon -R -v /srv/openshift
~]# restorecon -R -v /srv/openshiftCopy to Clipboard Copied! Toggle word wrap Toggle overflow - これで、
/srv/openshift/ディレクトリーに、正しいopenshift_var_lib_tタイプのラベルが付けられます。ls -Zd /srv/openshift drwxr-xr-x. root root unconfined_u:object_r:openshift_var_lib_t:s0 openshift/
~]$ ls -Zd /srv/openshift drwxr-xr-x. root root unconfined_u:object_r:openshift_var_lib_t:s0 openshift/Copy to Clipboard Copied! Toggle word wrap Toggle overflow
第26章 ID 管理 リンクのコピーリンクがクリップボードにコピーされました!
rpm -q ipa-server package ipa-server is not installed
~]$ rpm -q ipa-server
package ipa-server is not installed
yum install ipa-server
~]# yum install ipa-server
26.1. ID 管理と SELinux リンクのコピーリンクがクリップボードにコピーされました!
SSSD (System Security Services Daemon) は特定の IdM ユーザーに定義したアクセス権限をクエリーします。そして、pam_selinux モジュールは、IdM のアクセス権 (guest_u:guest_r:guest_t:s0 など) に従って、適切な SELinux コンテキストでユーザープロセスを起動するように、カーネルにリクエストを送信します。
26.1.1. Active Directory ドメインへの信頼 リンクのコピーリンクがクリップボードにコピーされました!
WinSync ユーティリティーを使用して、Active Directory (AD) ドメインのユーザーが IdM ドメインに保存されているデータにアクセスできるようにしました。これを行うには、WinSync が、AD サーバーからローカルサーバーにユーザーとグループのデータを複製し、データの同期を維持する必要がありました。
SSSD デーモンが AD と連携するように拡張され、ユーザーは IdM ドメインと AD ドメイン間に信頼関係を作成できるようになりました。ユーザーおよびグループのデータは、AD サーバーから直接読み取られます。また、AD ドメインおよび IdM ドメイン間でのシングルサインオン (SSO) 認証を可能にする Kerberos レルム間の信頼も提供されます。SSO を設定すると、AD ドメインのユーザーは、パスワードを必要とせずに、IdM ドメインに保存されている Kerberos で保護されているデータにアクセスできます。
26.2. 設定の例 リンクのコピーリンクがクリップボードにコピーされました!
26.2.1. IdM ユーザーへの SELinux ユーザーのマッピング リンクのコピーリンクがクリップボードにコピーされました!
手順26.1 SELinux マッピングにユーザーを追加する方法
- 新しい SELinux マッピングを作成するには、以下のコマンドを実行します。
SELinux_mappingは新しい SELinux マッピングの名前で、--selinuxuserオプションは特定の SELinux ユーザーを指定します。ipa selinuxusermap-add SELinux_mapping --selinuxuser=staff_u:s0-s0:c0.c1023
~]$ ipa selinuxusermap-add SELinux_mapping --selinuxuser=staff_u:s0-s0:c0.c1023Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 次のコマンドを実行して、
tuserのユーザー名を持つ IdM ユーザーを SELinux マッピングに追加します。ipa selinuxusermap-add-user --users=tuser SELinux_mapping
~]$ ipa selinuxusermap-add-user --users=tuser SELinux_mappingCopy to Clipboard Copied! Toggle word wrap Toggle overflow ipaclient.example.comという名前の新しいホストを SELinux マッピングに追加するには、次のコマンドを実行します。ipa selinuxusermap-add-host --hosts=ipaclient.example.com SELinux_mapping
~]$ ipa selinuxusermap-add-host --hosts=ipaclient.example.com SELinux_mappingCopy to Clipboard Copied! Toggle word wrap Toggle overflow tuserユーザーは、ipaclient.example.com ホストコンピューターにログインすると、staff_u:s0-s0:c0.c1023ラベルを取得します。id -Z staff_u:staff_r:staff_t:s0-s0:c0.c1023
[tuser@ipa-client]$ id -Z staff_u:staff_r:staff_t:s0-s0:c0.c1023Copy to Clipboard Copied! Toggle word wrap Toggle overflow
第27章 Red Hat Gluster Storage リンクのコピーリンクがクリップボードにコピーされました!
27.1. Red Hat Gluster Storage および SELinux リンクのコピーリンクがクリップボードにコピーされました!
glusterd (GlusterFS 管理サービス) プロセスおよび glusterfsd (NFS サーバー) プロセスに柔軟な必須アクセス制御を提供することで、追加のセキュリティー層として機能します。このようなプロセスでは、glusterd_t SELinux の種類に制限されずに、高度なプロセスの分離が行われています。
27.2. タイプ リンクのコピーリンクがクリップボードにコピーされました!
プロセスのタイプ
glusterd_t- Gluster プロセスは、
glusterd_tSELinux のタイプに関連付けられています。
実行ファイルのタイプ
glusterd_initrc_exec_t- Gluster init スクリプトファイルの SELinux 固有のスクリプトタイプのコンテキスト。
glusterd_exec_t- Gluster 実行ファイルに対する SELinux 固有の実行タイプのコンテキスト。
ポートタイプ
gluster_port_t- このタイプは、
glusterdに対して定義されます。初期設定では、glusterdは 204007-24027 および 38465-38469 の TCP ポートを使用します。
ファイルコンテキスト
glusterd_brick_t- このタイプは、
glusterdブリックデータとして脅威を受けるファイルに使用されます。 glusterd_conf_t- このタイプは、
glusterd設定データに関連付けられます。通常、/etcディレクトリーに保存されます。 glusterd_log_t- このタイプのファイルは、
glusterdログデータとして扱われ、通常は/var/log/ディレクトリーに保存されます。 glusterd_tmp_t- このタイプは、
glusterd一時ファイルを/tmpディレクトリーに保存するために使用されます。 glusterd_var_lib_t- このタイプを使用すると、
glusterdファイルを/var/lib/ディレクトリーに保存できます。 glusterd_var_run_t- このタイプでは、
/run/ディレクトリーまたは/var/run/ディレクトリーにglusterdファイルを保存できます。
27.3. ブール値 リンクのコピーリンクがクリップボードにコピーされました!
gluster_export_all_ro- ブール値を有効にすると、
glusterfsdはファイルとディレクトリーを読み取り専用として共有できます。このブール値は、デフォルトでは無効になっています。 gluster_export_all_rw- ブール値を有効にすると、
glusterfsdは読み取りアクセスと書き込みアクセスでファイルとディレクトリーを共有できるようになります。このブール値はデフォルトで有効になっています。 gluster_anon_write- ブール値を有効にすると、
glusterfsdは、public_content_rw_tSELinux タイプでラベル付けされた公開ファイルを変更できます。
getsebool -a | grep service_name
~]$ getsebool -a | grep service_name
sepolicy booleans -b boolean_name
~]$ sepolicy booleans -b boolean_name
sepolicy ユーティリティーを提供する追加の policycoreutils-devel パッケージが必要であることに注意してください。
27.4. 設定の例 リンクのコピーリンクがクリップボードにコピーされました!
27.4.1. Gluster ブリックのラベル付け リンクのコピーリンクがクリップボードにコピーされました!
glusterd_brick_t により、SELinux は特定のファイルアクセス操作を拒否し、さまざまな AVC メッセージを生成します。
/dev/rhgs/gluster など) を作成し、フォーマットし、Gluster ブリックとして使用することを前提としています。
手順27.1 Gluster ブリックにラベルを付ける方法
- 以前にフォーマットされた論理ボリュームをマウントするディレクトリーを作成します。以下に例を示します。
mkdir /mnt/brick1
~]# mkdir /mnt/brick1Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 論理ボリューム (この場合は
/dev/vg-group/gluster) を、前の手順で作成した/mnt/brick1/ディレクトリーにマウントします。mount /dev/vg-group/gluster /mnt/brick1/
~]# mount /dev/vg-group/gluster /mnt/brick1/Copy to Clipboard Copied! Toggle word wrap Toggle overflow mount コマンドはデバイスを一時的にマウントすることに注意してください。デバイスを永続的にマウントするには、以下のようなエントリーを/etc/fstabファイルに追加します。/dev/vg-group/gluster /mnt/brick1 xfs rw,inode64,noatime,nouuid 1 2
/dev/vg-group/gluster /mnt/brick1 xfs rw,inode64,noatime,nouuid 1 2Copy to Clipboard Copied! Toggle word wrap Toggle overflow 詳細は、fstab(5) の man ページを参照してください。 /mnt/brick1/の SELinux コンテキストを確認します。ls -lZd /mnt/brick1/ drwxr-xr-x. root root system_u:object_r:unlabeled_t:s0 /mnt/brick1/
~]$ ls -lZd /mnt/brick1/ drwxr-xr-x. root root system_u:object_r:unlabeled_t:s0 /mnt/brick1/Copy to Clipboard Copied! Toggle word wrap Toggle overflow ディレクトリーには、unlabeled_tSELinux タイプのラベルが付けられます。/mnt/brick1/の SELinux タイプを、glusterd_brick_tSELinux タイプに変更します。semanage fcontext -a -t glusterd_brick_t "/mnt/brick1(/.*)?"
~]# semanage fcontext -a -t glusterd_brick_t "/mnt/brick1(/.*)?"Copy to Clipboard Copied! Toggle word wrap Toggle overflow - root で
restoreconユーティリティーを使用して変更を適用します。restorecon -Rv /mnt/brick1
~]# restorecon -Rv /mnt/brick1Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 最後に、コンテキストが正常に変更されたことを確認します。
ls -lZd /mnt/brick1 drwxr-xr-x. root root system_u:object_r:glusterd_brick_t:s0 /mnt/brick1/
~]$ ls -lZd /mnt/brick1 drwxr-xr-x. root root system_u:object_r:glusterd_brick_t:s0 /mnt/brick1/Copy to Clipboard Copied! Toggle word wrap Toggle overflow
第28章 参考資料 リンクのコピーリンクがクリップボードにコピーされました!
書籍
- SELinux by Example
- Mayer, MacMillan, and CaplanPrentice Hall, 2007
- SELinux: NSA's Open Source Security Enhanced Linux
- Bill McCartyO'Reilly Media Inc., 2004
チュートリアルおよびヘルプ
- Russell Coker のチュートリアルと講演
- Dan Walsh のジャーナル
- Red Hat ナレッジベース
メーリングリスト
- Fedora SELinux メーリングリスト
コミュニティー
- SELinux Project Wiki
- SELinux コミュニティーページ
- IRC
- irc.freenode.net, #selinux
付録A 更新履歴 リンクのコピーリンクがクリップボードにコピーされました!
| 改訂履歴 | |||
|---|---|---|---|
| 改訂 0.3-06 | Fri Aug 9 2019 | ||
| |||
| 改訂 0.3-05 | Sat Oct 20 2018 | ||
| |||
| 改訂 0.3-03 | Tue Apr 3 2018 | ||
| |||
| 改訂 0.3-01 | Thu Jul 13 2017 | ||
| |||
| 改訂 0.2-18 | Wed Nov 2 2016 | ||
| |||
| 改訂 0.2-11 | Sun Jun 26 2016 | ||
| |||
| 改訂 0.2-10 | Sun Feb 14 2016 | ||
| |||
| 改訂 0.2-9 | Thu Dec 10 2015 | ||
| |||
| 改訂 0.2-8 | Thu Nov 11 2015 | ||
| |||
| 改訂 0.2-7 | Thu Aug 13 2015 | ||
| |||
| 改訂 0.2-6 | Wed Feb 18 2015 | ||
| |||
| 改訂 0.2-5 | Fri Dec 05 2014 | ||
| |||
| 改訂 0.2-4 | Thu Dec 04 2014 | ||
| |||
| 改訂 0.1-41 | Tue May 20 2014 | ||
| |||
| 改訂 0.1-1 | Tue Jan 17 2013 | ||
| |||