Iniziare con SELinux

By | Novembre 29, 2018

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.

2 thoughts on “Iniziare con SELinux

  1. Pingback: Obiettivi esame RHCE 7 - prometheusproject

  2. Pingback: RHEL7: Aggiungere porte non standard con SELinux - prometheusproject

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.