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