2.0 2006-10-14
Caricare le politiche in un kernel SELinux in uso

Questa operazione richiede di appartenere al ruolo sysadm_r.

# semodule -B
Cambiare ruolo

La seguente operazione richiede che l'utente possa accedere al ruolo di destinazione. Questo esempio descrive come elevarsi al ruolo sysadm_r.

# newrole -r sysadm_r
Elencare i ruoli disponibili per un utente

Esiste una corrispondenza tra gli utenti di linux e le identità di SELinux. Le politiche utilizzano gli utenti generici di SELinux per configurazioni rilevanti sui ruoli; per esempio, per mettere in corrispondenza l'utente pebenito all'identità di SELinux staff_u, eseguire:

# semanage login -a -s staff_u pebenito

Questa politica non ha bisogno di venire ricaricata: se l'utente è connesso, è necessario che ripeta il processo di autenticazione affinchè la nuova politica abbia effetto.

Etichettare nuovamente il filesystem

Questa operazione richiede di appartenere al ruolo sysadm_r.

# rlpkg -a
Etichettare nuovamente un singolo pacchetto

Oltre alla possibilità di rietichettare l'intero filesystem, è possibile limitare il comando solamente ad un pacchetto di portage. Questa operazione richiede di appartenere al ruolo sysadm_r.

# rlpkg shadow sash

Viene utilizzato lo script rlpkg, che può ricevere come parametro un numero arbitrario di pacchetti.

Ricerca di librerie con riallocazione dei testi

SELinux fornisce diversi meccanismi di protezione per la memoria. Una funzione supportata permette la riallocazione dei testi ELF: una libreria di questo tipo ha una etichetta speciale, ed lo strumento rlpkg è dotato di una opzione per effettuarne la ricerca.

# rlpkg -t

Questa operazione verrà ripetuta automaticamente ad ogni nuova etichettatura.

Avviare i demoni nel dominio corretto

Controllare i demoni che vengono avviati tramite script di inizializzazione nella cartella /etc/init.d è leggermente differente in SELinux. Per assicurarsi che vengano avviati nel dominio corretto, occorre sempre utilizzare il comando run_init. Lo script di inizializzazione può venire eseguito normalmente, facendolo precedere dal comando run_init. Questo richiede di appartenere al ruolo sysadm_r.

# run_init /etc/init.d/ntpd start
# run_init /etc/init.d/apache2 restart
# run_init /etc/init.d/named stop
L'integrazione di Gentoo con run_init

Il comando run_init è stato integrato all'interno degli script di inizializzazione del sistema di Gentoo. Con SELinux installato, i servizi possono venire avviati ed interrotti normalmente, ma inoltre adesso autenticano l'utente.

# /etc/init.d/sshd restart
Authenticating root.
Password:
 * Stopping sshd...                       [ ok ]
 * Starting sshd...                       [ ok ]
Passare dal modo permissivo al modo rinforzato e viceversa

Il passaggio tra i due modi in SELinux è molto semplice: occorre solamente scrivere 1 per impostare il modo rinforzato (oppure 0 per quello permissivo) all'interno del file /selinux/enforce. Il modo in uso può venire individuato leggendo il file sopracitato: 0 identifica il modo permissivo, 1 quello rinforzato. Se l'opzione del kernel "NSA SELinux Development Support" non è stata impostata, il sistema si troverà sempre nel modo rinforzato, e non sarà possibile spostarsi nel modo permissivo.

Individuare il modo corrente
# cat /selinux/enforce
Passare al modo rinforzato
# echo 1 > /selinux/enforce
Passare al modo permissivo
# echo 0 > /selinux/enforce

Una macchina con l'opzione per il supporto allo sviluppo abilitato, può venire avviata nel modo rinforzato solamente aggiungendo enforcing=1 alla linea di comando del kernel all'interno del boot loader (GRUB, LiLo, etc).

