== Descrizione ==
Da NSA Security-enhanced Linux Team:<ref>{{citeCita web |url=https://www.nsa.gov/what-we-do/research/selinux/ |titletitolo=Security-Enhanced Linux - NSA/CSS |publishereditore=National Security Agency |datedata=2009-01-15 gennaio 2009 |accessdateaccesso=6 febbraio 2013-02-06}}</ref>
<blockquote>NSA Security-Enhanced Linux è un insieme di strumenti del kernel Linux per monitorare il controllo degli accessi ([[Mandatory Access Control|MAC]]) installato nelle principali distribuzioni Linux.
SELinux è stato progettato per dimostrare il valore dei controlli di accesso obbligatori alla comunità linux e come tali controlli potrebbero essere aggiunti a Linux. Originariamente, le patch che sono state integrate in SELinux dovevano essere esplicitamente applicate al codice sorgente del kernel linux, dalla versione 2.6 del kernel invece è stato completamente integrato di default.
Il primo sviluppatore di SELinux, ha rilasciato la prima versione alla comunità di sviluppo [[Open source|open source]] sotto la [[GNU General Public License|GNU GPL]] il 22 dicembre 2000.<ref>Compare{{citeCita web |url= https://www.nsa.gov/news-features/press-room/press-releases/2001/se-linux.shtml |titletitolo= National Security Agency Shares Security Enhancements to Linux |datedata= 2 gennaio 2001-01-02 |workopera=NSA Press Release |publisher editore= National Security Agency Central Security Service |___location città= Fort George G. Meade, Maryland |accessdate accesso= 2011-11-17 novembre 2011 |quote citazione= The NSA is pleased to announce that it has developed, and is making available to the public, a prototype version of a security-enhanced Linux operating system.}}</ref> Il software si è unito al main kernel Linux 2.6.0-test3, rilasciato l'8 agosto 2003.
Security-Enhanced Linux implementa il [[Flux Advanced Security Kernel]] (FLASK). Questo kernel contiene componenti architetturali progettati per il sistema operativo Fluke. I componenti di Fluke forniscono un ampio supporto per l'applicazione di molti tipi di politiche per il controllo degli accessi obbligatorie, incluse quelle basate su esecuzione, controllo degli accessi role-based (RBAC) e protezioni di [[sicurezza multilivello]]. FLASK, a sua volta, si basa su DTOS, un sistema operativo Trusted Mach, un progetto di ricerca fatto da [[Trusted Information Systems]] che ha influenzato la progettazione e l'implementazione di DTOS.
* Controlli sul file-system, directory, file e [file-descriptor] aperti
* Controlli su sockets, messaggi e intergaccie di rete
* Controllo delle informazioni memorizzate nella cache tramite la AVC<ref>{{cite bookCita libro| authorautore= Fedora Documentation Project | title titolo= Fedora 13 Security-Enhanced Linux User Guide | url = https://books.google.com/books?id=feDeO4IglRkC |accesso= accessdate22 =febbraio 2012-02-22 | year anno= 2010 | publisher editore= Fultus Corporation | isbn = 978-1-59682-215-3 | page p= 18 | quote citazione= SELinux decisions, such as allowing or disallowing access, are cached. This cache is known as the Access Vector Cache (AVC). Caching decisions decreases how often SELinux rules need to checked, which increases performance.}}</ref> (cache vettoriale di accesso dall'inglese Access Vector Cache)
==Implementazioni==
SELinux è implementato e disponibile, dalla versione 4 in poi, nella distribuzione commerciale di Red Hat: "[[Red Hat Enterprise Linux]] (RHEL)".
La politica di sicurezza in RHEL4 punta alla massima facilità d'uso e quindi è molto poco restrittiva. Dopo la quarta versione viene invece implementata una politica di sicurezza molto più restrittiva.
SELinux lo si può anche trovare nelle versioni corrispondenti di [[CentOS]] e [[Scientific Linux]] e dalla versione 4.3<ref>{{citeCita web | titletitolo=Security-Enhanced Linux in Android | accessdateaccesso=2016-01-31 gennaio 2016 | publishereditore=Android Open Source Project | url=https://source.android.com/security/selinux/}}</ref> è anche implementato nel sistema operativo [[Android]].
Una delle prime distribuzioni, supportate dalla comunità GNU/Linux, ad aver implementato SELinux è stata [[Fedora (informatica)|Fedora]]. Altre distribuzioni che oggi lo supportano sono [[Debian]], [[Ubuntu]] 8.04 Hardy Heron<ref>{{citeCita web|url=https://ubuntu-tutorials.com/2008/03/18/how-to-install-selinux-on-ubuntu-804-hardy-heron/|titletitolo=How To Install SELinux on Ubuntu 8.04 "Hardy Heron"|workopera=Ubuntu Tutorials}}</ref> e dalla versione 11.1 Enterprise anche [[SUSE Linux|openSUSE]] ne ha un'implementazione come "anteprima tecnologica"<ref>{{citeCita web|url=https://www.novell.com/linux/releasenotes/x86_64/SUSE-SLED/11/#02 |titletitolo=Release Notes for SUSE Linux Enterprise Desktop 11 |publishereditore=[[Novell]] |datedata= |accessdateaccesso=6 febbraio 2013-02-06}}</ref>.
SELinux è molto utilizzato nei sistemi basati su [[container linux]], come [[Container Linux di CoreOS]] e rkt<ref>{{citeCita web|url=https://coreos.com/os/docs/latest/selinux.html |titletitolo=SELinux on CoreOS|workopera=CoreOS Docs}}</ref>. È utile come controllo di sicurezza aggiuntivo, per contribuire a rafforzare ulteriormente l'isolamento tra i container ed il loro host.
==Possibili utilizzi==
SELinux, potenzialmente, potrebbe controllare, con specifiche molto precise, attività, processi o [[Demone (informatica)|demoni]] di ogni utente che utilizza Linux. In ogni caso il modulo è principalmente utilizzato per limitare demoni come algoritmi per database o server web, che possiedono attività e accesso ai dati nettamente più definiti. Questa limitazione, previene un potenziale danno ad un processo demone che presenta alcune vulnerabilità. Di solito i processi "ordinari" degli utenti vengono eseguiti senza l'ausilio del modulo SELinux ma vengono comunque limitati dai classici permessi di accesso di Linux.
Alcuni command-line utilizzati sono:<ref>{{citeCita web|url=https://fedoraproject.org/wiki/SELinux/Commands |titletitolo=SELinux/Commands - FedoraProject |accessdateaccesso=2015-11-25 novembre 2015}}</ref>
<code>chcon</code>,<ref>{{citeCita web|url=http://linuxcommand.org/man_pages/chcon1.html |titletitolo=chcon |publishereditore=Linuxcommand.org |datedata= |accessdateaccesso=6 febbraio 2013-02-06}}</ref>
<code>restorecon</code>,<ref>{{citeCita web|url=http://linux.die.net/man/8/restorecon |titletitolo=restorecon(8) - Linux man page |publishereditore=Linux.die.net |datedata= |accessdateaccesso=6 febbraio 2013-02-06}}</ref>
<code>restorecond</code>,<ref>{{citeCita web|url=http://linux.die.net/man/8/restorecond |titletitolo=restorecond(8) - Linux man page |publishereditore=Linux.die.net |datedata= |accessdateaccesso=6 febbraio 2013-02-06}}</ref>
<code>runcon</code>,<ref>{{citeCita web|url=http://linux.die.net/man/1/runcon |titletitolo=runcon(1) - Linux man page |publishereditore=Linux.die.net |datedata= |accessdateaccesso=6 febbraio 2013-02-06}}</ref>
<code>secon</code>,<ref>{{citeCita web|url=http://linux.die.net/man/1/secon |titletitolo=secon(1) - Linux man page |publishereditore=Linux.die.net |datedata= |accessdateaccesso=6 febbraio 2013-02-06}}</ref>
<code>fixfiles</code>,<ref>{{citeCita web|url=http://linux.die.net/man/8/fixfiles |titletitolo=fixfiles(8): fix file SELinux security contexts - Linux man page |publishereditore=Linux.die.net |datedata= |accessdateaccesso=6 febbraio 2013-02-06}}</ref>
<code>setfiles</code>,<ref name="auto">{{citeCita web|url=http://linux.die.net/man/8/setfiles |titletitolo=setfiles(8): set file SELinux security contexts - Linux man page |publishereditore=Linux.die.net |datedata= |accessdateaccesso=6 febbraio 2013-02-06}}</ref>
<code>load_policy</code>,<ref>{{citeCita web|url=http://linux.die.net/man/8/load_policy |titletitolo=load_policy(8) - Linux man page |publishereditore=Linux.die.net |datedata= |accessdateaccesso=6 febbraio 2013-02-06}}</ref>
<code>booleans</code>,<ref>{{citeCita web|url=http://linux.die.net/man/8/booleans |titletitolo=booleans(8) - Linux man page |publishereditore=Linux.die.net |datedata= |accessdateaccesso=6 febbraio 2013-02-06}}</ref>
<code>getsebool</code>,<ref>{{citeCita web|url=http://linux.die.net/man/8/getsebool |titletitolo=getsebool(8): SELinux boolean value - Linux man page |publishereditore=Linux.die.net |datedata= |accessdateaccesso=6 febbraio 2013-02-06}}</ref>
<code>setsebool</code>,<ref>{{citeCita web|url=http://linux.die.net/man/8/setsebool |titletitolo=setsebool(8): set SELinux boolean value - Linux man page |publishereditore=Linux.die.net |datedata= |accessdateaccesso=6 febbraio 2013-02-06}}</ref>
<code>togglesebool</code><ref>{{citeCita web|url=http://linux.die.net/man/8/togglesebool |titletitolo=togglesebool(8) - Linux man page |publishereditore=Linux.die.net |datedata= |accessdateaccesso=6 febbraio 2013-02-06}}</ref>
<code>setenforce</code>,
<code>semodule</code>,
<code>semodule_package</code>,
<code>checkmodule</code>,
<code>selinux-config-enforcing</code>,<ref>{{citeCita web|url=http://manpages.ubuntu.com/manpages/natty/man8/selinux-config-enforcing.8.html |titletitolo=Ubuntu Manpage: selinux-config-enforcing - change /etc/selinux/config to set enforcing |publishereditore=[[Canonical Ltd]] |datedata= |accessdateaccesso=6 febbraio 2013-02-06}}</ref>
<code>selinuxenabled</code>,<ref>{{citeCita web|url=http://manpages.ubuntu.com/manpages/natty/man1/selinuxenabled.1.html |titletitolo=Ubuntu Manpage: selinuxenabled - tool to be used within shell scripts to determine if |publishereditore=[[Canonical Ltd]] |datedata= |accessdateaccesso=6 febbraio 2013-02-06}}</ref>
and <code>selinux-policy-upgrade</code><ref>{{citeCita web|url=http://manpages.ubuntu.com/manpages/natty/man8/selinux-policy-upgrade.8.html |titletitolo=Ubuntu Manpage: selinux-policy-upgrade - upgrade the modules in the SE Linux policy |publishereditore=[[Canonical Ltd]] |datedata= |accessdateaccesso=6 febbraio 2013-02-06}}</ref>.
===Esempi===
* Un'importante differenza riguarda il fatto che AppArmor identifica gli oggetti del filesystem in base al nome del percorso anziché l'utilizzo dell'inode. Ciò significa che, ad esempio, un file inaccessibile può diventare accessibile, in AppArmor, anche solo creando un collegamento fisico, mentre SELinux nega l'accesso tramite il nuovo collegamento fisico appena creato.
* Si può affermare che AppArmor non sia un sistema "type enforcement", infatti ai file non viene assegnato un tipo ma vengono semplicemente referenziati in un file di configurazione.
* SELinux e AppArmor differiscono anche in modo significativo nel modo in cui sono amministrati e in che modo si integrano nel sistema<ref>{{citeCita web | url= https://www.suse.com/documentation/sles11/book_security/data/sect1_chapter_book_security.html |publishereditore= SUSE |seriesserie= Security Guide |workopera= SELinux |titletitolo= SELinux backgrounds }}</ref>.
* AppArmor utiilzza i tradizionali controlli DAC a livello MAC, il set di operazioni è anche molto più piccolo di quelli disponibili nella maggior parte delle implementazioni di SELinux. Ad esempio, il set di operazioni di AppArmor consiste in: lettura, scrittura, aggiunta, esecuzione, blocco e collegamento<ref>{{citeCita web | url=http://manpages.ubuntu.com/manpages/hardy/man5/apparmor.d.5.html |titletitolo=apparmor.d - syntax of security profiles for AppArmor}}</ref>. SELinux di solito supporta le stesse autorizzazioni, ma include anche controlli per mknod, binding ai socket di rete, uso implicito delle funzionalità POSIX, caricamento e scaricamento dei moduli del kernel, vari modi per accedere alla memoria condivisa, ecc.
* Non ci sono controlli in AppArmor per le funzionalità POSIX. AppArmor è in grado di impedire che i permessi vengano modificati ed impedire che i filesystem vengano montati/smontati, ma non fa nulla per impedire agli utenti di uscire dal loro dominio di controllo approvato da AppArmor.
* Non esiste la nozione di sicurezza multilivello con AppArmor, quindi non è disponibile alcuna protezione [[Modello Bell-LaPadula|BLP]] o [[Modello Biba|Biba]].
==Sistemi simili==
L'isolamento dei processi e delle applicazioni, per motivi di sicurezza, può essere realizzato anche da altri sistemi, tipo quelli [[virtualizzati]].
Il progetto [[One Laptop per Child|OLPC]], ad esempio, nella sua prima implementazione<ref>{{citeCita web|url=http://wiki.laptop.org/go/Rainbow|titletitolo=Rainbow|workopera=laptop.org}}</ref> eseguiva le applicazioni in server virtuali ([[Vserver]]) separati, fingendo da [[sendbox]].
Anche la NSA ha utilizzato alcuni concetti di SELinux per la sicurezza dei sistemi operativi basati su [[Android]]<ref>{{citeCita web |title titolo= SELinux Related Work |workopera=NSA.gov |url=https://www.nsa.gov/what-we-do/research/selinux/related-work/ }}</ref>.
==Note==
|