Logo AdamantioAdamantio.netlogotoplogoright
Banner for the trouble ticket system http://otrs.org/
logobottom
 Registrati
 Forum
Ricerche Downloads Profilo Utente Argomenti
    
Sommario
Utenti e Visitatori

Server Date/Time
Date: 10 Mar 2010
Time: 08:23:40
GMT: +0100

 Hits:
Today: 452
Overall: 8454635

Iscritti:
Ultimo: aleire-balenciaga
Iscritti oggi: 0
Iscritti ieri: 0
Complessivi: 455

Persone Online:
Visitatori: 11
Iscritti: 0
Totale: 11
Effemeridi
In questo giorno...
1628
Nasce il fisiologo italiano Marcello Malpighi.
1940
Nasce Chuck Norris, atleta, karateka, attore.
Cerca sul sito


Fedora Core 5 SELinux FAQ

Fedora Core 5 SELinux FAQ

Karsten Wade

Chad Sellers

Francesco Tombolini

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 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

Revisione 1.5 2006-02-03 CS

Primo round di editing.


1. SELinux Note e FAQ

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.

[Nota] Questa FAQ è specifica per Fedora Core 5

Se state cercando le FAQ per altre versioni di Fedora Core, fate riferimento a http://fedora.redhat.com/docs/selinux-faq/.

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:

Elenco link esterni

[Suggerimento] Fare cambiamenti/aggiunte alla Fedora SELinux FAQ

Questa FAQ è disponibile su http://fedora.redhat.com/docs/selinux-faq-fc5/.

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.

Per avere una elenco completo delle segnalazioni d'errore inerenti questa FAQ, fate riferimento a https://bugzilla.redhat.com/bugzilla/showdependencytree.cgi?id=118757.

1.1. Comprendere SELinux
D: Cos'è SELinux?
D: Cos'è una policy SELinux?
D: Cos'è la policy targeted di SELinux?
D: Che programmi sono protetti dalla targeted policy?
D: Che ne è della policy strict? Funziona comunque?
D: Cos'è la policy mls? A chi serve?
D: Cos'è la Reference Policy?
D: Cosa sono i file contexts?
D: Come vedo il contesto di sicurezza di un file, un utente, o un processo?
D: Che differenza c'è fra un dominio ed un tipo?
D: Cosa sono i moduli della policy?
D: Cos'è la managed policy?
1.2. Controllare SELinux
D: Come installo/non installo SELinux?
D: Come amministratore, di cosa ho bisogno per configurare SELinux sul mio sistema?
D: Come abilito/disabilito la protezione SELinux per uno specifico demone sotto la policy targeted?
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?
D: Ho alcuni dinieghi avc che voglio permettere, come faccio?
D: Come posso aiutare a scrivere una policy?
D: Come cambio la policy che sto usando?
D: Come eseguo il back up dei files da un file system SELinux?
D: Come posso installare la policy strict come predefinita con il kickstart?
D: Come faccio funzionare una directory utente public_html sotto SELinux?
D: Come disabilito SELinux all'avvio?
D: Come pongo l'enforcing on/off all'avvio?
D: Come disabilito temporaneamente la modalità di enforcing senza dover riavviare?
D: Come pongo on/off l'auditing delle chiamate di sistema all'avvio?
D: Come disabilito temporaneamente l'auditing alle system-call senza dover riavviare?
D: Come ottengo informazioni sullo status della mia installazione SELinux?
D: Come scrivo una policy per permettere ad un dominio di usare pam_unix.so?
D: Ho creato un nuovo pacchetto di policy, dove devo metterlo per essere sicuro che verrà caricato nel kernel?
1.3. Risolvere i problemi
D: Dove sono conservati i messaggi AVC di SELinux (dinieghi logs, etc.)?
D: La mia applicazione non funziona come mi aspetto e sto vedendo messaggi avc: denied. Come risolvo?
D: Ho installato Fedora Core su un sistema con una partizione /home già esistente, ed ora non posso fare il log in.
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?
D: Come posso condividere directories usando NFS tra Fedora Core e sistemi non-SELinux?
D: Come posso creare un nuovo account utente Linux con la home directory utente avente il contesto appropriato?
D: Il comando su cambia la mia identità e ruolo 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?
D: Anche avviando in modalità permissive, ho un gran numero di messaggi avc denied.
D: Ho uno specifico diniego di permesso solo quando SELinux è in modalità enforcing, ma non vedo alcun messaggio audit in /var/log/messages (o /var/log/audit/audit.log se usato il demone audit). Come posso identificare la causa di questi dinieghi silenziosi?
D: Perchè non vedo l'output quando eseguo certi demoni in modalità debug o interattiva?
D: Quando eseguo un upgrade del pacchetto delle policy (per esempio, usando yum), cosa succede con la policy? E' automaticamente aggiornata?
D: Se la policy rilasciata con il pacchetto di un applicazione cambia in modo da richiedere la rietichettatura, potrà RPM gestire la rietichettatura dei files posseduti dal pacchetto?
D: Perchè le policy binarie distribuite con Fedora, tipo /etc/selinux/<policyname>/policy/policy.<version>, e quelle compilate da me hanno differenti dimensioni e MD5 checksums?
D: I nuovi pacchetti policy potranno disabilitare il mio sistema?
D: La mia console è inondata da messaggi. Come li fermo?
D: Posso provare la policy predefinita senza installare il pacchetto di sorgenti della policy?
D: Perchè alcune applicazioni KDE hanno problemi sotto SELinux?
D: Perchè SELINUX=disabled non funziona per me?
D: Ho un processo eseguito come unconfined_t, e SELinux previene ancora l'esecuzione della mia applicazione.
D: Cosa vogliono dire questi errori rpm?
D: Voglio eseguire un demone su una porta non standard ma SELinux non me lo permette. Come lo faccio funzionare?
D: Come aggiungo traduzioni aggiuntive nel mio sistema MCS/MLS?
D: Ho impostato le mie traduzioni MCS/MLS, adesso vorrei designare quali utenti possono leggere una data categoria?
D: Sto scrivendo uno script php che necessita di creare files e possibilmente eseguirli. La policy SELinux lo previene. Che devo fare?
D: Sto impostando lo swapping su un file, ma vedo messaggi AVC nei miei file di log?
D: Potete spiegarmi i permessi relabelto/relabelfrom?
1.4. Implementare SELinux
D: Che file systems posso usare per SELinux?
D: Come impatta SELinux sulle prestazioni del sistema?
D: Di che tipo di implementazioni, applicazioni, sistemi, etc. dovrò tener conto per l'uso con SELinux?
D: Che effetto ha SELinux sulle applicazioni di terze parti?

