SELinxの概要
プロセスがファイルなどのリソースにアクセスする際に、通常のLinuxのアクセス制御(パーミッション・チェック)に加え、必ずTEによるチェックをする仕組みです。
TEとは、「Type-Enforcement」と呼ばれるアクセス制御機能です。
通常のLinuxのパーミッションチェックは、はユーザー名に基づいてアクセス制御を行いますが、TEではポリシーファイルに設定されたドメインとタイプを使ってアクセス制御を行います。
SELinuxはあくまでシステムに侵入された場合に、被害を最小限に抑えるための仕組みです。
そのため、SELinuxを有効にしているからと言って、ファイヤーウォールは不要というわけではありません。あしからず。
SELinxのチェックの流れ
①プロセスからのアクセス要求
プロセスには「ドメイン」と呼ばれるラベル(識別子)が付与されるます。
例)Webサーバーのプロセス(/usr/sbin/httpd)には「httpd_t」というドメイン
②SELinuxモジュールのアクセスチェック
ポリシーファイルには、プロセスに対応する「ドメイン」と、リソースに対応する「タイプ」がセットでアクセス設定されています。
TEがそれをチェックします。
例)Webページ(var/www内のファイル一式)には「httpd_sys_content_t」というタイプ
③ファイルへアクセス
アクセスが許可された場合、実際にファイルにアクセスを行います。
アクセスが拒否された場合は、アクセスが拒否されたことがログに記録されます。
確認
SELinuxが有効になっているかどうかは以下のコマンドで確認できます。
# getenforce Enforcing
enforcing:クセス制御が有効
permissive:警告を出力するが、アクセス制限は無効
disabled:アクセス制御が無効
SELnuxが原因でうまくファイルにアクセスできない場合は、permissiveモードに設定してログを確認しましょう。
setenforceコマンドで変更できます。
再起動後も設定の状態を保持するには、selinuxファイルを修正します。
# vi etc/sysconfig/selinux # This file controls the state of SELinux on the system. # SELINUX= can take one of these three values: # enforcing - SELinux security policy is enforced. # permissive - SELinux prints warnings instead of enforcing. # disabled - No SELinux policy is loaded. ##SELINUX=enforcing SELINUX=disabled
ドメインの確認
ドメインの確認はpsコマンドで可能です。
# ps -eZ LABEL PID TTY TIME CMD system_u:system_r:init_t 1 ? 00:00:00 init system_u:system_r:kernel_t 2 ? 00:00:00 migration/0 system_u:system_r:kernel_t 3 ? 00:00:00 ksoftirqd/0 system_u:system_r:kernel_t 4 ? 00:00:00 watchdog/0 ・・・
具体的な設定方法は別の機会に・・・