[3] SELinux – Context

14 marca 2022 Wyłączono przez Adam [zicherka] Nogły

Kontrola dostępu do plików lub katalogów jest kontrolowana przez dodatkowe informacje zwane Kontekstem SELinux.

Kontekst SELinux ma następującą składnię.

[Użytkownik SELinux]:[Rola]:[Typ]:[Poziom]

  • Użytkownik SELinux:
    • Atrybut użytkownika SELinux
    • Każdy użytkownik systemu Linux jest mapowany na użytkownika SELinux przez zasady SELinux.
  • Rola:
    • Atrybut RBAC (kontrola dostępu oparta na rolach)/(Role Based Access Control)
    • Definiuje role użytkownika SELinux.
    • Kontroluje dostępy, których zdefiniowana rola może uzyskać dostęp do domen przez politykę SELinux.
  • Typ :
    • Atrybut TE (Egzekwowanie typu)/ (Type Enforcement)
    • Definiuje domeny dla procesów, a także definiuje typy dla plików.
  • Poziom :
    • Atrybut MLS (Multi Level Security) i MCS (Multi Category Security)
    • Poziom ma składnię [czułość]:[kategoria]/[sensitivity]:[category]

Polityka [targeted], która jest domyślną polityką w RHEL/CentOS wymusza MCS i jest używana tylko z czułością [s0] w polityce. Ale dla kategorii jest obsługiwany c0-c1023.

MLS wymusza obowiązkowy model dostępu Bell-La Padula (Bell-La Padula Mandatory Access Model).

Jeśli chcesz z niego korzystać, musisz zainstalować pakiet zasad MLS na RHEL/CentOS. Ale nie obsługuje on X Window System, więc nie można go używać w środowisku pulpitu.

[1] Aby wyświetlić konteksty SELinux dla plików lub procesów, dodaj opcję [Z] do poleceń.

# pliki/katalogi
[root@vlsr01 ~]# ls -lZ /root
razem 56
-rw-r--r--. 1 root root unconfined_u:object_r:admin_home_t:s0   219 03-13 19:39 acl.txt
-rw-r-----. 1 root root system_u:object_r:admin_home_t:s0      1326 03-06 09:48 anaconda-ks.cfg
-rw-------. 1 root root system_u:object_r:mail_home_t:s0      45224 03-14 03:45 dead.letter

# procesy
[root@vlsr01 ~]# ps axZ
LABEL                               PID TTY      STAT   TIME COMMAND
system_u:system_r:init_t:s0           1 ?        Ss     0:02 /usr/lib/systemd/systemd --
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]
system_u:system_r:kernel_t:s0         6 ?        I<     0:00 [kworker/0:0H-events_highpr
. . . . .

# własny ID
[root@vlsr01 ~]# id -Z
unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023

[2] Każdy użytkownik systemu Linux jest mapowany na użytkownika SELinux przez zasady SELinux. Możliwe jest wyświetlenie listy mapowania w następujący sposób.

# jeżeli polecenie [semanage] nie jest dostępne, zainstaluj go
[root@vlsr01 ~]# dnf install policycoreutils-python-utils
[root@vlsr01 ~]# semanage login -l
Login                Użytkownik SELinuksa Zakres MLS/MCS       Usługa
__default__          unconfined_u         s0-s0:c0.c1023       *
root                 unconfined_u         s0-s0:c0.c1023       *

W powyższym przykładzie (RHEL/CentOS Default), [root] jest mapowany na [unconfined_u]. Inni zwykli użytkownicy są mapowani do [__default__] raz, a ostatecznie do [unconfined_u].

Użytkownicy [unconfined_u] mają przypisaną rolę [unconfined_t], a procesy uruchamiane przez użytkowników [unconfined_u], są uruchamiane jako domena [unconfined_t].

Procesy, którym przypisana jest domena [unconfined_t], nie są kontrolowane przez SELinux.

[root@vlsr01 ~]# ps axZ | grep unconfined_t
unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 240706 ? Ss   0:00 /usr/lib/systemd/systemd --user
unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 240717 ? S   0:00 sshd: root@pts/0
unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 240718 pts/0 Ss   0:00 -bash
unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 241358 pts/0 R+   0:00 ps axZ
unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 241359 pts/0 R+   0:00 grep --color=auto unconfined_t