1.1. Comprendere SELinux

D: Cos'è SELinux?
D: Cos'è una policy SELinux?
D: Cos'è la policy targeted di SELinux?
D: Che programmi sono protetti dalla targeted policy?
D: Che ne è della policy strict? Funziona comunque?
D: Cos'è la policy mls? A chi serve?
D: Cos'è la Reference Policy?
D: Cosa sono i file contexts?
D: Come vedo il contesto di sicurezza di un file, un utente, o un processo?
D: Che differenza c'è fra un dominio ed un tipo?
D: Cosa sono i moduli della policy?
D: Cos'è la managed policy?
D:

Cos'è SELinux?

R:

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.

selinux-policy-strict-<versione>.noarch.rpm, selinux-policy-targeted-<versione>.noarch.rpm, selinux-policy-mls-<versione>.noarch.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.

Maggiori informazioni sulle differenti policies disponibili in SELinux possono essere trovate su http://fedoraproject.org/wiki/SELinux/Policies.

D:

Cos'è la policy targeted di SELinux?

R:

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.

Maggiori informazioni sulle differenti policies disponibili in SELinux possono essere trovate su http://fedoraproject.org/wiki/SELinux/Policies.

D:

Che programmi sono protetti dalla targeted policy?

R:

Attualmente, l'elenco dei programmi è approssimativamente:

accton, amanda, httpd (apache), arpwatch, pam, automount, avahi, named, bluez, lilo, grub, canna, comsat, cpucontrol, cpuspeed, cups, cvs, cyrus, dbskkd, dbus, dhcpd, dictd, dmidecode, dovecot, fetchmail, fingerd, ftpd (vsftpd, proftpd, and muddleftpd), gpm, hald, hotplug, howl, innd, kerberos, ktalkd, openldap, auditd, syslog, logwatch, lpd, lvm, mailman, module-init-tools, mount, mysql, NetworkManager, NIS, nscd, ntp, pegasus, portmap, postfix, postgresql, pppd, pptp, privoxy, procmail, radiusd, radvd, rlogin, nfs, rsync, samba, saslauthd, snmpd, spamd, squid, stunnel, dhcpc, ifconfig, sysstat, tcp wrappers, telnetd, tftpd, updfstab, user management (passwd, useradd, etc.), crack, uucpd, vpnc, webalizer, xend, xfs, zebra

