Persone Online: Visitatori: 25 Iscritti: 0 Totale: 25
Effemeridi
In questo giorno... 1783 François de Rozier e il Marchese d'Arlandres fecero il primo volo umano quando lasciarono il terreno da Bois de Boulogne, Paris, in un pallone ad aria calda costruito dai fratelli Montgolfier
Copyright (c) 2006 da Red Hat, Inc. ed altri. Questo materiale può essere
distribuito solo soggetto ai termini e condizioni fissati nella Open
Publication License, v1.0, disponibile su http://www.opencontent.org/openpub/.
Garrett LeSage ha creato le grafiche di ammonizione (note, tip, important, caution,
and warning). Tommy Reynolds <Tommy.Reynolds@MegaCoder.com>
ha creato la grafica di callout. Queste possono essere liberamente redistribuite con
la documentazione prodotta per il Fedora Project.
FEDORA, FEDORA PROJECT, ed il Fedora Logo sono marchi di Red Hat, Inc.,
sono registrati od in attesa di registrazione negli U.S. ed in altri paesi, e
sono usati qui sotto licenza alla Fedora Project.
Red Hat ed il logo Red Hat "Shadow Man" sono marchi registrati di Red Hat, Inc.
negli Stati Uniti ed in altri paesi.
Tutti gli altri marchi e copyrights a cui si fa riferimento sono proprietà
dei rispettivi proprietari.
Diario delle Revisioni
Revisione 1.5.6
2006-04-28
CS
Fissate bz #18727, bz#139744, bz#144696, bz#147915, e
bz#190181; altri fix, inclusi quelli da
http://fedoraproject.org/wiki/SELinux/FAQ/ProposedAdditions
Revisione 1.5.5
2006-04-07
KW
Fissata bz #188219; fix sulle note legali.
Revisione 1.5.4
2006-03-21
CS
Aggiornate le locazioni dei files di log per la versione FC5,
aggiunte le FAQ dei domini targeted
Revisione 1.5.3
2006-03-21
CS
Numerosi aggiornamenti dei contenuti per il rilascio di FC5
Revisione 1.5.2
2006-02-10
PWF
Rese le ammonizioni più facilmente mantenibili
Revisione 1.5.1
2006-02-05
PWF
Editing di stile e leggibilità; chiarificazioni su alcuni
elementi
Le informazioni in questa FAQ sono preziose per coloro che si affacciano a SELinux. Sono anche di valore se siete nuovi alle ultime implementazioni SELinux. in Fedora Core, poichè alcuni comportamenti potrebbero essere differenti da come siete abituati.
Per maggiori informazioni su come funziona SELinux, come usare SELinux per le distribuzioni Linux in generale o nello specifico, e come scrivere policy, queste sono risorse utili:
Per cambiamenti o aggiunte alla Fedora SELinux FAQ, usate questo bugzilla template, che precompila la maggior parte della segnalazione d'errore. Le patches dovranno essere un diff -u verso l'XML, che è disponibile dal CVS (fate riferimento a http://fedora.redhat.com/projects/docs/ per i dettagli su come ottenere il modulo fedora-docs/selinux-faq da CVS anonimo; potete ottenere il solo modulo fedora-docs/selinux-faq se non volete l'intero albero fedora-docs.) Altrimenti, del testo piano che mostri prima e dopo è sufficiente.
SELinux (Security-Enhanced Linux) in Fedora Core è un implementazione del mandatory access control nel kernel di Linux usando il framework Linux Security Modules (LSM). La sicurezza standard di Linux è un modello discretionary access control.
Discretionary access control (DAC)
DAC è la sicurezza standard di Linux, e non fornisce protezione da software corrotto o malevolo eseguito come utente normale o root. Gli utenti possono assegnare rischiosi livelli di accesso ai files che possiedono.
Mandatory access control (MAC)
MAC fornisce pieno controllo su tutte le iterazioni del software. Policy definite amministrativamente controllano da vicino le iterazioni fra utenti e processi con il sistema, e possono fornire protezione da software corrotto o malevolo eseguito sotto qualsiasi utente.
In un modello DAC, i file e le risorse decisionali sono basate solamente sull'identità utente e il proprietario degli oggetti. Ogni utente e programma eseguito da quell'utente ha completa discrezione sugli oggetti dell'utente. Software malizioso o difettoso può fare qualsiasi cosa con i files e le risorse controllate attraverso l'utente che ha avviato i processi. Se l'utente è il super-user o l'applicazione è setuid o setgid root, il processo può avere un livello di controllo root sull'intero file system.
Un sistema MAC non soffre di questi problemi. Primo, potete definire amministrativamente una policy di sicurezza su tutti i processi ed oggetti. Secondo, potete controllare tutti i processi e gli oggetti, nel caso di SELinux mediante il kernel. Terzo, le decisioni sono basate su tutte le informazioni di sicurezza rilevanti disponibili, e non solo sulla identità utente autenticata.
Il MAC sotto SELinux permette di fornire permessi granulari per tutti i soggetti (utenti, programmi, processi) ed oggetti (files, devices). In pratica, pensate ai soggetti come processi, ed gli oggetti come lo scopo di un operazione di un processo. Potete garantire con sicurezza ad un processo solo i permessi che gli occorrono per eseguire la sua funzione, e niente di più.
L'implementazione di SELinux usa un role-based access control (RBAC), che fornisce un astrazione di controllo a livello-utente basata su ruoli, e sui Type Enforcement® (TE). TE usa una tabella o matrice per manipolare i controlli di accesso, forzando le regole della policy basate sui tipi di processo ed oggetto. I tipi di processo sono chiamati domini, ed un riferimento incrociato sulla matrice dei domini dei processi e del tipo degli oggetti definisce la loro interazione. Questo sistema fornisce un controllo estremamente granulare per gli attori in un sistema Linux.
D:
Cos'è una policy SELinux?
R:
La policy SELinux descrive i permessi di accesso per tutti i soggetti e gli oggetti, ovvero, l'intero sistema degli utenti, programmi, e processi ed i files ed i devices su cui agiscono. La policy di Fedora Core è contenuta in un pacchetto, con una pacchetto sorgente associato. Attualmente i pacchetti che contengono le policy sono:
selinux-policy-<versione>.noarch.rpm
Questo pacchetto è comune a tutti i tipi di policy e contiene files di configurazione/pagine man. Questo include i files di interfaccia per l'ambiente di sviluppo. Questo sostituisce il passato pacchetto -sources. Questo pacchetto contiene i files di interfaccia usati nella Reference Policy assieme ad un Makefile ed un piccolo strumento chiamato policygentool usato per generare un file template di policy. L'interfaccia risiede nella directory /usr/share/selinux/devel/headers. Se volete vedere tutto dei files della policy usata per compilare la Reference Policy avete bisogno di installare il src.rpm.
I files della policy e di supporto, si trovano nella subdirectory /etc/selinux/policyname/. Le subdirectory includono
policy binari della policy che vengono caricati nel kernel
contexts policy contesto/etichettatura usate per far prendere le decisioni di etichettatura ai programmi come restorecon e fixfiles
modules contenitore per i moduli della policy che sono combinati per fare la policy del kernel binaria. Nota che questa annotazione potrebbe essere editata a mano, in quanto è una risorsa privata di libsemanage.
Inizialmente, quando SELinux fu incluso in Fedora Core, fu forzato l'uso della policy strict di NSA. A scopo di prova, questo espose effettivamente centinaia di problemi nella strict policy. In più, dimostrò che applicare una singola strict policy ai molteplici ambienti degli utenti Fedora non era fattibile. Per amministrare una singola strict policy per qualsiasi cosa diversa dall'installazione standard richiederebbe una perizia locale.
A questo punto, gli sviluppatori SELinux rividero le loro scelte, e decisero di provare una strategia differente. Decisero di creare una policy targeted che bloccasse specifici demoni, specialmente quelli più vulnerabili agli attacchi o più devastanti per il sistema se corrotti o compromessi. Il resto del sistema è eseguito esattamente come se fosse sotto la sicurezza standard DAC di Linux.
Sotto la policy targeted, molti processi sono eseguiti nel dominio unconfined_t. Come implica il nome, questi processi non sono per lo più confinati dalla policy SELinux. Questi, comunque, sono ancora governati dalla sicurezza standard DAC di Linux.
Quei demoni di rete che sono indirizzati nella policy targeted transitano nella policy targeted quando le applicazioni vengono avviate. Per esempio, al boot del sistema, init viene eseguito sotto la policy unconfined_t, ma quando named viene avviato, transita sotto il dominio named_t ed è bloccato dalla policy appropriata.
Per maggiori informazioni sull'abilitazione e disabilitazione della policy targeted per ognuno dei specifici demoni, fate riferimento a How to use system-config-securitylevel.
La policy strict su Fedora Core funziona. E' sfidata dagli ambienti unici dei differenti utenti. Per usare la strict policy nel vostro ambiente, avrete bisogno di calibrare finemente sia la policy che i sistemi.
Per rendere semplice l'uso della strict policy, gli sviluppatori SELinux hanno provato a rendere semplice il cambiamento da un policy all'altra. Per esempio, system-config-securitylevel esegue una rietichettatura negli scripts di avvio.
La policy mls è simile alla policy strict, ma aggiunge ulteriori campi ai contesti di sicurezza per separarne i livelli. SELinux può usare questi livelli per separare i dati in un ambiente che richieda una stretta separazione gerarchica. Un tipico esempio è l'ambiente militare, dove i dati ad un certo livello sono classificati. Questa policy è rivolta a questa sorta di ambienti, e probabilmente non vi è utile a meno di non ricadere in questa categoria.
La Reference Policy è un nuovo progetto mantenuto da Tresys Technology (http://www.tresys.com/) disegnato per riscrivere l'intera policy SELinux in modo che sia più facile da usare e comprendere. Per fare questo, usa i concetti di modularità, astrazione, ed ben definite interfacce. Fate riferimento a http://serefpolicy.sourceforge.net/ per maggiori informazioni sulla Reference Policy.
Nota che la Reference Policy non è un nuovo tipo di policy, come la targeted o la strict. Piuttosto, è una nuova base da cui poter costruire quelle policies. Le policies targeted, strict, e mls possono essere compilate dalla Reference Policy. Infatti uno degli obbiettivi del disegno della Reference Policy è quello di avere un singolo, unificato albero dei sorgenti per le differenti varianti di policy.
Le policies di Fedora nella versione 1.x sono basate sull'esempio della policy tradizionale. Le policies della versione 2.x (usate in Fedora Core 5) sono basate sulla Reference Policy.
D:
Cosa sono i file contexts?
R:
I File contexts sono usati dal comando setfiles per generare etichette persistenti che descrivono il contesto di sicurezza per un file o una directory.
Fedora Core viene distribuita con lo script fixfiles, che supporta tre opzioni: check, restore, e relabel. Questo script permette agli utenti di rietichettare il file system senza aver installato il pacchetto selinux-policy-targeted-sources. L'uso della linea di comando è molto più amichevole rispetto al comando setfiles standard.
D:
Come vedo il contesto di sicurezza di un file, un utente, o un processo?
R:
La nuova opzione -Z è il metodo più immediato per mostrare il contesto di un soggetto o di un oggetto:
ls -alZ file.foo id -Z ps -eZ
D:
Che differenza c'è fra un dominio ed un tipo?
R:
Non c'è differenza fra un dominio ed un tipo, comunque il dominio è talvolta usato per riferirsi al tipo di processo. L'uso del dominio in questo modo discende dal modello Domain and Type Enforcement (DTE), dove i domini ed i tipi sono separati.
D:
Cosa sono i moduli della policy?
R:
Prima di Fedora Core 5, le policies SELinux erano monolitiche, significando che erano compilate in un singolo binario di policy. Per fare dei cambiamenti o aggiunte a quella policy, un amministratore doveva cambiare l'intera policy. Con Fedora Core 5, la policy è ora modulare. Ciò significa che sviluppatori di terze parti possono rilasciare moduli di policy con le loro applicazioni, che possono poi essere aggiunte alla policy senza dover cambiare l'intera policy un po come si fa per i moduli del kernel che possono aggiungere funzionalità al kernel senza dover riavviare l'intero sistema.
Attualmente, questo funziona, separando i passi di compilazione e link nella procedura di creazione della policy. I moduli della policy sono compilati dal sorgente, e linkati quando installati nel deposito del modulo (vedete Managed Policy). Questa policy linkata è quindi caricata nel kernel per l'enforcement.
Il comando primario per trattare con i moduli è semodule, che vi permetterà di eseguire le funzioni di base come installare, aggiornare, o rimuovere moduli. Altri comandi utili includono checkmodule, che è il compilatore di moduli ed è installato con il checkpolicy rpm, ed il semodule_package, che crea un file di pacchetto policy package (.pp) da un modulo di policy compilato.
I moduli sono di solito immagazzinati come files di pacchetto policy (estensione .pp) in /usr/share/selinux/policyname/. Li troverete almeno il base.pp, che è il modulo base.
Prima di Fedora Core 5, le policies SELinux erano gestite come files di configurazione editabili dall'utente in etc. Sfortunatamente, questo rende difficile sopperire a molte delle problematiche di usabilità insorte con SELinux. Così, una nuova libreria, libsemanage, fu aggiunta per fornire strumenti in userspace, un interfaccia per rendere più facile l'amministrazione della policy. Tutta l'amministrazione della policy dovrebbe usare questa libreria per accedere al deposito della policy. Il deposito della policy contiene tutte le informazioni della policy, e si trova in /etc/selinux/policyname/modules/.
Non dovreste mai editare il deposito direttamente. Invece, dovreste usare strumenti che puntino verso libsemanage. Un esempio di strumento è semanage, che è uno strumento a linea di comando per amministrare gran parte della policy tipo le mappature utente SELinux, le mappature di porta SELinux, e le voci di contesto dei file. Altri strumenti ad esempio che usano libsemanage includono semodule che lo usa per amministrare i moduli di policy SELinux installati nel repositorio della policy e setsebool che lo usa per amministrare le booleane di SELinux. In più, strumenti grafici sono attualmente in fase di sviluppo per utilizzare le funzionalità fornite da libsemanage.
Il programma di installazione segue le scelte che fate nella schermata Configurazione del Firewall. La policy prescelta in esecuzione è la policy targeted, ed è attiva per impostazione predefinita.
D:
Come amministratore, di cosa ho bisogno per configurare SELinux sul mio sistema?
R:
La risposta potrebbe essere di nulla. Ci sono molti utenti Fedora che non sanno neanche che stanno usando SELinux. SELinux fornisce la protezione per i loro sistemi con una configurazione out-of-the-box. Detto questo, ci sono un paio di cose che un amministratore potrebbe fare per configurare il proprio sistema. Queste includono:
booleane
Le booleane sono impostazioni che possono essere invertite per alterare il comportamento della policy SELinux senza dover scrivere una nuova policy. Ci sono molte booleane che possono essere impostate in Fedora, e permettono all'amministratore di configurare SELinux ad un alto livello. Per vedere le booleane disponibili e modificare le loro impostazioni, usate system-config-securitylevel o lo strumento a linea di comando setsebool.
impostare i files di contesto personalizzabili
I files su un sistema SELinux hanno un contesto di sicurezza che è registrato nell'attributo esteso del file (il comportamento può variare da filesystem a filesystem, ma questo è come funziona con l'ext3). Queste sono impostate automaticamente da rpm, ma qualche volta un utente potrebbe necessitare di un contesto particolare su un file. Un esempio potrebbe essere l'impostazione del contesto su una directory public_html affinchè apache possa accedervi, come illustrato in How do I make a user public_html directory work under SELinux.
Per un elenco dei tipi che potreste voler assegnare ai files, vedete /etc/selinux/targeted/contexts/customizable_types. Questi sono i tipi comunemente assegnati ai files dagli utenti ed amministratori. Per impostarli, usate il comando chcon. Notate che i tipi in customizable_types sono preservati anche dopo una rietichettatura, perciò una rietichettatura del sistema non li ripristina.
far funzionare le librerie che si comportano male
Ci sono in giro molte librerie che si comportano male e provano a infrangere le protezioni di memoria fornite da SELinux. Queste librerie dovranno assolutamente essere fissate, perciò inviate una segnalazione d'errore al manutentore della libreria. Detto questo, queste possono essere fatte funzionare. Maggiori informazioni e soluzioni per far funzionare queste librerie si possono trovare su I have a process running as unconfined_t, and SELinux is still preventing my application from running.
D:
Come abilito/disabilito la protezione SELinux per uno specifico demone sotto la policy targeted?
R:
Usate system-config-securitylevel conosciuta anche come lo strumento grafico Configurazione del livello di sicurezza, per controllare i valori booleani di specifici demoni. Per esempio, se ritenete di aver bisogno di disabilitare SELinux per Apache, per eseguirlo correttamente nel vostro ambiente, potete disabilitarne il valore in system-config-securitylevel. Questo cambiamento disattiva la transizione alla policy definita in apache.te, permettendo ad httpd di rimanere sotto la regolare sicurezza DAC Linux.
D:
In passato ho scritto il file local.te nei sorgenti della policy per la mia locale personalizzazione della policy, come lo farò Fedora Core 5?
R:
Siccome Fedora Core 5 usa una policy modulare, non potrete più avere i sorgenti completi della policy. Ora, potrete creare solo un modulo di policy per la vostra locale personalizzazione di policy. Per farlo, seguite i seguenti passi.
Create una directory temporanea e cambiatevi dentro.
$ mkdir foo
$ cd foo
Create files te, if, ed fc vuoti.
$ touch local.te local.if local.fc
Editate il file local.te, aggiungendo i contenuti appropriati. Per esempio:
La chiamata policy_module inserisce istruzioni per far funzionare il modulo, includendo dichiarazione del modulo ed i ruoli, classi e permessi di sistema richiesti. Assicuratevi che il nome dichiarato qui (locale in questo caso) coincida con il nome dato al file (local.te).
Il blocco require elenca i simboli che questo modulo usa che debbono essere dichiarati in altri moduli. In questo caso, ci occorre l'attributo httpdcontent ed il tipo smbd_t. Nota che tutti i tipi ed attributi usati nelle regole devono essere presenti qui a meno di dichiararli da voi in seguito.
Il resto del file è la policy, in questo caso consiste solo di un paio di regole allow. Qui, potreste anche mettervi dichiarazioni di tipi, istruzioni dontaudit, chiamate all'interfaccia, o molte cose che possono andare in un normale file te.
Compilare il modulo della policy.
$ make -f /usr/share/selinux/devel/Makefile
Compliling targeted local module
/usr/bin/checkmodule: loading policy configuration from tmp/local.tmp
/usr/bin/checkmodule: policy configuration loaded
/usr/bin/checkmodule: writing binary representation (version 5) to tmp/local.mod
Creating targeted local.pp policy package
rm tmp/local.mod.fc tmp/local.mod
Notate che questa procedura usa checkmodule, che è parte dell'rpm checkpolicy. Perciò, siate sicuri di aver installato questo rpm prima di farla.
Diventate root, ed installate il modulo di policy con semodule.
$ su
Password:
# semodule -i local.pp
I moduli sono identificati unicamente dal nome
Questo vuol dire che se dopo inserite un altro local.pp, sostituirà quello appena caricato. Perciò, dovete tenere questo local.te a disposizione, e farci delle aggiunte se necessitate fare ulteriori personalizzazioni della policy. Se lo perdete, ma volete comunque mantenere la vostra policy precedente, chiamate il nuovo modulo di policy locale in qualche altro modo (diciamo local2.te).
D:
Ho alcuni dinieghi avc che voglio permettere, come faccio?
R:
Se avete specifici messaggi AVC potete usare audit2allow per generare un file Type Enforcement che sia pronto ad essere caricato come modulo della policy.
audit2allow -M local < /tmp/avcs
Questo crea un local.pp che potete caricare nel kernel usando semodule -i local.pp. Potete anche editare il local.te per fare personalizzazioni aggiuntive. Per creare un modulo che permetta tutti i dinieghi dall'ultimo riavvio che potete poi personalizzare, eseguite quanto segue:
audit2allow -m local -l -i /var/log/messages > local.te
Notate che quanto riportato sopra assume che voi non stiate usando il demone audit. Se state usando il demone audit, allora dovete usare /var/log/audit/audit.log invece di /var/log/messages come vostro file di log. Questo genera un file local.te, che è simile al seguente:
module local 1.0;
require {
class file { append execute execute_no_trans getattr ioctl read write };
type httpd_t;
type httpd_w3c_script_exec_t;
};
allow httpd_t httpd_w3c_script_exec_t:file { execute execute_no_trans getattr ioctl read };
Potete editare a mano questo file, rimuovendo le istruzioni allow che non volete permettere, quindi ricompilatelo e ricaricatelo usando
checkmodule -M -m -o local.mod local.te per compilare il file te. Notate che checkmodule è parte dell'rpm checkpolicy, perciò dovete averlo installato.
semodule_package -o local.pp -m local.mod per creare un pacchetto di policy.
semodule -i local.pp per aggiungerlo alla policy in attualmente in esecuzione sulla macchina. Questo installa un nuovo modulo chiamato local con queste regole nel deposito dei moduli.
Importante
Per poter caricare questo pacchetto di policy appena creato nel kernel, dovrete necessariamente eseguire semodule -i local.pp
Notate che se installate un altro modulo chiamato local, esso sostituirà questo modulo. Se volete mantenere queste regole, allora dovrete appendere ulteriori personalizzazioni future a questo local.te, o dare alle ulteriori personalizzazioni un nome differente.
Inoltre, da Fedora Core 5 la policy è basata sulla Reference Policy, potreste dare un occhiata alla documentazione sulla sua pagina di progetto. Un'altra sorgente di informazione eccellente sono i files di esempio della policy in /usr/share/doc/selinux-policy->version< e /usr/share/selinux/devel.
Se volete creare un nuovo dominio di policy, potete guardare ai files di interfaccia nelle sub-directory /usr/share/selinux/devel. Li c'è anche uno strumento per aiutarvi a cominciare. La seguente procedura è un esempio:
Usate il comando policygentool per generare i vostri files te, fc e if. Il comando policygentool necessita di due parametri: il nome del modulo della policy ed il percorso completo dell'eseguibile. Il seguente comando vi darà un esempio d'uso:
policygentool mydaemon /usr/sbin/mydaemon
Vi richiederà un minimo di caratteristiche di dominio comuni, e creerà tre files: mydaemon.te, mydaemon.fc e mydaemon.if.
Dopo aver generato i files di policy, usate il Makefile fornito, /usr/share/selinux/devel/Makefile, per compilare un pacchetto di policy (mydaemon.pp):
make -f /usr/share/selinux/devel/Makefile
Ora potete caricare il modulo della policy, usando semodule, e rietichettare l'eseguibile usando restorecon:
Poichè avete una policy molto limitata per il vostro eseguibile, SELinux preverrà che faccia molto. Passate in modalità permissive e poi usate l'init script per avviare il vostro demone:
setenforce 0service mydaemon restart
Ora potrete cominciare a collezionare messaggi avc. Potrete usare audit2allow per tradurre i messaggi avc in regole allow e cominciare ad aggiornare il vostro file mydaemon.te. Dovrete cercare quindi le macro di interfaccia nella directory /usr/share/selinux/devel/include ed usarle direttamente, audit2allow -R tenterà di trovare le interfacce che coincidano con la regola allow. Se volete più esempi di policy, potete sempre installare l'rpm src selinux-policy, che contiene tutti i files policy te per la policy reference.
D:
Come cambio la policy che sto usando?
R:
Siate cauti quando cambiate policy
A meno che non stiate provando una nuova policy su una macchina test a scopo di ricerca, dovreste seriamente considerare la situazione prima di passare ad una policy differente su un sistema in produzione. Il modo di cambiare è lineare. Questo metodo è abbastanza sicuro, ma deve prima essere provato su un sistema test.
Per usare il metodo automatico, eseguite lo strumento Configurazione del livello di sicurezza. Dal menù principale della GUI, selezionate Desktop → Amministrazione → Livello di sicurezza, o da un terminale, eseguite system-config-securitylevel. Cambiate la policy come desiderate ed assicuratevi che l'opzione Rietichetta al prossimo riavvio sia abilitata.
Potete anche eseguire questi passi manualmente con la seguente procedura:
Editate /etc/selinux/config e cambiate il tipo ed il modo di policy:
SELINUXTYPE=nomepolicy
SELINUX=permissive
Questo passo vi assicura di non rimanere bloccati dopo il riavvio. SELinux verrà eseguito sotto la policy corretta, ma vi permetterà il login se ci fosse un problema come l'etichettatura non corretta del contesto dei file.
Imposta il sistema per la rietichettatura del file system al riavvio:
touch /.autorelabel
Riavviate il sistema. Un riavvio pulito sotto la nuova policy permette a tutti i processi di sistema di essere avviati sotto l'appropriato contesto, e rivela qualsiasi problema di cambio di policy.
Confermate che i vostri cambiamenti abbiano effetto con il seguente comando:
sestatus -v
Con il nuovo sistema eseguito in modalità permissive, controllate /var/log/messages alla ricerca di messaggi avc: denied. Questi possono indicare un problema che deve essere risolto affinchè il sistema possa funzionare senza difficoltà sotto la nuova policy.
Quando siete soddisfatti, che il sistema sia stabile sotto la nuova policy, abilitate l'enforcing cambiando SELINUX=enforcing. Potete sia riavviare che eseguire setenforce 1 per passare in enforcing in tempo reale.
D:
Come eseguo il back up dei files da un file system SELinux?
R:
Potete usare l'utilità star, che supporta gli attributi estesi che contengono le etichette dei contesti di sicurezza. Specificate le opzioni -xattr e -H=exustar quando create gli archivi.
ls -Z /var/log/maillog
-rw------- root root system_u:object_r:var_log_t /var/log/maillog
cd /var/log star -xattr -H=exustar -c -f maillog.star ./maillog*
I percorsi assoluti possono sovrascrivere i dati esistenti
Se usate un percorso assoluto, tipo /var/log/maillog, quando decompattate l'archivio con star -c -f, i files verranno ripristinati nello stesso percorso in cui erano stati archiviati. Il file maillog tenterà di scriverli in /var/log/maillog. Potreste ricevere un avviso da star se i files che stanno per essere sovrascritti hanno una data più recente, ma non potrai contare su questo comportamento.
Considerate attentamente come costruire gli argomenti d'archiviazione.
D:
Come posso installare la policy strict come predefinita con il kickstart?
R:
Sotto la sezione %packages, aggiungete selinux-policy-strict.
Come faccio funzionare una directory utente public_html sotto SELinux?
R:
Questo processo presume che avete abilitato le directories HTML pubbliche per gli utenti nel file di configurazione di Apache, /etc/httpd/conf/httpd.conf. Questo processo concerne solo il servizio di contenuti Web statici. Per maggiori informazioni su Apache HTTP e SELinux, fate riferimento a http://fedora.redhat.com/docs/selinux-apache-fc3/.
Se non avete già una directory ~/public_html, createla e popolatela con i files e le cartelle che dovranno essere servite.
cd ~
mkdir public_html
cp /path/to/content ~/public_html
A questo punto, httpd è configurato per servire i contenuti, ma continuerete a ricevere un errore 403
forbidden. Questo poichè ad httpd non è consentito leggere il tipo di sicurezza per la directory ed i files che vengono creati nelle directory home degli utenti. Cambiate i contesti di sicurezza della cartella e dei suoi contenuti ricorsivamente usando l'opzione -R:
Potrete notare qualche tempo dopo che il campo utente, impostato a user_u, è cambiato in system_u. Ciò non avrà effetto su come funziona la policy targeted. Il campo che conta è il campo tipo.
Le vostre pagine statiche potranno ora essere servite correttamente. Se continuerete ad avere errori, controllate che la Booleana che abilita le home directories utente sia abilitata. Potete impostarla usando system-config-securitylevel. Selezionate il tab SELinux, quindi selezionate l'area Modifica la Policy SELinux. Selezionate Permetti ad HTTPD di leggere le home
directories. I cambiamenti avranno effetto immediato.
D:
Come disabilito SELinux all'avvio?
R:
Impostate SELINUX=disabled in /etc/selinux/config.
In alternativa, potete aggiungere selinux=0 ai parametri del kernel. Comunque questa opzione non è raccomandata.
Fate attenzione quando disabilitate SELinux
Se avviate con selinux=0, qualsiasi file creato mentre SELinux è disabilitato non avrà le informazioni di contesto SELinux. Il file system è segnato per la rietichettatura al prossimo avvio. Se un problema imprevisto vi impedisce di riavviare normalmente, potreste aver bisogno di avviare in modalità single-user per il ripristino. Aggiungete l'opzione emergency ai parametri di avvio del kernel.
D:
Come pongo l'enforcing on/off all'avvio?
R:
Potete specificare la modalità SELinux usando il file di configurazione /etc/sysconfig/selinux.
# 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= type of policy in use. Possible values are:
# targeted Only targeted network daemons are protected.
# strict Full SELinux protection.
SELINUXTYPE=targeted
Impostare il valore ad enforcing è come aggiungere enforcing=1 nei parametri di avvio del kernel. Impostare il valore a permissive è come aggiungere enforcing=0 nei parametri di avvio del kernel.
Comunque, impostare il valore a disabled non è lo stesso di selinux=0 nei parametri di avvio del kernel. Invece di disabilitare pienamente SELinux nel kernel, l'impostazione disabled disattiva l'enforcing e salta il caricamento della policy.
Precedenza di configurazione SELinux
I parametri della linea di comando del kernel prevaricano il file di configurazione.
D:
Come disabilito temporaneamente la modalità di enforcing senza dover riavviare?
R:
Occasionalmente potreste aver necessità di eseguire un operazione non permessa dalla policy. Eseguite il comando setenforce 0 per disabilitare la modalità di enforcing in tempo reale. Quando avete terminato, eseguite setenforce 1 per riattivare l'enforcing.
Il ruolo sysadm_r è necessario per la policy strict
Dovete lanciare il comando setenforce con il ruolo sysadm_r se state usando la policy strict. Se state usando la policy targeted standard, allora non è necessario. Usate il comando newrole per assumere questo ruolo.
D:
Come pongo on/off l'auditing delle chiamate di sistema all'avvio?
R:
Aggiungete audit=1 alla linea di comando del kernel per attivare l'auditing delle chiamate di sistema. Aggiungete audit=0 alla linea di comando del kernel per disattivare l'auditing delle chiamate di sistema.
L'auditing delle chiamate di sistema è on per impostazione predefinita. Quando è attivo, fornisce informazioni sulle chiamate di sistema che erano in esecuzione quando SELinux ha generato un messaggio denied. Il messaggio d'errore è d'aiuto quando si esegue il debugging della policy.
D:
Come disabilito temporaneamente l'auditing alle system-call senza dover riavviare?
R:
Per farlo, eseguite auditctl -e 0. Notate che questo comando non avrà effetto sull'auditing dei dinieghi SELinux AVC.
D:
Come ottengo informazioni sullo status della mia installazione SELinux?
R:
Come root, eseguite il comando /usr/sbin/sestatus -v. Per maggiori informazioni, fate riferimento alla pagina di manuale di sestatus(8).
D:
Come scrivo una policy per permettere ad un dominio di usare pam_unix.so?
R:
A pochissimi domini nel mondo SELinux è permesso di leggere il file /etc/shadow. Ci sono delle regole restrittive che prevengono gli scrittori di policy dallo scrivere codice come
allow mydomain_t shadow_t:file read;
In RHEL4 potete impostare il vostro dominio per usare il comando unix_chkpwd. Il modo più semplice è usare l'attributo unix_chkpwd. Così se state scrivendo una policy per un demone ftpd dovrete scrivere qualcosa come
daemon_domain(vsftpd, `auth_chkpwd')
Questo creerà un contesto dove vsftpd_t -> chkpwd_exec_t -> system_chkpwd_t potrà leggere /etc/shadow, mentre vsftpd_t non sarà capace di leggerlo.
In Fedora Core 5/RHEL5, aggiungete la regola
auth_domtrans_chk_passwd(vsftpd_t)
D:
Ho creato un nuovo pacchetto di policy, dove devo metterlo per essere sicuro che verrà caricato nel kernel?
R:
Dovete eseguire il comando semodule -i myapp.pp. Questo modifica la policy registrata sulla vostra macchina. Il vostro modulo di policy è ora caricato con il resto della policy. Potete anche rimuovere il file pp dal sistema.
semodule -l elenca i moduli attualmente caricati.
#semodule -i
myapp 1.2.1
Se successivamente volete rimuovere il pacchetto della policy, potete eseguire semodule -r myapp.
Dove sono conservati i messaggi AVC di SELinux (dinieghi logs, etc.)?
R:
In Fedora Core 2 e 3, i messaggi AVC di SELinux si potevano trovare in /var/log/messages. In Fedora Core 4, è stato aggiunto il demone audit, e questi messaggi sono stati spostati in /var/log/audit/audit.log. In Fedora Core 5, il demone audit non è installato per impostazione predefinita, di conseguenza questi messaggi si trovano in /var/log/messages a meno che non abbiate scelto di installare il demone audit, nel qual caso i messaggi AVC si troveranno in /var/log/audit/audit.log.
D:
La mia applicazione non funziona come mi aspetto e sto vedendo messaggi avc: denied. Come risolvo?
R:
Questo messaggio significa che la policy SELinux attuale non permette all'applicazione di fare qualcosa. Ci sono un certo numero di ragioni per cui ciò può accadere.
Primo, uno dei files a cui l'applicazione prova ad accedere potrebbe essere etichettato male. Se il messaggio AVC si riferisce ad un file specifico, controllate la sua etichetta corrente con ls -alZ /path/to/file. Se vi sembra sbagliata, potrete provare ad usare restorecon -v /path/to/file per ripristinare il contesto predefinito del file. Se avete un gran numero di dinieghi relativi a files, potreste voler usare fixfiles relabel, o eseguire restorecon -R /path per rietichettare recursivamente il percorso di una directory.
Delle volte, i dinieghi sono causati da un cambiamento nella configurazione del programma che fa scattare il messaggio di diniego. Per esempio, se volete che Apache ascolti anche sulla porta 8800, dovrete cambiare anche la policy di sicurezza, apache.te. Fate riferimento a Elenco link esterni per maggiori informazioni sulla scrittura delle policy.
Se avete difficoltà nel far funzionare un'applicazione specifica come Apache, fate riferimento a How to use system-config-securitylevel per sapere come disabilitare l'enforcement solo per quell'applicazione.
D:
Ho installato Fedora Core su un sistema con una partizione /home già esistente, ed ora non posso fare il log in.
R:
La vostra partizione /home non è etichettata correttamente. Potete facilmente risolvere questo problema in due modi differenti.
Se volete solamente rietichettare /home ricorsivamente:
/sbin/restorecon -v -R /home
Se volete essere sicuri che non ci siano altri files non correttamente etichettati, potete rietichettare l'intero filesystem:
/sbin/fixfiles relabel
Dovrete avere installato il pacchetto policycoreutils per usare fixfiles.
D:
Dopo aver rietichettato la mia /home usando setfiles o fixfiles, sarò ancora in grado di leggere /home con un sistema con SELinux non abilitato?
R:
Potete leggere i files da una distribuzione senza SELinux o una con SELinux disabilitato. Comunque, i files creati dal sistema privo di SELinux non avranno un contesto di sicurezza, nemmeno l'avrà qualsiasi files che rimuoverai e ricreerai. Questo potrebbe essere un problema con files tipo ~/.bashrc. Dovrete rietichettare la /home quando riavvierete il sistema Fedora Core con SELinux abilitato.
D:
Come posso condividere directories usando NFS tra Fedora Core e sistemi non-SELinux?
R:
NFS supporta in modo trasparente molti tipi di file system, e può essere usato per condividere directories tra sistemi SELinux e non-SELinux.
Quando montate un file system non-SELinux via NFS, per impostazione predefinita SELinux tratterà tutti i files nella condivisione come avessero contesto nfs_t. Potrete prevaricare il contesto predefinito impostandolo manualmente usando l'opzione context=. Il seguente comando farà apparire i files nella directory NFS montata con un contesto di system_u:object_r:tmp_t in SELinux:
mount -t nfs -o context=system_u:object_r:tmp_t server:/shared/foo /mnt/foo
Quando SELinux esporta un file system via NFS, i files creati avranno il contesto della directory dove sono stati creati. In altre parole, la presenza di SELinux sul sistema remoto che ha montato la condivisione non ha effetto sui contesti di sicurezza locali.
D:
Come posso creare un nuovo account utente Linux con la home directory utente avente il contesto appropriato?
R:
Potete creare il nuovo utente con il comando standard useradd. Prima dovrete diventare root. Sotto la policy strict avrete bisogno di cambiare al ruolo sysadm_r con il seguente comando:
newrole -r sysadm_r
Per la policy targeted non avrete bisogno di cambiare ruolo, rimanendo in unconfined_t:
su root
id -Zroot:system_r:unconfined_tuseradd auser
ls -Z /homedrwx------ auser auser root:object_r:user_home_dir_t /home/auser
Il contesto iniziale per una nuova directory utente ha un identità di root. In seguito la rietichettatura del file system cambierà l'identità a system_u. Queste sono funzionalmente le stesse poichè il ruolo ed il tipo sono identici (object_r:user_home_dir_t.)
D:
Il comando su cambia la mia identità e ruolo SELinux?
R:
In precedenti versioni di Fedora Core, le transizioni dei contesti di sicurezza erano integrate nel su via pam_selinux. Questo ha generato più difficoltà che benefici, e non è abbastanza necessario su un sistema che esegue la targeted policy. Perciò, questo non è più il caso. Adesso, su/sudo cambiano la sola identità Linux. Dovrete usare newrole per cambiare l'identità, il ruolo o il livello SELinux.
Anche altre forme di cambio identità Linux/UNIX®, ad esempio setuid(2), non causano un cambio d'identità SELinux.
D:
Sto avendo alcune difficoltà con errori avc che riempiono i miei logs per un programma in particolare. Come scelgo escluderne l'audit d'accesso?
R:
Per esempio, se volevate escludere l'audit di dmesg, potreste inserire questo nel vostro file dmesg.te:
dontaudit dmesg_t userdomain:fd { use };
Questo eliminerà l'output dell'errore dal terminale per tutti i domini utente, inclusi user, staff e sysadm.