第3章 Targeted ポリシー
Targeted ポリシーは、Red Hat Enterprise Linux で使用されるデフォルトの SELinux ポリシーです。Targeted ポリシーを使用する場合、対象となるプロセスは制限のあるドメインで実行され、対象とならないプロセスは制限のないドメインで実行されます。たとえば、デフォルトでは、ログイン中のユーザーは
unconfined_t ドメインで実行され、init によって起動されたシステムプロセスは unconfined_service_t ドメインで実行されます。これらのドメインはどちらも制限されません。
実行可能および書き込み可能なメモリーチェックは、制限のあるドメインと制限のないドメインの両方に適用できます。ただし、デフォルトでは、制限のないドメインで実行しているサブジェクトは、書き込み可能なメモリーを割り当てて実行できます。これらのメモリーチェックを有効にするには、ブール値を設定します。これにより、SELinux ポリシーをランタイム時に変更できます。ブール値設定については、後で説明します。
3.1. 制限のあるプロセス リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
sshd や httpd などのネットワーク上でリッスンするほぼすべてのサービスは、Red Hat Enterprise Linux に制限されます。また、root ユーザーで実行され、passwd ユーティリティーなどのユーザーのタスクを実行するほとんどのプロセスには制限があります。プロセスが制限されると、httpd_t ドメインで実行している httpd プロセスのように、独自のドメインで実行されます。制限のあるプロセスが攻撃者によって侵害された場合、SELinux ポリシーの設定に応じて、攻撃者のリソースへのアクセスと、攻撃者が行う可能性のある損害は制限されます。
以下の手順に従って、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プロセスがこのファイルにアクセスできるようになります。
以下の例は、SELinux が Samba で使用することが意図されているファイルなど、正しくラベル付けされていないファイルを読み込めるように、SELinux が Apache HTTP Server(
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
この例は、SELinux により追加された追加のセキュリティーを示しています。DAC ルールでは、手順 2 で
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