D:

Che ne è della policy strict? Funziona comunque?

R:

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.

Maggiori informazioni sulle differenti policies disponibili in SELinux possono essere trovate su http://fedoraproject.org/wiki/SELinux/Policies.

D:

Cos'è la policy mls? A chi serve?

R:

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.

Maggiori informazioni sulle differenti policies disponibili in SELinux possono essere trovate su http://fedoraproject.org/wiki/SELinux/Policies.

D:

Cos'è la Reference Policy?

R:

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.

Per vedere come scrivere un semplice modulo di policy, controllate su Local Policy Customizations.

D:

Cos'è la managed policy?

R:

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.

1.2. Controllare SELinux

D: Come installo/non installo SELinux?
D: Come amministratore, di cosa ho bisogno per configurare SELinux sul mio sistema?
D: Come abilito/disabilito la protezione SELinux per uno specifico demone sotto la policy targeted?
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?
D: Ho alcuni dinieghi avc che voglio permettere, come faccio?
D: Come posso aiutare a scrivere una policy?
D: Come cambio la policy che sto usando?
D: Come eseguo il back up dei files da un file system SELinux?
D: Come posso installare la policy strict come predefinita con il kickstart?
D: Come faccio funzionare una directory utente public_html sotto SELinux?
D: Come disabilito SELinux all'avvio?
D: Come pongo l'enforcing on/off all'avvio?
D: Come disabilito temporaneamente la modalità di enforcing senza dover riavviare?
D: Come pongo on/off l'auditing delle chiamate di sistema all'avvio?
D: Come disabilito temporaneamente l'auditing alle system-call senza dover riavviare?
D: Come ottengo informazioni sullo status della mia installazione SELinux?
D: Come scrivo una policy per permettere ad un dominio di usare pam_unix.so?
D: Ho creato un nuovo pacchetto di policy, dove devo metterlo per essere sicuro che verrà caricato nel kernel?
D:

Come installo/non installo SELinux?

R:

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.

  1. Create una directory temporanea e cambiatevi dentro.

    $ mkdir foo
    $ cd foo
    
  2. Create files te, if, ed fc vuoti.

    $ touch local.te local.if local.fc
    
  3. Editate il file local.te, aggiungendo i contenuti appropriati. Per esempio:

    policy_module(local, 1.0)
    
    require {
    	attribute httpdcontent;
    	type smbd_t;
    }
    
    allow smbd_t httpdcontent:dir create_dir_perms;
    allow smbd_t httpdcontent:{ file lnk_file } create_file_perms;
    

    Ci sono 3 parti in questo file.

    • 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.

  4. 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.

  5. Diventate root, ed installate il modulo di policy con semodule.

    $ su
    Password:
    # semodule -i local.pp
    
[Nota] 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.

[Nota] 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.

D:

Come posso aiutare a scrivere una policy?

R:

Il tuo aiuto è veramente apprezzato.

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:

  1. 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.

  2. 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
    
  3. Ora potete caricare il modulo della policy, usando semodule, e rietichettare l'eseguibile usando restorecon:

    semodule -i mydaemon.pp
    restorecon -v /usr/sbin/mydaemon
    
  4. 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 0
    service 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:
[Attenzione] 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:

  1. 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.

  2. Imposta il sistema per la rietichettatura del file system al riavvio:

    touch /.autorelabel
    
  3. 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.

  4. 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.

  5. 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*
[Attenzione] 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:
  1. Sotto la sezione %packages, aggiungete selinux-policy-strict.

  2. Sotto la sezione %post, aggiungete quanto segue:

    lokkit -q --selinuxtype=strict
    touch /.autorelabel
    
D:

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/.

  1. 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
    
  2. 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:

    ls -Z -d public_html/
    drwxrwxr-x  auser    auser    user_u:object_r:user_home_t      public_html
    chcon -R -t httpd_user_content_t public_html/
    ls -Z -d public_html/
    drwxrwxr-x  auser    auser    user_u:object_r:httpd_user_content_t public_html/
    ls -Z public_html/
    -rw-rw-r--  auser    auser    user_u:object_r:httpd_user_content_t bar.html
    -rw-rw-r--  auser    auser    user_u:object_r:httpd_user_content_t baz.html
    -rw-rw-r--  auser    auser    user_u:object_r:httpd_user_content_t foo.html
    

    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.

  3. 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.

[Attenzione] 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.

[Importante] 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.

[Nota] 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.

1.3. Risolvere i problemi

