CentOS 6
Sponsored Link

SELinux : SELinuxコンテキスト
2016/07/26
 
ファイルやプロセスへのアクセス制御は、SELinux コンテキストにより決定され実行されます。
SELinux コンテキストは以下のような書式で表現されます。
⇒ [SELinux User]:[Role]:[Type]:[Level]
SELinux User :
SELinux ユーザーの属性
SELinux ポリシーにより Linux ユーザーは SELinux ユーザーにマッピングされる。
Role :
RBAC (Role Based Access Control) の属性
SELinux ユーザーのロールを定義する。
SELinux ポリシーにより、定義されたロールがどのドメインへアクセスできるかが制御される。
Type :
TE (Type Enforcement) の属性
プロセスに対してはドメインを定義し、ファイルに対してはタイプを定義する。
定義されたドメインからタイプへのアクセス制御設定を基にアクセス可否が決定される。
Level :
MLS (Multi Level Security) および MCS (Multi Category Security) の属性
レベルは [秘密度]:[カテゴリー] のペアで構成される。
ちなみに RHEL/CentOS のデフォルトである「targeted」ポリシーでは MCS を強制し、
そこでは s0 という秘密度しか存在しない。
カテゴリーは c0 ~ c1023 の 1024 個のカテゴリーがサポートされる。
なお MLS は Bell-La Padula 必須アクセスモデルを強制する。
RHEL/CentOS で利用するには MLS ポリシーの追加インストールが必要となる。
ちなみに X Window System はサポートなしのため、デスクトップ用途では利用できない。
[1] ファイルやプロセスの SELinux コンテキストを確認するには Z オプションを付加します。
# ファイル/ディレクトリ

[root@dlp ~]#
ls -Z /root

-rw-------. root root system_u:object_r:admin_home_t:s0 anaconda-ks.cfg
-rw-r--r--. root root system_u:object_r:admin_home_t:s0 install.log
-rw-r--r--. root root system_u:object_r:admin_home_t:s0 install.log.syslog
                      --------:--------:------------:------
                       User   : Role   : Type       : Level

# プロセス

[root@dlp ~]#
ps axZ

LABEL                             PID TTY      STAT   TIME COMMAND
system_u:system_r:init_t:s0         1 ?        Ss     0:00 /sbin/init
system_u:system_r:kernel_t:s0       2 ?        S      0:00 [kthreadd]
system_u:system_r:kernel_t:s0       3 ?        S      0:00 [migration/0]
.....
.....
system_u:system_r:getty_t:s0     1205 tty5     Ss+    0:00 /sbin/mingetty /dev/t
system_u:system_r:getty_t:s0     1207 tty6     Ss+    0:00 /sbin/mingetty /dev/t
unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 1212 ttyS0 Ss   0:00 -bash
system_u:system_r:initrc_t:s0    1225 ?        S      0:00 pickup -l -t fifo -u
unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 1226 ttyS0 R+   0:00 ps ax

# 自身のID

[root@dlp ~]#
id -Z

unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
[2] SELinux コンテキスト中の SELinux ユーザーは SELinux ポリシーによって Linux ユーザーにマッピングされています。
マッピング一覧は semanage コマンドで確認することができます。
[root@dlp ~]#
semanage login -l


Login Name                SELinux User              MLS/MCS Range

__default__               unconfined_u              s0-s0:c0.c1023
root                      unconfined_u              s0-s0:c0.c1023
system_u                  system_u                  s0-s0:c0.c1023


※ semanage コマンドが無い場合は以下のようにしてインストール

[root@dlp ~]#
yum -y install policycoreutils-python
 
上記の例 (CentOS 6 デフォルト) では、「root」は「unconfined_u」にマッピングされています。「system_u」にはシステムユーザーがマッピングされ、それら以外の Linux ユーザーは「__default__」にマッピングされて最終的に SELinux ユーザーである「unconfined_u」にマッピングされます。
「unconfined_u」ユーザーは、デフォルトで「unconfined_r」ロールが割り当てられ、「unconfined_u」が起動したプロセスは「unconfined_t」ドメインとして実行されます。
ちなみに「unconfined_t」ドメインが割り当てられたプロセスは、「unconfined」の意味からも推測できるように、SELinux の制限を受けないプロセスとなります。
SELinux の制限を受けないプロセスからのファイル/ディレクトリへのアクセスは、一般的な DAC (Discretionary Access Control) のみで制御されます。
プロセスの一覧から「unconfined_t」で検索すると、以下のように bash や ps 等、root 自身が起動したプロセスのみに「unconfined_t」が割り当てられていることが分かります。
[root@dlp ~]#
ps axZ | grep unconfined_t

unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 1212 ttyS0 Ss   0:00 -bash
unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 1231 ttyS0 R+   0:00 ps axZ
unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 1232 ttyS0 S+   0:00 grep unconfined_t
 
Tweet