Iniziare con SELinux
SELinux è un Mandatory Access Control (MAC), sviluppato dalla NSA. SELinux è stato sviluppato come sostituto del Discretionary Access Control (DAC) fornito con la maggior parte delle distribuzioni Linux.
La differenza tra i controlli di accesso discrezionali e i controlli di accesso obbligatori è il mezzo con cui gli utenti e le applicazioni ottengono l’accesso alle macchine. Tradizionalmente, il comando sudo dà a un utente la possibilità di aumentare le autorizzazioni a livello di root. L’accesso root su un sistema DAC consente alla persona o al programma con autorizzazione di accesso root di eseguire cio che si vuole su una macchina.
Idealmente, la persona con accesso root dovrebbe essere ritenuta affidabile. Ma se la sicurezza è stata compromessa, anche il sistema di conseguenza è compromesso. SELinux e MAC risolvono questo problema sia confinando i processi privilegiati sia automatizzando la creazione delle policy di sicurezza.
Il valore predefinito di SELinux è negare tutto ciò che non è esplicitamente consentito. SELinux ha modalità globali, permissive e enforcing. La modalità permissive consente al sistema di funzionare come un sistema di controllo degli accessi discrezionali, mentre registra ogni violazione su SELinux. La modalità enforcing invece impone una rigida negazione dell’accesso a tutto ciò che non è esplicitamente consentito. Per consentire esplicitamente determinati comportamenti su una macchina, tu, come amministratore di sistema, devi scrivere dei regole che lo possano consentire.
Nota: Non è consigliabile disabilitare SELinux. Ma se desideri disabilitare SELinux puoi leggere guesta breve guida.
Aggiornare il tuo sistema:
yum update -y
Installare SELinux
Su CentOS 7 la maggior parte dei pacchetti SELinux sono installati di default. Guardare per vedere quali pacchetti sono installati:
rpm -aq | grep selinux
Se hai a che fare con un server CentOS 7 appena installato, il tuo output dovrebbe essere:
[root @ centos ~] # rpm -aq | grep selinux libselinux-utils-2.5-6.el7.x86_64 libselinux-2.5-6.el7.x86_64 libselinux-python-2.5-6.el7.x86_64 selinux-policy-3.13.1-102.el7_3.16.noarch selinux-policy-targeted-3.13.1-102.el7_3.16.noarch
Installare i seguenti pacchetti e le loro dipendenze associate:
yum -y install policycoreutils policycoreutils-python selinux-policy selinux-policy-targeted libselinux-utils setools setools-console
Facoltativamente, installa setroubleshoot-server e mctrans. Il server di risoluzione dei problemi (setroubleshoot-server) consente, tra le altre cose, di mandare le notifiche di violazione per e-mail.Il demone mctrans traduce l’output di SELinux in testo leggibile.
SELinux Modes
SELinux ha due modalità: Enforcing e Permissive:
Enforcing: in Enforcing mode, vengono applicate policy severe sul sistema. Le cose che non sono permesse, non potranno funzionare in nessuna circostanza.
Permissive: in modalità Permissive, il tuo sistema non è protettoma registra invece qualsiasi violazione in un file.
È possibile verificare in quale modalità si trova il sistema eseguendo il comando getenforce:
[root@centos ~ ]# getenforce Enforcing
È inoltre possibile recuperare ulteriori informazioni utilizzando sestatus:
[root@centos ~]# sestatus SELinux status: enabled SELinuxfs mount: /sys/fs/selinux SELinux root directory: /etc/selinux Loaded policy name: targeted Current mode: enforcing Mode from config file: permissive Policy MLS status: enabled Policy deny_unknown status: allowed Max kernel policy version: 28
Devi impostare SELinux su permissive, in modo che tu possa creare policy sul tuo sistema. Dopo aver cambiato la modalità, devi riavviare il sistema.
[root@centos ~]# setenforce 0 [root@centos ~]# getenforce Permissive [root@centos ~]# reboot
Ora che SELinux è impostato su Permissive, puoi visualizzare il registro delle violazioni della privacy utilizzando:
grep "selinux" /var/log/messages
L’output sarà molto simile a questo:
[root@centos ~]# grep "selinux" /var/log/messages Jun 26 12:27:16 li482-93 yum[4572]: Updated: selinux-policy-3.13.1-102.el7_3.16.noarch Jun 26 12:27:38 li482-93 yum[4572]: Updated: selinux-policy-targeted-3.13.1-102.el7_3.16.noarch Jun 26 16:38:15 li482-93 systemd: Removed slice system-selinux\x2dpolicy\x2dmigrate\x2dlocal\x2dchanges.slice. Jun 26 16:38:15 li482-93 systemd: Stopping system-selinux\x2dpolicy\x2dmigrate\x2dlocal\x2dchanges.slice. Jun 26 16:54:46 li482-93 systemd: Removed slice system-selinux\x2dpolicy\x2dmigrate\x2dlocal\x2dchanges.slice. Jun 26 16:54:46 li482-93 systemd: Stopping system-selinux\x2dpolicy\x2dmigrate\x2dlocal\x2dchanges.slice. Jun 26 16:55:45 li482-93 kernel: EVM: security.selinux Jun 26 17:33:43 li482-93 kernel: EVM: security.selinux Jun 26 17:36:21 li482-93 kernel: EVM: security.selinux
Il file che contiene gli stati di sicurezza del sistema si trova in /etc/selinux/config, puoi modificare quel file per cambiare lo stato del sistema.
vi /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 three two values: # targeted - Targeted processes are protected, # minimum - Modification of targeted policy. Only selected processes are protected. # mls - Multi Level Security protection. SELINUXTYPE=targeted
Le righe senza commento possono essere modificate in qualsiasi stato. Dopo aver modificato lo stato devi riavviare la macchina affinché le modifiche abbiano effetto.
SELinux Context
Prima di passare allo stato di applicazione forzata(enforcing), devi comprendere cosa sono i context (contesti)
[root@centos ~]# useradd user [root@centos ~]# su user [user@centos ~]$ cd ~/ && mkdir test [user@centos ~]$ ls -Z drwxrwxr-x. user user unconfined_u:object_r:user_home_t:s0 test
L’output di ls -Z può sembrare familiare, ma il flag di contesto -Z stampa il contesto di sicurezza SELinux di qualsiasi file.
SELinux segna ogni singolo oggetto su una macchina con un contesto (context). Ciò significa che ogni file, daemon e processo ha un context. Il contectx è suddiviso in tre parti: utente, ruolo e tipo. In SELinux, una politica controlla quali utenti possono ottenere quali ruoli. Ogni ruolo specifico pone un vincolo sul tipo di file che l’utente può inserire. Quando un utente accede a un sistema, viene assegnato un ruolo, che può essere visto nell’esempio ls -Z di cui sopra: l’output unconfined_u è un ruolo utente.
SELinux Boolean
Un SELinux Boolean è una variabile che può essere attivata e disattivata senza dover ricaricare o ricompilare un criterio. È possibile visualizzare l’elenco delle variabili booleane utilizzando il comando getsebool -a. È una lunga lista, quindi puoi filtrarla attraverso grep per restringere i risultati:
[root@centos ~]# getsebool -a | grep xdm xdm_bind_vnc_tcp_port --> off xdm_exec_bootloader --> off xdm_sysadm_login --> off xdm_write_home --> off
È possibile modificare il valore di qualsiasi variabile utilizzando il comando setsebool. Se imposti il flag -P, l’impostazione persisterà con i riavvii. Se si desidera consentire a un servizio come openVPN di essere eseguito nel proprio sistema senza essere tracciato, è necessario modificare la variabile booleana dei criteri:
[root@centos ~]# getsebool -a | grep "vpn" openvpn_can_network_connect --> on openvpn_enable_homedirs --> on openvpn_run_unconfined --> off [root@centos ~]# setsebool -P openvpn_run_unconfined ON [root@centos ~]# getsebool -a | grep "vpn" openvpn_can_network_connect --> on openvpn_enable_homedirs --> on openvpn_run_unconfined --> on
Ora, è possibile utilizzare OpenVPN senza restrizioni o in modalità permissiva sul sistema, anche se è attivamente in modalità di imposizione. Imposta il tuo sistema per far rispettare e lascia che SELinux protegga il tuo sistema.
[root@centos ~]# setenforce 1 [root@centos ~]# getenforce Enforcing
SELinux è molto complicato ma può giocare un ruolo fondamentale nell’amministrazione e nella sicurezza del proprio sistema, specialmente una volta che è stato padroneggiato.