D: Dove sono conservati i messaggi AVC di SELinux (dinieghi logs, etc.)?
D: La mia applicazione non funziona come mi aspetto e sto vedendo messaggi avc: denied. Come risolvo?
D: Ho installato Fedora Core su un sistema con una partizione /home già esistente, ed ora non posso fare il log in.
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?
D: Come posso condividere directories usando NFS tra Fedora Core e sistemi non-SELinux?
D: Come posso creare un nuovo account utente Linux con la home directory utente avente il contesto appropriato?
D: Il comando su cambia la mia identità e ruolo 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?
D: Anche avviando in modalità permissive, ho un gran numero di messaggi avc denied.
D: Ho uno specifico diniego di permesso solo quando SELinux è in modalità enforcing, ma non vedo alcun messaggio audit in /var/log/messages (o /var/log/audit/audit.log se usato il demone audit). Come posso identificare la causa di questi dinieghi silenziosi?
D: Perchè non vedo l'output quando eseguo certi demoni in modalità debug o interattiva?
D: Quando eseguo un upgrade del pacchetto delle policy (per esempio, usando yum), cosa succede con la policy? E' automaticamente aggiornata?
D: Se la policy rilasciata con il pacchetto di un applicazione cambia in modo da richiedere la rietichettatura, potrà RPM gestire la rietichettatura dei files posseduti dal pacchetto?
D: Perchè le policy binarie distribuite con Fedora, tipo /etc/selinux/<policyname>/policy/policy.<version>, e quelle compilate da me hanno differenti dimensioni e MD5 checksums?
D: I nuovi pacchetti policy potranno disabilitare il mio sistema?
D: La mia console è inondata da messaggi. Come li fermo?
D: Posso provare la policy predefinita senza installare il pacchetto di sorgenti della policy?
D: Perchè alcune applicazioni KDE hanno problemi sotto SELinux?
D: Perchè SELINUX=disabled non funziona per me?
D: Ho un processo eseguito come unconfined_t, e SELinux previene ancora l'esecuzione della mia applicazione.
D: Cosa vogliono dire questi errori rpm?
D: Voglio eseguire un demone su una porta non standard ma SELinux non me lo permette. Come lo faccio funzionare?
D: Come aggiungo traduzioni aggiuntive nel mio sistema MCS/MLS?
D: Ho impostato le mie traduzioni MCS/MLS, adesso vorrei designare quali utenti possono leggere una data categoria?
D: Sto scrivendo uno script php che necessita di creare files e possibilmente eseguirli. La policy SELinux lo previene. Che devo fare?
D: Sto impostando lo swapping su un file, ma vedo messaggi AVC nei miei file di log?
D: Potete spiegarmi i permessi relabelto/relabelfrom?
D:

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 -Z
root:system_r:unconfined_t
useradd auser
ls -Z /home
drwx------  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.

D:

Anche avviando in modalità permissive, ho un gran numero di messaggi avc denied.

R:

In modalità non-enforcing, riceverete più messaggi che in modalità enforcing. Il kernel logga ogni diniego di accesso come foste in modalità enforcing. Siccome non siete ristretti dalla forzosità della policy, potete fare più azioni, che risultano in maggiori log di diniego.

Se un applicazione eseguita in modalità enforcing ha il divieto di leggere un certo numero di files in una directory, essa verrà fermata una volta cominciata l'azione. In modalità non-enforcing, l'applicazione non viene fermata dal traversare l'albero della directory, e genererà un messaggio di diniego per ogni file letto nella directory.

D:

Ho uno specifico diniego di permesso solo quando SELinux è in modalità enforcing, ma non vedo alcun messaggio audit in /var/log/messages (o /var/log/audit/audit.log se usato il demone audit). Come posso identificare la causa di questi dinieghi silenziosi?

R:

La ragione più comune per un diniego silenzioso è quando la policy contiene una regola esplicita dontaudit per sopprimere i messaggi audit. La regola dontaudit è spesso usata in questo modo quando un diniego benigno sta riempiendo i log di audit.

Per cercare il tuo particolare diniego, abilitate l'auditing di tutte le regole dontaudit:

semodule -b /usr/share/selinux/targeted/enableaudit.pp
[Attenzione] Abilitato dontaudit l'output è verboso

Abilitando l'auditing di tutte le regole dontaudit produrrà un gran numero di informazioni di audit, gran parte delle quali è irrilevante per il tuo diniego.

Usate questa tecnica solo se state cercando specificatamente un messaggio audit per un diniego che sembra avvenire silenziosamente. Dovete ri-abilitare le regole dontaudit al più presto possibile.

