Product SiteDocumentation Site

5.4. Abilitare e disabilitare SELinux

Usare il comando /usr/sbin/getenforce o /usr/sbin/sestatus per verificare lo stato di SELinux. Il comando getenforce restituisce Enforcing, Permissive, o Disabilitato. Il comando getenforce restituisce Enforcing se SELinux è abilitato (sono imposte le regole di policy di SELinux):
$ /usr/sbin/getenforce
Enforcing

Il comando getenforce restituisce Permissive quando SELinux è abilitato, ma non sono imposte le sue regole di policy, restando valide solo le regole DAC. Se SELinux è disabilitato, il comando getenforce restituisce Disabilitato.
Il comando sestatus restituisce lo stato di SELinux e la policy in uso:
$ /usr/sbin/sestatus
SELinux status:                 enabled
SELinuxfs mount:                /selinux
Current mode:                   enforcing
Mode from config file:          enforcing
Policy version:                 23
Policy from config file:        targeted

SELinux status: enabled viene restituito quando SELinux è abilitato. Current mode: enforcing viene restituito quando SELinux è in esecuzione in modalità enforcing. Policy from config file: targeted viene restituito quando viene utilizzata la targeted policy di SELinux.

5.4.1. Abilitare SELinux

Nei sistemi in cui SELinux è disabilitato, nel file /etc/selinux/config si trova l'opzione SELINUX=disabled:
# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
#       enforcing - SELinux security policy is enforced.
#       permissive - SELinux prints warnings instead of enforcing.
#       disabled - No SELinux policy is loaded.
SELINUX=disabled
# SELINUXTYPE= can take one of these two values:
#       targeted - Targeted processes are protected,
#       mls - Multi Level Security protection.
SELINUXTYPE=targeted

Inoltre, il comando getenforce restituisce Disabilitato:
$ /usr/sbin/getenforce
Disabled

Per abilitare SELinux:
  1. Usare i comandi rpm -qa | grep selinux, rpm -q policycoreutils, ed rpm -qa | grep setroubleshoot, per verificare che i pacchetti di SELinux sono installati. Questa guida suppone che siano installati i pacchetti selinux-policy-targeted, selinux-policy, libselinux, libselinux-python, libselinux-utils, policycoreutils, setroubleshoot, setroubleshoot-server, setroubleshoot-plugins. Se non sono installati, come utente root, usare il comando yum install nome-del-pacchetto. I seguenti sono opzionali: policycoreutils-gui, setroubleshoot, selinux-policy-devel, e mcstrans.
  2. Prima di abilitare SELinux, occorre garantire che ogni file abbia un'etichetta di contesto di SELinux, Tenendo presente che i domini confinati potrebbero avere un divieto d'accesso, impedendo al sistema di avviarsi correttamente, configurare SELINUX=permissive in /etc/selinux/config:
    # This file controls the state of SELinux on the system.
    # SELINUX= can take one of these three values:
    #       enforcing - SELinux security policy is enforced.
    #       permissive - SELinux prints warnings instead of enforcing.
    #       disabled - No SELinux policy is loaded.
    SELINUX=permissive
    # SELINUXTYPE= can take one of these two values:
    #       targeted - Targeted processes are protected,
    #       mls - Multi Level Security protection.
    SELINUXTYPE=targeted
    
    
  3. Eseguire, come root, il comando reboot per riavviare il sistema. Al successivo riavvio, i file avranno una etichetta (o contesto di sicurezza). Un processo specializzato assegnerà a ciascun file un contesto di SELinux:
    *** Warning -- SELinux targeted policy relabel is required.
    *** Relabeling could take a very long time, depending on file
    *** system size and speed of hard drives.
    ****
    
    
    Ogni carattere * in basso rappresenta 1000 file già forniti di etichetta. Nell'esempio precedente, quattro caratteri * stanno ad indicare che 4000 file hanno il proprio contesto di sicurezza. Il tempo richiesto per etichettare tutti i file, dipende dal numero di file presenti nel sistema e dalla velocità degli hard disks. Nei sistemi più moderni, ciò può richiedere all'incirca 10 minuti.
  4. In permissive mode, SELinux policy is not enforced, but denials are still logged for actions that would have been denied if running in enforcing mode. Before changing to enforcing mode, as the Linux root user, run the grep "SELinux is preventing" /var/log/messages command as the Linux root user to confirm that SELinux did not deny actions during the last boot. If SELinux did not deny actions during the last boot, this command does not return any output. Refer to Capitolo 7, Risoluzione dei problemi for troubleshooting information if SELinux denied access during boot.
  5. Se non ci sono messaggi di divieto in /var/log/messages, configurare SELINUX=enforcing in /etc/selinux/config:
    # This file controls the state of SELinux on the system.
    # SELINUX= can take one of these three values:
    #       enforcing - SELinux security policy is enforced.
    #       permissive - SELinux prints warnings instead of enforcing.
    #       disabled - No SELinux policy is loaded.
    SELINUX=enforcing
    # SELINUXTYPE= can take one of these two values:
    #       targeted - Targeted processes are protected,
    #       mls - Multi Level Security protection.
    SELINUXTYPE=targeted
    
    
  6. Riavviare il sistema. Dopo il riavvio,verificare che getenforce restituisce Enforcing:
    $ /usr/sbin/getenforce
    Enforcing
    
    
  7. Come utente root, eseguire /usr/sbin/semanage login -l per vedere gli utenti di Linux applicati agli utenti di SELinux. Il risultato sarà simile a:
    Login Name                SELinux User              MLS/MCS Range
    
    __default__               unconfined_u              s0-s0:c0.c1023
    root                      unconfined_u              s0-s0:c0.c1023
    system_u                  system_u                  s0-s0:c0.c1023
    
    
Se è il risultato è diverso, eseguire come root, i seguenti comandi per risolvere l'applicazione tra utenti di Linux e utenti di SELinux. Si consiglia di ignorare, se presente, l'avviso Utente di SELinux nome-utente is already defined, dove nome-utente può essere unconfined_u, guest_u, o xguest_u:
  1. /usr/sbin/semanage user -a -S targeted -P user -R "unconfined_r system_r" -r s0-s0:c0.c1023 unconfined_u
    
    
  2. /usr/sbin/semanage login -m -S targeted -s "unconfined_u" -r s0-s0:c0.c1023 __default__
    
    
  3. /usr/sbin/semanage login -m -S targeted -s "unconfined_u" -r s0-s0:c0.c1023 root
    
    
  4. /usr/sbin/semanage user -a -S targeted -P user -R guest_r guest_u
    
    
  5. /usr/sbin/semanage user -a -S targeted  -P user -R xguest_r xguest_u
    
    

Importante

Nei sistemi in cui SELinux è in esecuzione in modalità permissive o disabilitato, gli utenti possono contrassegnare i file con contesti di sicurezza sbagliati. Inoltre, i file creati con SELinux disabilitato, sono privi di contesto di sicurezza. Ciò è fonte di problemi quando si cambia in modalità enforcing. Cambiando modalità di esecuzione di SELinux da disabilitato a permissive o enforcing, per prevenire entrambi i problemi citati, i file sono automaticamente attribuiti ai contesti di sicurezza.