openSUSE Leap 16

SELinux : SELinux コンテキスト2025/10/22

 

ファイルやプロセスへのアクセス制御は、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) の属性
レベルは [秘密度]:[カテゴリー] のペアで構成される。
SUSE のデフォルトである [targeted] ポリシーでは MCS を強制し、
そこでは s0 という秘密度しか存在しない。
カテゴリーは c0 ~ c1023 の 1024 個のカテゴリーがサポートされる。

[1] ファイルやプロセスの SELinux コンテキストを確認するには Z オプションを付加します。
# ファイル/ディレクトリ

dlp:~ #
ls -lZ /root

total 4
-rw-------. 1 root root unconfined_u:object_r:admin_home_t:s0 547 Oct 22 09:13 .bash_history
drwx------. 1 root root system_u:object_r:gpg_secret_t:s0       0 Jan 28  2025 .gnupg
drwx------. 1 root root system_u:object_r:ssh_home_t:s0        30 Oct  9 14:05 .ssh
drwxr-xr-x. 1 root root system_u:object_r:bin_t:s0              0 Jan 28  2025 bin
                        ---------:--------:-------------:------
                         User    :  Role   : Type         : Level

# プロセス

dlp:~ #
ps axZ

LABEL                               PID TTY      STAT   TIME COMMAND
system_u:system_r:init_t:s0           1 ?        Ss     0:00 /usr/lib/systemd/systemd --switched-root --system --deserialize=47 serial
system_u:system_r:kernel_t:s0         2 ?        S      0:00 [kthreadd]
system_u:system_r:kernel_t:s0         3 ?        S      0:00 [pool_workqueue_release]
system_u:system_r:kernel_t:s0         4 ?        I<     0:00 [kworker/R-kvfree_rcu_reclaim]
system_u:system_r:kernel_t:s0         5 ?        I<     0:00 [kworker/R-rcu_gp]
system_u:system_r:kernel_t:s0         6 ?        I<     0:00 [kworker/R-sync_wq]
system_u:system_r:kernel_t:s0         7 ?        I<     0:00 [kworker/R-slub_flushwq]
system_u:system_r:kernel_t:s0         8 ?        I<     0:00 [kworker/R-netns]
system_u:system_r:kernel_t:s0         9 ?        I      0:00 [kworker/0:0-events]
system_u:system_r:kernel_t:s0        10 ?        I      0:00 [kworker/0:1-cgroup_destroy]
system_u:system_r:kernel_t:s0        11 ?        I<     0:00 [kworker/0:0H-kblockd]
system_u:system_r:kernel_t:s0        12 ?        I      0:00 [kworker/u8:0-ipv6_addrconf]
system_u:system_r:kernel_t:s0        13 ?        I<     0:00 [kworker/R-mm_percpu_wq]
system_u:system_r:kernel_t:s0        14 ?        I      0:00 [rcu_tasks_kthread]
.....
.....

# 自身の ID

dlp:~ #
id -Z

unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
[2] SELinux コンテキスト中の SELinux ユーザーは SELinux ポリシーによって Linux ユーザーにマッピングされています。
マッピング一覧は [semanage] コマンドで確認することができます。
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       *
 

上記の例 (SUSE デフォルト) では、[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] が割り当てられていることが分かります。
dlp:~ #
ps axZ | grep unconfined_t

unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 1075 ? Ss   0:00 /usr/lib/systemd/systemd --user
unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 1086 ttyS0 Ss   0:00 -bash
unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 1174 ? Ssl   0:00 /usr/libexec/gvfs/gvfsd
unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 1180 ? Sl   0:00 /usr/libexec/gvfs/gvfsd-fuse /run/user/0/gvfs -f
unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 1320 ttyS0 R+   0:00 ps axZ
unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 1321 ttyS0 S+   0:00 grep --color=auto unconfined_t
関連コンテンツ