Una volta trovato il vostro problema potrete resettare alle impostazioni predefinite eseguendo

semodule -b /usr/share/selinux/targeted/base.pp
D:

Perchè non vedo l'output quando eseguo certi demoni in modalità debug o interattiva?

R:

SELinux disabilita intenzionalmente l'accesso ai dispositivi tty per impedire ai demoni la comunicazione verso il terminale di controllo. Questa comunicazione è un potenziale buco nella sicurezza poichè questi demoni possono inserire comandi nei terminali di controllo. Un programma bacato o compromesso potrebbe usare questo buco causando seri problemi.

Ci sono un po di altri modi per catturare lo standard output dai demoni. Un metodo è quello di eseguire il pipe dell'output al comando cat.

snmpd -v | cat

Quando fate il debug di un demone, potreste voler disattivare la transizione del demone al suo dominio specifico. Potete farlo usando system-config-securitylevel o setsebool dalla linea di comando.

Un opzione finale è quella di disabilitare la modalità enforcing durante il debugging. Impartite il seguente comando setenforce 0 per disabilitare la modalità enforcing ed usate il comando setenforce 1 per riabilitare SELinux quando avete terminato il debugging.

D:

Quando eseguo un upgrade del pacchetto delle policy (per esempio, usando yum), cosa succede con la policy? E' automaticamente aggiornata?

R:

La policy si ricarica da sola quando il pacchetto è aggiornato. Questo comportamento sostituisce il comando manuale make load.

In certe situazioni, potreste dover rietichettare il file system. Questo potrebbe accadere per fissare gli errori di SELinux qualora i contesti dei files divenissero non validi, o quando l'aggiornamento della policy fa dei cambiamenti al file /etc/selinux/targeted/contexts/files/file_contexts.

Dopo aver rietichettato il filesystem, un reboot non è necessario, ma è utile per assicurare che ogni processo e programma venga eseguito nel dominio appropriato. Questo è altamente dipendente dai cambiamenti nella policy aggiornata.

Per rietichettare, avete diverse opzioni. Potreste usare il comando fixfiles:

fixfiles relabel reboot

In alternativa, usate il meccanismo /.autorelabel:

touch /.autorelabel reboot
D:

Se la policy rilasciata con il pacchetto di un applicazione cambia in modo da richiedere la rietichettatura, potrà RPM gestire la rietichettatura dei files posseduti dal pacchetto?

R:

Si. I contesti di sicurezza per i files posseduti dal pacchetto sono immagazzinati nei dati dell'header del pacchetto. I contesti dei files sono impostati direttamente dopo la copia cpio, appena i files del pacchetto sono messi su disco.

D:

Perchè le policy binarie distribuite con Fedora, tipo /etc/selinux/<policyname>/policy/policy.<version>, e quelle compilate da me hanno differenti dimensioni e MD5 checksums?

R:

Quando installate un pacchetto policy, i files binari pre-compilati della policy sono inseriti direttamente in /etc/selinux. I differenti ambienti di compilazione creeranno files finali che hanno differenti dimensioni ed MD5 checksums.

D:

I nuovi pacchetti policy potranno disabilitare il mio sistema?

R:

C'è la possibilità che cambiamenti nei pacchetti della policy o nella policy rilasciata con un pacchetto applicativo possano causare errori, più dinieghi, o altri comportamenti sconosciuti. Potete scoprire quale pacchetto causa il problema ripristinando policy e pacchetti applicativi uno alla volta. Se non volete tornare ad una pacchetto precedente, i files di configurazione della vecchia versione sono salvati con l'estensione .rpmsave. Usate le mailing lists, bugzilla, ed IRC per aiutarvi a lavorare al problema. Se ne siete capaci, scrivete o fissate la policy per risolvere il problema.

D:

La mia console è inondata da messaggi. Come li fermo?

R:

Per riottenere il controllo, disattivate i messaggi del kernel alla console con questo comando:

dmesg -n 1
D:

Posso provare la policy predefinita senza installare il pacchetto di sorgenti della policy?

R:

Potete provare la policy predefinita di SELinux installando solamente i pacchetti selinux-policy-policyname e policycoreutils. Senza i sorgenti della policy installati, il comando fixfiles automatizzerà la rietichettatura del file system.

Il comando fixfiles relabel è l'equivalente di make relabel. Durante la rietichettatura, cancellerà tutti i files in /tmp, ripulendo i files che potrebbero avere vecchie etichette di contesto.

