Povinné řízení přístupu

Aleš Horna, xhorna@fi.muni.cz

Obsah

Discretionary Access Control

Access Control Lists

Mandatory Access Control

SELinux

SELinux instalace Arch

Přes build script:
$ git clone https://github.com/archlinuxhardened/selinux.git
$ cd selinux
$ ./recv_gpg_keys.sh
$ ./build_and_install_all.sh
Také je možno instalovat přes pacman s přidáním repozitáře nebo přes AUR. Více zde: https://wiki.archlinux.org/title/SELinux#Installation

Nastavení

Módy

SELinux může operovat ve třech módech Pro zjištění současného módu a dalších informací lze využít příkaz sestatus případně getenforce. Příklad výstupu z aisy:
        SELinux status:                 enabled
        SELinuxfs mount:                /sys/fs/selinux
        SELinux root directory:         /etc/selinux
        Loaded policy name:             targeted
        Current mode:                   permissive
        Mode from config file:          permissive
        Policy MLS status:              enabled
        Policy deny_unknown status:     allowed
        Max kernel policy version:      31
    
Pro nastavení lze využít příkaz setenforce s argumenty 0 (Permissive) či 1 (Enforcing).

Labels

Všechny soubory a procesy mají nastaveny label, který popisuje jejich zabezpečení. Lze jej zobrazit pomocí ls -Z. Label je ve formátu user:role:type:level. Na systémech s DAC se nejdříve zkontrolují DAC pravidla a až eventuelně poté SELinux politiky. Výchozí hodnoty jsou nastaveny dle rodičovského adresáře.
Příklad z aisy:
    -rw-r--r--. xhorna student system_u:object_r:nfs_t:s0       file.txt
    
Programy pro správu labelů: chcon, semanage fcontext, restorecon.

Booleans

Policies

Každá pravidlo politiky popisuje interakci mezi subjektem a objektem:
        ALLOW apache_process apache_log:FILE READ;
    
Vytváření vlastní politiky
Vygenerování vlastní politiky pro démona /usr/local/bin/mydaemon Přejato z: https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/8/html/using_selinux/writing-a-custom-selinux-policy_using-selinux
        $ sepolicy generate --init /usr/local/bin/mydaemon
        Created the following files:
        /home/example.user/mysepol/mydaemon.te # Type Enforcement file
        /home/example.user/mysepol/mydaemon.if # Interface file
        /home/example.user/mysepol/mydaemon.fc # File Contexts file
        /home/example.user/mysepol/mydaemon_selinux.spec # Spec file
        /home/example.user/mysepol/mydaemon.sh # Setup Script
    
Pro vytváření politik a pravidel z logů lze použít audit2allow Přidat pravidlo do politiky:
    echo "allow mydaemon_t var_log_t:file { open write getattr };" >> mydaemon.te
    
Znovu sestavit politiku pomocí vytvořeného skriptu:
    ./mydaemon.sh
    
Politiku lze aplikovat i na kontejnery.

AppArmor

Instalace Arch Linux

        pacman -S apparmor
        systemctl enable --now apparmor.service
    
Pro povolení AppArmoru je třeba nastavit parametry kernelu:
        lsm=landlock,lockdown,yama,integrity,apparmor,bpf
    
Při použití vlastního kernelu je třeba využít volby:
        CONFIG_SECURITY_APPARMOR=y
        CONFIG_AUDIT=y
    

Konfigurace

Profily

Příklad profilu z dokumentace
        #include 

        profile test /usr/lib/test/test_binary {
            #include 

            # Main libraries and plugins
            /usr/share/TEST/** r,
            /usr/lib/TEST/** rm,

            # Configuration files and logs
            @{HOME}/.config/ r,
            @{HOME}/.config/TEST/** rw,
        }
    
Profily obsahují nastavení přístupových práv:

Použití

Následující pasáž je parafráze manuálu.
Na otestování, zdali je AA zapnutý:
    $ aa-enabled
Vypsání statusu:
    # aa-status

    apparmor module is loaded.
    44 profiles are loaded.
    44 profiles are in enforce mode.
     ...
    0 profiles are in complain mode.
    0 processes have profiles defined.
    0 processes are in enforce mode.
    0 processes are in complain mode.
    0 processes are unconfined but have a profile defined.
Vypnutí:
    $ aa-teardown
Přepnutí módů:
# enforce mode
    $ aa-enforce
# complain mode
    $ aa-complain

Tomoyo Linux

Literatura