SELinux FAQ - Fedora Documentation

Transcript

SELinux FAQ - Fedora Documentation
Fedora 8
SELinux FAQ
Frequently-asked questions about Security Enhanced Linux
Karsten Wade
Paul W. Frields
Chad Sellers
Marc Wiriadisastra
Copyright © 2004,2005 Red Hat, Inc. and others.
The text of and illustrations in this document are licensed by Red Hat under a Creative
Commons Attribution–Share Alike 3.0 Unported license ("CC-BY-SA"). An explanation
of CC-BY-SA is available at http://creativecommons.org/licenses/by-sa/3.0/. The
original authors of this document, and Red Hat, designate the Fedora Project as
the "Attribution Party" for purposes of CC-BY-SA. In accordance with CC-BY-SA, if
you distribute this document or an adaptation of it, you must provide the URL for the
original version.
Red Hat, as the licensor of this document, waives the right to enforce, and agrees not
to assert, Section 4d of CC-BY-SA to the fullest extent permitted by applicable law.
Red Hat, Red Hat Enterprise Linux, the Shadowman logo, JBoss, MetaMatrix, Fedora,
the Infinity Logo, and RHCE are trademarks of Red Hat, Inc., registered in the United
States and other countries.
For guidelines on the permitted uses of the Fedora trademarks, refer to https://
fedoraproject.org/wiki/Legal:Trademark_guidelines.
Linux® is the registered trademark of Linus Torvalds in the United States and other
countries.
Java® is a registered trademark of Oracle and/or its affiliates.
XFS® is a trademark of Silicon Graphics International Corp. or its subsidiaries in the
United States and/or other countries.
All other trademarks are the property of their respective owners.
Sommario
1. SELinux Note e FAQ .............................................................................................................. 2
1
SELinux FAQ
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, poiché alcuni comportamenti
potrebbero essere differenti da come siete abituati.
This FAQ is specific to Fedora 8
If you are looking for the FAQ for other versions of Fedora, refer to http://
docs.fedoraproject.org/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
• NSA SELinux main website — http://www.nsa.gov/selinux/
• NSA SELinux FAQ — http://www.nsa.gov/selinux/info/faq.cfm
• SELinux community page — http://selinux.sourceforge.net
• UnOfficial FAQ — http://www.crypt.gen.nz/selinux/faq.html
• Writing traditional SE Linux policy HOWTO — http://www.lurking-grue.org/
writingselinuxpolicyHOWTO.html
• Reference Policy (the new policy found in Fedora 5) — http://oss.tresys.com/projects/refpolicy
• SELinux policy development training courses — https://www.redhat.com/training/security/courses/
rhs429.html
• Getting Started with SE Linux HOWTO: the new SE Linux (Debian) — http://www.lurking-grue.org/
selinuxHOWTO.html
• List of SELinux object classes and permissions — http://tresys.com/selinux/obj_perms_help.shtml
• Su IRC — irc.freenode.net, #fedora-selinux
• Fedora mailing list — mailto:[email protected]; read the archives or subscribe at http://
www.redhat.com/mailman/listinfo/fedora-selinux-list
Fare cambiamenti/aggiunte alla Fedora SELinux FAQ
This FAQ is available at http://docs.fedoraproject.org/selinux-faq/.
1
For changes or additions to the Fedora SELinux FAQ, use this bugzilla template , which
pre-fills most of the bug report. Patches should be a diff -u against the XML, which is
available from CVS (refer to http://docs.fedoraproject.org/documentation-guide for details
on obtaining the fedora-docs/selinux-faq module from anonymous CVS; you can get just
the fedora-docs/selinux-faq module if you don't want the entire fedora-docs
tree.) Otherwise, plain text showing before and after is sufficient.
2
SELinux Note e FAQ
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
Domanda:
Cos'è SELinux?
Risposta:
SELinux (Security-Enhanced Linux) in Fedora è 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 a DAC model, file and resource decisions are based solely on user identity and ownership
of the objects. Each user and program run by that user has complete discretion over the user's
objects. Malicious or flawed software can do anything with the files and resources it controls
through the user that started the process. If the user is the super-user or the application is
setuid or setgid to root, the process can have root level control over the entire 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ù.
The SELinux implementation uses role-based access control (RBAC), which provides abstracted
user-level control based on roles, and Type Enforcement® (TE). TE uses a table, or matrix to
handle access controls, enforcing policy rules based on the types of processes and objects.
Process types are called domains, and a cross-reference on the matrix of the process's domain
and the object's type defines their interaction. This system provides extremely granular control
for actors in a Linux system.
Domanda:
Cos'è una policy SELinux?
Risposta:
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 è contenuta in un pacchetto, con una pacchetto sorgente associato. Attualmente i
pacchetti che contengono le policy sono:
3
SELinux FAQ
selinux-policy-<version>.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-<version>.noarch.rpm, selinux-policytargeted-<version>.noarch.rpm, selinux-policy-mls-<version>.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.
More information on the different policies available in SELinux can be found at http://
fedoraproject.org/wiki/SELinux/Policies.
Domanda:
Cos'è la policy targeted di SELinux?
Risposta:
Inizialmente, quando SELinux fu incluso in Fedora, 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.
For more information on enabling or disabling targeted policy on each of the specific daemons,
refer to How to use system-config-selinux.
4
SELinux Note e FAQ
More information on the different policies available in SELinux can be found at http://
fedoraproject.org/wiki/SELinux/Policies.
Domanda:
Che programmi sono protetti dalla targeted policy?
Risposta:
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
Domanda:
Che ne è della policy strict? Funziona comunque?
Risposta:
La policy strict su Fedora 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-selinux
imposta una rietichettatura negli scripts di avvio.
More information on the different policies available in SELinux can be found at http://
fedoraproject.org/wiki/SELinux/Policies.
Domanda:
Cos'è la policy mls? A chi serve?
Risposta:
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.
More information on the different policies available in SELinux can be found at http://
fedoraproject.org/wiki/SELinux/Policies.
Domanda:
Cos'è la Reference Policy?
Risposta:
The Reference Policy is a new project maintained by Tresys Technology (http://www.tresys.com/)
designed to rewrite the entire SELinux policy in a way that is easier to use and understand. To do
this, it uses the concepts of modularity, abstraction, and well-defined interfaces. Refer to http://
oss.tresys.com/projects for more information on the 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
5
SELinux FAQ
Reference Policy è quello di avere un singolo, unificato albero dei sorgenti per le differenti
varianti di policy.
Fedora policies at version 1.x are based on the traditional example policy. Version 2.x policies
(as used in Fedora 8) are based on the Reference Policy.
Domanda:
Cosa sono i file contexts?
Risposta:
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 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.
Domanda:
Come vedo il contesto di sicurezza di un file, un utente, o un processo?
Risposta:
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
Domanda:
Che differenza c'è fra un dominio ed un tipo?
Risposta:
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.
Domanda:
Cosa sono i moduli della policy?
Risposta:
Prima di Fedora 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 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.
This actually works by separating out compile and link steps in the policy build procedure.
Policy modules are compiled from source, and linked when installed into the module store (see
Managed Policy). This linked policy is then loaded into the kernel for 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.
6
SELinux Note e FAQ
To see how to write a simple policy module, check out Local Policy Customizations.
Domanda:
Cos'è la managed policy?
Risposta:
Prima di Fedora 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
Domanda:
Come installo/non installo SELinux?
Risposta:
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.
Domanda:
Come amministratore, di cosa ho bisogno per configurare SELinux sul mio sistema?
Risposta:
The answer might be nothing. There are many Fedora users that don't even realize that they
are using SELinux. SELinux provides protection for their systems with an out-of-the-box
configuration. That said, there are a couple of things an administrator might want to do to
configure their system. These include:
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 alto livello. Per vedere le booleane disponibili e modificare le loro impostazioni, usare
system-config-selinux o lo strumento a linea di comando setsebool.
impostare i files di contesto personalizzabili
Files on an SELinux system have a security context which is stored in the extended attribute
of the file (behavior can vary from filesystem to filesystem, but this is how ext3 works). These
are set by rpm automatically, but sometimes a user might want to set a particular context
on a file. An example would be setting the context on a public_html directory so that
apache can access it, as illustrated in How do I make a user public_html directory work
under SELinux.
7
SELinux FAQ
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
There are many libraries around that behave badly and try to break the memory protections
SELinux provides. These libraries should really be fixed, so please file a bug with the library
maintainer. That said, they can be made to work. More information and solutions to make the
libraries work can be found in I have a process running as unconfined_t, and SELinux is still
preventing my application from running.
Domanda:
Come abilito/disabilito la protezione SELinux per uno specifico demone sotto la policy targeted?
Risposta:
Usare system-config-selinux conosciuta anche come lo strumento grafico Gestione
SELinux, per controllare i valori booleani di specifici demoni. Per esempio, se si ritiene di aver
bisogno di disabilitare SELinux per Apache, per poterlo eseguire correttamente nell'ambiente
in uso, è possibile disabilitarne il valore in system-config-selinux. Questo cambiamento
disattiva la transizione alla policy definita in apache.te, permettendo ad httpd di rimanere
sotto la normale sicurezza DAC Linux.
Domanda:
In the past I have written local.te file in policy sources for my own local customization to policy,
how do I do this in Fedora 8?
Risposta:
Since Fedora 5 uses a modular policy, you don't have to have the complete policy source any
more. Now, you can just create a local policy module for your local policy customizations. To do
this, follow these steps.
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).
8
SELinux Note e FAQ
• 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
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).
Fedora 5 introduces a graphical tool that steps you through creating policies. To install the
graphical tool, run the following command:
su -c 'yum install selinux-polgengui'
The Policy Generation Graphical Tool makes it easier to create policies to restrict applications
and users using SELinux. The process described earlier can be completed using the interface to
make your system more or less restrictive for users and applications.
Domanda:
Ho alcuni dinieghi avc che voglio permettere, come faccio?
Risposta:
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
9
SELinux FAQ
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 };
You can hand edit this file, removing allow statements that you don't want to allow, and then
recompile and reload it using
• 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 to add it to the current machine's running policy. This installs a new
module called local with these rules into the module store.
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.
Domanda:
Come posso aiutare a scrivere una policy?
Risposta:
Il tuo aiuto è veramente apprezzato.
• You can start by joining the Fedora SELinux mailing list. You can subscribe and read the
archives at http://www.redhat.com/mailman/listinfo/fedora-selinux-list.
• The Unofficial FAQ has some generic policy writing HOWTO information. Refer to http://
sourceforge.net/docman/display_doc.php?docid=14882&group_id=21266#BSP.1 for more
information.
• Another new resource is the Writing SE Linux policy HOWTO, located online at http://
www.lurking-grue.org/writingselinuxpolicyHOWTO.html.
10
SELinux Note e FAQ
Also, since the Fedora 8 policy is based on the Reference Policy, you should look at the
documentation on its project page. Another excellent source of information is the example policy
files in /usr/share/doc/selinux-policy->version< and /usr/share/selinux/
devel.
Se volete creare un nuovo dominio di policy, potete guardare ai files di interfaccia nelle subdirectory /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.
Domanda:
Come cambio la policy che sto usando?
11
SELinux FAQ
Risposta:
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.
To use the automated method, run the Security Level Configuration tool. From the GUI Main
Menu, select Desktop → System Settings → Security level, or from a terminal, run systemconfig-selinux. Change the policy as desired and ensure that the Relabel on next reboot
option is enabled.
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=policyname 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
With the new system running in permissive mode, check /var/log/messages for avc:
denied messages. These may indicate a problem that needs to be solved for the system to
run without trouble under the new 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.
Domanda:
Come eseguo il back up dei files da un file system SELinux?
Risposta:
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.
12
SELinux Note e FAQ
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.
Domanda:
Come posso installare la policy strict come predefinita con il kickstart?
Risposta:
1. Sotto la sezione %packages, aggiungete selinux-policy-strict.
2.
Sotto la sezione %post, aggiungete quanto segue:
lokkit -q --selinuxtype=strict touch /.autorelabel
Domanda:
Come faccio funzionare una directory utente public_html sotto SELinux?
Risposta:
This process presumes that you have enabled user public HTML directories in your Apache
configuration file, /etc/httpd/conf/httpd.conf. This process only covers serving
static Web content. For more information about Apache HTTP and SELinux, refer to http://
docs.fedoraproject.org/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.
At this point, httpd is configured to serve the contents, but you still receive a 403
forbidden error. This is because httpd is not allowed to read the security type for the
directory and files as they are created in the user's home directory. Change the security
context of the folder and its contents recursively using the -R option:
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
13
SELinux FAQ
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.
Your static webpages should now be served correctly. If you continue to have errors, ensure
that the Boolean which enables user home directories is enabled. You can set it using
system-config-selinux. Select the SELinux tab, and then select the Modify SELinux
Policy area. Select Allow HTTPD to read home directories. The changes take
effect immediately.
Domanda:
Come disabilito SELinux all'avvio?
Risposta:
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.
Domanda:
Come pongo l'enforcing on/off all'avvio?
Risposta:
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.
14
SELinux Note e FAQ
Domanda:
Come disabilito temporaneamente la modalità di enforcing senza dover riavviare?
Risposta:
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.
Domanda:
Come pongo on/off l'auditing delle chiamate di sistema all'avvio?
Risposta:
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.
Domanda:
Come disabilito temporaneamente l'auditing alle system-call senza dover riavviare?
Risposta:
Per farlo, eseguite auditctl -e 0. Notate che questo comando non avrà effetto sull'auditing
dei dinieghi SELinux AVC.
Domanda:
Come ottengo informazioni sullo status della mia installazione SELinux?
Risposta:
Come root, eseguite il comando /usr/sbin/sestatus -v. Per maggiori informazioni, fate
riferimento alla pagina di manuale di sestatus(8).
Domanda:
Come scrivo una policy per permettere ad un dominio di usare pam_unix.so?
Risposta:
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')
This would create a context where vsftpd_t -> chkpwd_exec_t -> system_chkpwd_t which can
read /etc/shadow, while vsftpd_t is not able to read it.
In Fedora 8/RHEL5, add the rule
15
SELinux FAQ
auth_domtrans_chk_passwd(vsftpd_t)
Domanda:
Ho creato un nuovo pacchetto di policy, dove devo metterlo per essere sicuro che verrà caricato
nel kernel?
Risposta:
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
Domanda:
Dove sono conservati i messaggi AVC di SELinux (dinieghi logs, etc.)?
Risposta:
In Fedora 2 and 3, SELinux AVC messages could be found in /var/log/messages. In
Fedora 4, the audit daemon was added, and these messages moved to /var/log/audit/
audit.log. In Fedora 5, the audit daemon is not installed by default, and consequently these
messages can be found in /var/log/messages unless you choose to install and enable
the audit daemon, in which case AVC messages will be in /var/log/audit/audit.log.
Fedora 7 introduced the setroubleshoot browser, which enables you to see denials in a graphical
browser. To install setroubleshoot, run the Add/Remove Programs tool or use the following
command:
su -c 'yum install setroubleshoot'
You can add plugins by installing the setroubleshoot-plugins package:
su -c 'yum install setroublshoot-plugins'
Domanda:
My application isn't working as expected and I am seeing avc: denied messages. How do I fix
this?
Risposta:
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.
First, one of the files the application is trying to access could be mislabeled. If the AVC message
refers to a specific file, inspect its current label with ls -alZ /path/to/file. If it seems
wrong, use the command restorecon -v /path/to/file to restore the file's default
context. If you have a large number of denials related to files, you may want to use fixfiles
relabel, or run restorecon -R /path to recursively relabel a directory path.
Denials are sometimes due to a configuration change in the program that triggered the denial
message. For example, if you change Apache to also listen on port 8800, you must also change
16
SELinux Note e FAQ
the security policy, apache.te. Refer to Elenco link esterni for more information about writing
policy.
If you are having trouble getting a specific application like Apache to work, refer to How to use
system-config-selinux for information on disabling enforcement just for that application.
Domanda:
I installed Fedora on a system with an existing /home partition, and now I can't log in.
Risposta:
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.
Domanda:
Dopo aver rietichettato la mia /home usando setfiles o fixfiles, sarò ancora in grado di
leggere /home con un sistema con SELinux non abilitato?
Risposta:
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
con SELinux abilitato.
Domanda:
Come posso condividere directories usando NFS tra Fedora e sistemi non-SELinux?
Risposta:
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.
17
SELinux FAQ
Domanda:
How can I create a new Linux user account with the user's home directory having the proper
context?
Risposta:
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.)
Domanda:
Il comando su cambia la mia identità e ruolo SELinux?
Risposta:
In precedenti versioni di Fedora, 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.
Domanda:
I'm having troubles with avc errors filling my logs for a particular program. How do I choose not
to audit the access for it?
Risposta:
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.
Domanda:
Even running in permissive mode, I'm getting a large number of avc denied messages.
Risposta:
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,
18
SELinux Note e FAQ
l'applicazione non viene fermata dal traversare l'albero della directory, e genererà un messaggio
di diniego per ogni file letto nella directory.
Domanda:
I get a specific permission denial only when SELinux is in enforcing mode, but I don't see any
audit messages in /var/log/messages (or /var/log/audit/audit.log if using the audit
daemon). How can I identify the cause of these silent denials?
Risposta:
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
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
Domanda:
Perché non vedo l'output quando eseguo certi demoni in modalità debug o interattiva?
Risposta:
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 si fa il debug di un demone, si potrebbe voler disattivare la transizione del demone
al suo dominio specifico. E' possibile 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.
19
SELinux FAQ
Domanda:
Quando eseguo un upgrade del pacchetto delle policy (per esempio, usando yum), cosa
succede con la policy? E' automaticamente aggiornata?
Risposta:
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
Domanda:
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?
Risposta:
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.
Domanda:
Why do binary policies distributed with Fedora, such as /etc/selinux/<policyname>/
policy/policy.<version>, and those I compile myself have different sizes and MD5
checksums?
Risposta:
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.
Domanda:
I nuovi pacchetti policy potranno disabilitare il mio sistema?
Risposta:
There is a possibility that changes in the policy package or in the policy shipping with an
application package can cause errors, more denials, or other unknown behaviors. You can
discover which package caused the breakage by reverting policy and application packages
one at a time. If you don't want to return to the previous package, the older version of the
configuration files will be saved with the extension .rpmsave. Use the mailing lists, bugzilla,
and IRC to help you work through your problem. If you are able, write or fix policy to resolve your
problem.
Domanda:
La mia console è inondata da messaggi. Come li fermo?
20
SELinux Note e FAQ
Risposta:
Per riottenere il controllo, disattivate i messaggi del kernel alla console con questo comando:
dmesg -n 1
Domanda:
Posso provare la policy predefinita senza installare il pacchetto di sorgenti della policy?
Risposta:
Potete provare la policy predefinita di SELinux installando solamente i pacchetti selinuxpolicy-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.
Domanda:
Perché alcune applicazioni KDE hanno problemi sotto SELinux?
Risposta:
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.
Domanda:
Perché SELINUX=disabled non funziona per me?
Risposta:
Fate attenzione agli spazi vuoti nel file /etc/sysconfig/selinux. Il codice è molto sensibile
agli spazi vuoti, anche ai tabulatori.
Domanda:
Ho un processo eseguito come unconfined_t, e SELinux previene ancora l'esecuzione della
mia applicazione.
Risposta:
We have begun to confine the unconfined_t domain somewhat. SELinux restricts certain
memory protection operation. Following is a list of those denials, as well as possible reasons
and solutions for those denials. For more information on these restrictions, see 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
21
SELinux FAQ
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
Domanda:
Cosa vogliono dire questi errori rpm?
Risposta:
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.
22
SELinux Note e FAQ
Domanda:
Voglio eseguire un demone su una porta non standard ma SELinux non me lo permette. Come
lo faccio funzionare?
Risposta:
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
Domanda:
Come aggiungo traduzioni aggiuntive nel mio sistema MCS/MLS?
Risposta:
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
Domanda:
Ho impostato le mie traduzioni MCS/MLS, adesso vorrei designare quali utenti possono leggere
una data categoria?
Risposta:
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 SystemLowSystemHigh
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.
Domanda:
Sto scrivendo uno script php che necessita di creare files e possibilmente eseguirli. La policy
SELinux lo previene. Che devo fare?
Risposta:
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
23
SELinux FAQ
directory. Questa directory potrà essere locata ovunque apache possa raggiungerla (anche
$HOME/public_html/).
Domanda:
Sto impostando lo swapping su un file, ma vedo messaggi AVC nei miei file di log?
Risposta:
Avete bisogno di far identificare lo swapfile a SELinux impostando il suco contesto di file a
swapfile_t.
chcon -t swapfile_t SWAPFILE
Domanda:
Potete spiegarmi i permessi relabelto/relabelfrom?
Risposta:
For files, relabelfrom means "Can domain D relabel a file from (i.e. currently in) type T1?" and
relabelto means "Can domain D relabel a file to type T2?", so both checks are applied upon
a file relabeling, where T1 is the original type of the type and T2 is the new type specified by the
program.
Documentazione utile da vedere:
• Object class and permission summary by Tresys http://tresys.com/selinux/
obj_perms_help.shtml
• Implementing SELinux as an LSM technical report (describes permission checks on a perhook basis) http://www.nsa.gov/selinux/papers/module-abs.cfm. This is also available in the
selinux-doc package (and more up-to-date there).
• Integrating Flexible Support for Security Policies into the Linux Operating System - technical
report (describes original design and implementation, including summary tables of classes,
permissions, and what permission checks are applied to what system calls. It is not entirely
up-to-date with current implementation, but a good resource nonetheless). http://www.nsa.gov/
selinux/papers/slinux-abs.cfm
1.4. Implementare SELinux
Domanda:
Che file systems posso usare per SELinux?
Risposta:
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.
Domanda:
Come impatta SELinux sulle prestazioni del sistema?
Risposta:
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.
24
SELinux Note e FAQ
Domanda:
Di che tipo di implementazioni, applicazioni, sistemi, etc. dovrò tener conto per l'uso con
SELinux?
Risposta:
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.
For more information about these policies, refer to What is SELinux policy? and What is the
SELinux targeted policy?.
Domanda:
Che effetto ha SELinux sulle applicazioni di terze parti?
Risposta:
Uno degli scopi nell'implementare la policy targeted di SELinux in Fedora è 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.
Note that with the addition of Policy Modules, it is now possible for third-party developers to
include policy modules with their application. If you are a third-party developer or a packagemaintainer, please consider including a policy module in your package. This will allow you to
secure the behavior of your application with the power of SELinux for any user installing your
package.
One important value that Fedora testers and users bring to the community is extensive testing
of third-party applications. With that in mind, please bring your experiences to the appropriate
mailing list, such as the fedora-selinux list, for discussion. For more information about that list,
refer to http://www.redhat.com/mailman/listinfo/fedora-selinux-list/.
25
26