CentOS Stream 9
Sponsored Link

SELinux : SELinux コンテキスト
2022/03/11
 
ファイルやプロセスへのアクセス制御は、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 -lZ /root

total 4
-rw-------. 1 root root system_u:object_r:admin_home_t:s0 1100 Nov 25 18:08 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/systemd --switched-root --system --deserialize 31
system_u:system_r:kernel_t:s0         2 ?        S      0:00 [kthreadd]
system_u:system_r:kernel_t:s0         3 ?        I<     0:00 [rcu_gp]
system_u:system_r:kernel_t:s0         4 ?        I<     0:00 [rcu_par_gp]
.....
.....
unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 1204 ? Ss   0:00 /usr/lib/systemd/systemd --user
system_u:system_r:init_t:s0        1206 ?        S      0:00 (sd-pam)
unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 1213 ttyS0 Ss   0:00 -bash
unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 1238 ttyS0 R+   0:00 ps axZ
unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 1239 ttyS0 S+   0:00 tail -5

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

* semanage コマンドが無い場合はインストール

[root@dlp ~]#
dnf -y install policycoreutils-python-utils
 
上記の例 (CentOS Stream 9 デフォルト) では、[root] は [unconfined_u] にマッピングされています。
[root] 以外の 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 1204 ? Ss   0:00 /usr/lib/systemd/systemd --user
unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 1213 ttyS0 Ss   0:00 -bash
unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 1249 ttyS0 R+   0:00 ps axZ
unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 1250 ttyS0 S+   0:00 grep --color=auto unconfined_t
関連コンテンツ