Politiche gestite

In aggiunta alle opzioni del kernel descritte precedentemente, il modo può venire impostato all'avvio del sistema modificando il file /etc/selinux/config.

# 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

Le impostazioni di questo file saranno sovrascritte dalle opzioni a linea di comando del kernel descritte precedentemente.

Interpretare l'output di sestatus

Per ottenere informazioni dettagliate di SELinux riguardo allo stato del sistema si può fare riferimento all'utility sestatus. L'opzione -v fornisce dettagli maggiori sul contesto di processi e file. Affinchè Sestatus fornisca informazioni complete, occorre essersi autenticati come utente root (oppure esserlo diventati tramite su/sudo), nel ruolo sysadm_r. Il risultato verrà diviso in quattro sezioni:

SELinux status:         enabled
SELinuxfs mount:        /selinux
Current mode:           enforcing
Policy version:         18

Nella prima sezione vengono fornite informazioni riguardanti lo stato principale: la prima linea mostra se il kernel SELinux è presente ed è abilitato. Se risulta disabilitato, o il kernel non è stato compilato con il supporto ad SELinux, oppure la politica non è stata caricata. La seconda voce mostra il mount point per il filesystem di SELinux. Durante un normale utilizzo, il filesystem dovrebbe essere montato nella cartella di default /selinux. La terza linea mostra il modo di SELinux correntemente in uso, rinforzo oppure permissivo. La quarta voce mostra la versione del database delle politiche supportata dal kernel attualmente in uso.

Policy booleans:
secure_mode             inactive
ssh_sysadm_login        inactive
user_ping               inactive

La seconda sezione mostra lo stato delle variabili booleane delle politiche condizionali. Nella colonna di sinistra vengono mostrati i nomi delle variabili, mentre in quella di destra il loro stato (attivo o inattivo). Questa sezione non viene mostrata nei kernel con politiche di versione antecedenti alla 15, in quanto non supportano le politiche condizionali.

Process contexts:
Current context:        pebenito:sysadm_r:sysadm_t
Init context:           system_u:system_r:init_t
/sbin/agetty            system_u:system_r:getty_t
/usr/sbin/sshd          system_u:system_r:sshd_t

La terza sezione riguarda i contesti dei processi correnti, e le loro numerose chiavi. Se un processo non sta venendo eseguito nel contesto corretto, semplicemente non funzionerà correttamente.

File contexts:
Controlling term:       pebenito:object_r:sysadm_devpts_t
/sbin/init              system_u:object_r:init_exec_t
/sbin/agetty            system_u:object_r:getty_exec_t
/bin/login              system_u:object_r:login_exec_t
/sbin/rc                system_u:object_r:initrc_exec_t
/sbin/runscript.sh      system_u:object_r:initrc_exec_t
/usr/sbin/sshd          system_u:object_r:sshd_exec_t
/sbin/unix_chkpwd       system_u:object_r:chkpwd_exec_t
/etc/passwd             system_u:object_r:etc_t
/etc/shadow             system_u:object_r:shadow_t
/bin/sh                 system_u:object_r:bin_t -> system_u:object_r:shell_exec_t
/bin/bash               system_u:object_r:shell_exec_t
/bin/sash               system_u:object_r:shell_exec_t
/usr/bin/newrole        system_u:object_r:newrole_exec_t
/lib/libc.so.6          system_u:object_r:lib_t -> system_u:object_r:shlib_t
/lib/ld-linux.so.2      system_u:object_r:lib_t -> system_u:object_r:shlib_t

La quarta sezione mostra i contesti dei file controllati dai processi correnti, e le loro numerose chiavi. Per quanto riguarda i collegamenti simbolici, viene mostrato sia il contesto del collegamento che quello dell'oggetto riferito. Se ad un file è stato assegnato un contesto non corretto, può risultare inaccessibile o ottenere permessi non corretti per colpa di un particolare processo.