Altri comandi sono fixfiles check, che controlla i files con etichette errate, e fixfiles restore, che fissa i files mal etichettati ma non cancella i files in /tmp. Il comando fixfiles non accetta una lista di directories come argomento, poichè il suo scopo è rietichettare l'intero filesystem. Se avete bisogno di rietichettare una specifica directory, usate restorecon.

D:

Perchè alcune applicazioni KDE hanno problemi sotto SELinux?

R:

Gli eseguibili KDE appaiono sempre come kdeinit, che limita ciò che può essere fatto con la policy SELinux. Questo perchè ogni applicazione KDE viene eseguita nel dominio per kdeinit.

I problemi spesso insorgono quando si installa SELinux perchè non è possibile rietichettare //tmp e /var/tmp. Non c'è un buon metodo di determinare quale file dovrebbe avere quale contesto.

La soluzione è quella di eseguire un pieno log out da KDE e rimuovere tutti i files temporanei di KDE:

rm -rf /var/tmp/kdecache-<username> rm -rf /var/tmp/<other_kde_files>

Al prossimo login, il problema dovrebbe essere risolto.

D:

Perchè SELINUX=disabled non funziona per me?

R:

Fate attenzione agli spazi vuoti nel file /etc/sysconfig/selinux. Il codice è molto sensibile agli spazi vuoti, anche ai tabulatori.

D:

Ho un processo eseguito come unconfined_t, e SELinux previene ancora l'esecuzione della mia applicazione.

R:

Abbiamo cominciato a confinare in qualche modo il dominio unconfined_t. SELinux restringe certe operazioni di protezione della memoria. La seguente è una lista sia di quei dinieghi, che delle possibili ragioni e soluzioni a questi dinieghi. Per maggiori informazioni su queste restrizioni, guardate http://people.redhat.com/drepper/selinux-mem.html.

Queste sono visibili in /var/log/messages (o /var/log/audit/audit.log se usate il demone audit) come dinieghi avc. Queste sono anche mostrate quando vengono eseguiti programmi con errori come

error while loading shared libraries: /usr/lib/libavutil.so.49:
cannot restore segment prot after reloc: Permission denied

che indica che la libreria sta tentando di eseguire una text relocation e fallisce. Le text relocation sono malfatte, ma possono essere permesse mediante il suggerimento riportato in seguito. Sotto vediamo sia i permessi sulla memoria SELinux che sono negati, sia i suggerimenti per risolvere questi dinieghi.

execmod

Questo è di solito basato su un etichetta di libreria. Potete cambiare permanentemente il contesto sulla libreria con i seguenti comandi

# /usr/sbin/semanage fcontext -a -t textrel_shlib_t '/usr/lib/libavutil.so.49.0.0'
# /sbin/restorecon -v /usr/lib/libavutil.so.49.0.0

con la particolare libreria in errore al posto di /usr/lib/libavutil.so.49.0.0. Ora la vostra applicazione sarà in grado di essere eseguita. Siete pregati di segnalare questo in bugzilla.

execstack

Tentate execstack -c LIBRARY. Ora provate nuovamente la vostra applicazione. Se l'applicazione funziona, la libreria era stata per errore contrassegnata come richiedente execstack. Segnalate questo in bugzilla.

execmem, execheap

E' stata fornita una booleana per ognuno di questi controlli sugli errori della memoria. Così se avete bisogno di eseguire un applicazione che necessiti entrambe i permessi, potete impostare la booleana allow_exec* per fissare il problema. Per esempio se provate ad eseguire un applicazione ed ottenete un messaggio AVC contenente un fallimento execstack. Potete impostare la booleana con

setsebool -P allow_execstack=1
D:

Cosa vogliono dire questi errori rpm?

R:
restorecon reset /etc/modprobe.conf context system_u:object_r:etc_runtime_t->system_u:object_r:modules_conf_t
restorecon reset /etc/cups/ppd/homehp.ppd context user_u:object_r:cupsd_etc_t->system_u:object_r:cupsd_rw_etc_t

Durante il processo di aggiornamento, il pacchetto selinux esegue restorecon sulle differenze fra il file_context della policy installata in precedenza ed il nuovo contesto della policy installata. Questo mantiene la correttezza dei contesti dei file su disco.

libsepol.sepol_genbools_array: boolean hidd_disable_trans no longer in policy

Questo indica che la policy aggiornata ha rimosso la booleana dalla policy.

D:

Voglio eseguire un demone su una porta non standard ma SELinux non me lo permette. Come lo faccio funzionare?

R:

