CentOS 7
 

SELinux : SELinuxコンテキスト
2016/03/27
 
ファイルやプロセスへのアクセス制御は、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
                      --------:--------:------------:------
                       User   : Role   : Type       : Level

# プロセス

[root@dlp ~]#
ps axZ

LABEL                             PID TTY      STAT   TIME COMMAND
system_u:system_r:init_t:s0         1 ?        Ss     0:01 /usr/lib/systemd/syst
system_u:system_r:kernel_t:s0       2 ?        S      0:00 [kthreadd]
system_u:system_r:kernel_t:s0       3 ?        S      0:00 [ksoftirqd/0]
.....
.....
system_u:system_r:postfix_master_t:s0 916 ?    Ss     0:00 /usr/libexec/postfix/
system_u:system_r:postfix_pickup_t:s0 917 ?    S      0:00 pickup -l -t unix -u
system_u:system_r:postfix_qmgr_t:s0 918 ?      S      0:00 qmgr -l -t unix -u
system_u:system_r:kernel_t:s0     941 ?        S<     0:00 [kworker/1:1H]
system_u:system_r:kernel_t:s0     966 ?        S<     0:00 [kworker/0:1H]
system_u:system_r:kernel_t:s0    1246 ?        S<     0:00 [kworker/0:2H]

# 自身の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        Service

__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 7 デフォルト) では、「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 1435 ttyS0 Ss   0:00 -bash
unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 1556 ttyS0 R+   0:00 ps axZ
unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 1557 ttyS0 S+   0:00 grep --color=auto unconfined_t
 
Tweet