Potete usare il comando semanage per definire porte aggiuntive. Diciamo ad esempio che volete consentire ad httpd di ascoltare sulla porta 8082. Potreste inserire il comando.

semanage port -a -p tcp -t http_port_t 8082
D:

Come aggiungo traduzioni aggiuntive nel mio sistema MCS/MLS?

R:

Le traduzioni sono gestite attraverso libsemanage. Usate semanage translation -l per elencare alcune delle traduzioni correnti.

# semanage translation -l
Level                     Translation

s0
s0-s0:c0.c255             SystemLow-SystemHigh
s0:c0.c255                SystemHigh

Ora selezionate una categoria non utilizzata. Diciamo che volete aggiungere Payroll come traduzione, e s0:c6 non è utilizzato.

# semanage translation -a -T Payroll s0:c6
# semanage translation -l
Level                     Translation

s0
s0-s0:c0.c255             SystemLow-SystemHigh
s0:c0.c255                SystemHigh
s0:c6                     Payroll
D:

Ho impostato le mie traduzioni MCS/MLS, adesso vorrei designare quali utenti possono leggere una data categoria?

R:

Potete modificare la gamma delle categorie con cui un utente può loggarsi usando semanage, come si vede in questo esempio.

# semanage login -a -r s0-Payroll csellers
# semanage login -l

Login Name                SELinux User              MLS/MCS Range            

__default__               user_u                    s0                       
csellers                  user_u                    s0-Payroll               
root                      root                      SystemLow-SystemHigh

Nel precedente esempio, all'utente csellers è stato dato accesso alla categoria Payroll con il primo comando, come indicato nell'elenco dell'output dal secondo comando.

D:

Sto scrivendo uno script php che necessita di creare files e possibilmente eseguirli. La policy SELinux lo previene. Che devo fare?

R:

Primo, non dovete mai permettere ad un servizio di sistema di eseguire nulla di ciò che scrive. Questo da ad un attaccante la capacità di uploadare codice malizioso sul server ed eseguirlo, che è qualcosa che volete prevenire.

Se avete la mera necessità di permettere ai vostri script di creare files (non-eseguibili), questo è possibile. Detto questo, dovreste evitare di avere applicazioni di sistema che scrivono nella directory /tmp, poichè anche gli utenti tendono ad usare la directory /tmp. Sarebbe meglio creare una directory da qualche altra parte che possa essere posseduta dal processo apache e permettere al vostro script di scriverci. Dovrete etichettare la directory httpd_sys_script_rw_t, che permetterà ad apache di leggere e scrivere files in quella directory. Questa directory potrà essere locata ovunque apache possa raggiungerla (anche $HOME/public_html/).

D:

Sto impostando lo swapping su un file, ma vedo messaggi AVC nei miei file di log?

R:

Avete bisogno di far identificare lo swapfile a SELinux impostando il suco contesto di file a swapfile_t.

chcon -t swapfile_t SWAPFILE
D:

Potete spiegarmi i permessi relabelto/relabelfrom?

R:

Per i files, relabelfrom significa "Può il dominio D rietichettare un file da (es. attualmente in) tipo T1?" e relabelto significa "Può il dominio D rietichettare un file al tipo T2?", così entrambe i controlli sono applicati sula rietichettatura di un file, dove T1 è il tipo originale e T2 è il nuovo tipo specificato dal programma.

Documentazione utile da vedere:

  • Un sommario da Tresys di classi di oggetti e permessi http://tresys.com/selinux/obj_perms_help.shtml

  • Rapporto tecnico Implementing SELinux as an LSM (descrive i controlli sui permessi su una base per-hook) http://www.nsa.gov/selinux/papers/module-abs.cfm. Questo è anche disponibile nel pacchetto selinux-doc (e in modo più aggiornato qui).

  • Rapporto tecnico Integrating Flexible Support for Security Policies into the Linux Operating System (descrive implementazioni e disegni originali, includendo tavole sinottiche delle classi, permessi, e quali controlli di permessi sono applicati a quali chiamate di sistema. Non è completamente aggiornato con l'implementazione attuale, ma ciò nonostante è una buona risorsa). http://www.nsa.gov/selinux/papers/slinux-abs.cfm

1.4. Implementare SELinux

D: Che file systems posso usare per SELinux?
D: Come impatta SELinux sulle prestazioni del sistema?
D: Di che tipo di implementazioni, applicazioni, sistemi, etc. dovrò tener conto per l'uso con SELinux?
D: Che effetto ha SELinux sulle applicazioni di terze parti?
D:

Che file systems posso usare per SELinux?

R:

Il file system deve supportare le etichette xattr nel giusto security.*namespace. Oltre a ext2/ext3, XFS ha recentemente aggiunto il supporto per le necessarie etichette.

Notate che il supporto SELinux XFS non funziona nella serie di kernel 2.6.14 e 2.6.15, ma è stato fissato (aggirando il problema) nella 2.6.16. Il vostro kernel dovrà includere questo fix se scegliete di usare XFS con SELinux.

D:

Come impatta SELinux sulle prestazioni del sistema?

R:

Questa è una variabile difficile da quantificare, ed è pesantemente dipendente dall'affinamento e dall'uso del sistema su cui SELinux sta girando. L'ultima volta che le prestazioni sono state misurate, l'incidenza era circa del 7% per codice completamente non affinato. Successivi cambiamenti in componenti di sistema come il networking sembrerebbero aver peggiorato la situazione in alcuni casi. Le prestazioni e l'affinamento di SELinux continuano ad essere una priorità del team di sviluppo.

D:

Di che tipo di implementazioni, applicazioni, sistemi, etc. dovrò tener conto per l'uso con SELinux?

R:

Inizialmente, SELinux è stato usato per i server affacciati su Internet che eseguono poche, funzioni specializzate, dove è critico mantenere una sicurezza estremamente stretta. Gli amministratori tipicamente privano una simile macchina di software e servizi extra, ed eseguono un gruppo di servizi ristrettissimo, molto mirato. Un Web server o un mail server sono un buon esempio.

In questi servers di nicchia, potrete bloccare la policy molto strettamente. Questo sarà facilitato dal piccolo numero di interazioni con gli altri componenti. Una macchina dedicata che esegue un applicazione specialistica di terze parti sarà anch'essa un buon candidato.

In futuro, SELinux sarà indirizzato a tutti gli ambienti. Per poter raggiungere questo obbiettivo, la comunità e gli independent software vendors (ISVs) dovranno lavorare con gli sviluppatori SELinux per produrre le policy necessarie. Finora, sono state scritte una strict policy molto restrittiva, ed una targeted policy che mira a specifici, demoni vulnerabili.

Per maggiori informazioni su queste policies, fate riferimento a What is SELinux policy? e What is the SELinux targeted policy?.

D:

Che effetto ha SELinux sulle applicazioni di terze parti?

R:

Uno degli scopi nell'implementare la policy targeted di SELinux in Fedora Core è quello di permettere ad applicazioni di terze parti di funzionare senza modifiche. La targeted policy è trasparente a quelle applicazioni che non prova a controllare e che ricadono nella sicurezza di Linux standard. Queste applicazioni non saranno eseguite in maniera extra sicura. Voi od un altro fornitore dovrete scrivere una policy per proteggere queste applicazioni con la sicurezza MAC.

E' impossibile predire come si comporterebbe ogni applicazione di terze parti con SELinux, anche eseguendo la targeted policy. Potreste essere in grado di risolvere problematiche insorgenti cambiando la policy. Potreste trovare che SELinux esponga problemi di sicurezza sconosciuti con la vostra applicazione. Potreste dover modificare l'applicazione per farla funzionare sotto SELinux.

Notate che con l'aggiunta di Policy Modules, è ora possibile per gli sviluppatori di terze parti includere moduli di policy con le loro applicazioni. Se siete uno sviluppatore si terze pari o un manutentore di pacchetti, siete pregati di considerare l'inclusione di un modulo di policy nel vostro pacchetto. Questo permetterà di rendere sicuro il comportamento della vostra applicazione con la potenza di SELinux per ogni utente che installa il pacchetto.

Un valore importante che i testers e gli utenti di Fedora Core portano alla comunità è l'estensivo prova di applicativi di terze parti. Con questo a mente, siete pregati di portare le vostre esperienze alla mailing list appropriata per le discussioni, come la mailing list fedora-selinux. Per maggiori informazioni su questa lista, fate riferimento a http://www.redhat.com/mailman/listinfo/fedora-selinux-list/.




All logos and trademarks in this site are property of their respective owner.
The comments are property of their posters, all the rest 2002 by me.
You can syndicate our news using the file backend.php [RSS] [Valid RSS].

PHP-Nuke Copyright © 2004 by Francisco Burzi. This is free software, and you may redistribute it under the GPL. PHP-Nuke comes with absolutely no warranty, for details, see the license.
Generazione pagina: 0.27 Secondi

Theme Design by: Lorkan Themes