From sparks at fedoraproject.org Wed Jun 10 15:46:01 2015 Content-Type: multipart/mixed; boundary="===============0340056048976850889==" MIME-Version: 1.0 From: Eric Christensen To: docs-commits at lists.fedoraproject.org Subject: web/html/docs/selinux-user-guide/f11/es-ES/html-single index.html, NONE, 1.1 Date: Thu, 25 Jun 2009 22:27:02 +0000 Message-ID: <20090625222702.5B3367010B@cvs1.fedora.phx.redhat.com> --===============0340056048976850889== Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Author: sparks Update of /cvs/fedora/web/html/docs/selinux-user-guide/f11/es-ES/html-single In directory cvs1.fedora.phx.redhat.com:/tmp/cvs-serv1493 Added Files: index.html = Log Message: Adding es-ES single-html. --- NEW FILE index.html --- Linux con Segurid= ad Mejorada
Fedora 11

Linux con Seguridad Mejorada

Gu=C3=ADa del Usuario

Edici=C3=B3n 1.3

Logo

Murray McAllister

Red Hat Ingenier=C3=ADa de Servicios de Cont= enidos
mmcallis(a)redhat.com

Daniel Walsh

Red Hat Ingenier=C3=ADa de Segur= idad
dwalsh(a)redhat.com

Dominick Grift

Editor T=C3=A9cnico = para la Introducci=C3=B3n, Contextos de SELinux, Pol=C3=ADtica Destinada, T= rabajando con SELinux, Confinando Usuarios, y cap=C3=ADtulos de Resoluci=C3=B3n de Problemas.=C2=A0
domg472(a)gmail.com

Eric Paris

Editor T=C3=A9cnico p= ara las secciones de Montaje de Sistemas de Archivo y Mensajes de Auditor= =C3=ADa Crudos..=C2=A0
Red Hat Ingenier=C3=ADa de Seguridad
eparis(a)parisplace.org

James Morris

Editor T=C3=A9cnico = para los cap=C3=ADtolos de Introducci=C3=B3n y Pol=C3=ADtica Destinada.=C2=A0
Red Hat Ingenier=C3=ADa de Segurid= ad
jmorris(a)redhat.com

Scott Radvan

Red Hat Ingenier=C3=ADa de Servicios d= e Contenido
sradvan(a)redhat.com

Copyright =C2=A9 2009 Red Hat, Inc.

<= hr/>

= aviso legal

Copyright =C2=A9 2009 Red Hat, Inc. This mater= ial may only be distributed subject to the terms and conditions set forth i= n the Open Publication License, V1.0, (the latest version is presently avai= lable at http://www.opencon= tent.org/openpub/).
Fedora and the Fedora Infinity Design logo are trademarks or registered t= rademarks of Red Hat, Inc., in the U.S. and other countries.
Red Hat and the Red Hat "Shadow Man" logo are registered trademarks of Re= d Hat Inc. in the United States and other countries.
All other trademarks and copyrights referred to are the property of their= respective owners.
Documentation, as with software itself, may be subject to export control.= Read about Fedora Project export controls at http://fedoraproject.org/wiki/Legal/Export. =
Resumen
Este libro es acerca de la administraci=C3=B3n y uso del Linux=C2=AE de Seguridad Mejorada.

Prefacio
1. Convenciones del Docum= ento
1.1. Convenciones Tipogr=C3=A1ficas
1.2. Convenciones del documento
1.3. Notas y Advertencias<= /span>
2. =C2= =A1Necesitamos sus comentarios!
1= . Informaci=C3=B3n de Marca Comercial
1.1. Source Code
2. Int= roducci=C3=B3n
2.1. Beneficios de usar SELinux
2.2. Ejemp= los
2.3. Arquitectura de SELinu= x
2.4. SELinux en= otros Sistemas Operativos
3. Contexto= s de SELinux
3.1. Transiciones de Dominios
3.2. Contextos de SELinux para los Procesos=
3.3. Contextos de SE= Linux para los Usuarios
4. Pol=C3=ADtic= a Destinado
4.1. Proce= sos Confinados
4.2. Procesos= no Confinados
4.3. Usuarios Confinados y no Confinados
5. Trabajando con SELinux
5.1. Paquetes de SELinux<= /dt>
5.2. Qu=C3=A9 Archivo Log se usa=
5.3. Archivo de Con= figuraci=C3=B3n Principal
5.4. Habilitando y Deshabilitando SELinux
<= dl>
5 .4.1. Habilitando SELinux
5.4.2. Deshabilitando SELinux
5.5. Modos de SELinux
5.6. Booleanos
5.6.1.= Listando los Booleanos
5.6.2. Con= figurando los Booleanos
5.6.3= . Booleanos para NFS y CIFS
5.7. Contextos de SE= Linux - Etiquetado de Archivos
5.7.1. Cambios Temporales: chcon
5.7.2. C= ambios Persistentes: semanage fcontext
5.8. Los tipos file_t y default_t
5.9. Montaje de Sistemas de= Archivos
5.9.1. Mon= tajes de Contexto
5.9.2. Cambio del Contexto Pre= determinado
5.9= .3. Montando un Sistema de Archivos NFS
5.9.4. Montajes NFS M=C3=BAltiples
5.9.5. Haciendo Persistente los C= ontextos de Montajes
<= a href=3D"#sect-Security-Enhanced_Linux-Working_with_SELinux-Maintaining_SE= Linux_Labels_">5.10. Mantenci=C3=B3n de las Etiquetas de SELinux
5.10.1. Copia de Directorios y Archivos
5.10.2. Movimiento de = Archivos y Directorios
5.10.3. Chequeando el Contexto SELinux Predetermin= ado
5.10.4. = Archivando archivos con tar
5.10.5. Archivando archivos con tar
6. Confinando a los Usuarios
6.1. Linux y los Mapeos de Usuarios de SELinux
6.2. Confinando Usuarios Nuevos de Linu= x: useradd
6.3. Confinando Usuarios Linux Existentes: semanage login
6.4. Cambiando el Mapeo Prede= terminado
6.5. xguest: Modo Kio= sk
6.6.= Booleanos para que los Usuarios Ej ecuten Aplicaciones
<= a href=3D"#chap-Security-Enhanced_Linux-Troubleshooting">7. Soluci=C3=B3n a= Problemas
7.1. Qu=C3=A9 pasa cuando el Acceso es Denegado
7.2. Tres Principales Causas de Problemas<= /a>
7.2.1. Pro= blemas de Etiquetados
7.2.2. =C2=BFC=C3=B3mo se Ejecutan los Servicios Confin= ados?
7.2.3. Evolucionando las Reglas y las Aplicac= iones Rotas
7.3. Correc= ci=C3=B3n de Problemas
<= a href=3D"#sect-Security-Enhanced_Linux-Fixing_Problems-Linux_Permissions">= 7.3.1. Permisos de Linux
7.3.2. Posibles Causas de las Negaciones Silenciosas
7.3.3. P=C3=A1ginas de Manual para = Servicios
7.3.4. Dominios Perm= isivos
7.3.5. B=C3=BAsqueda y Revisi=C3=B3n de Negaciones=
7.3.6. Mensajes Crudos de Auditor= =C3=ADa
7.3.7. Mensajes sealert<= /a>
7.3.8. Permitiendo el= Acceso: audit2allow
8. I= nformaci=C3=B3n Adicional
8.1. Contributors
8.2. Othe= r Resources
A. Rev= ision History

Prefacio

La Gu=C3=ADa del Usuario de SELinux de Fedora 11 es para gente sin o con = m=C3=ADnima experiencia con SELinux. Aunque la experiencia de administraci= =C3=B3n de sistema no es necesario, el contenido de esta gu=C3=ADa se escri= be para tareas de administraci=C3=B3n del sistema. Esta gu=C3=ADa provee un= a introducci=C3=B3n a los conceptos fundamentales y aplicaciones pr=C3=A1ct= icas de SELinux. Despu=C3=A9s de leer esta gu=C3=ADa debe tener un entendim= iento intermedio de SELinux.
Gracias a todos los que nos alentaron, ofrecieron ayuda y lo probaron - l= a ayuda es muy apreciada. Agradecimientos muy especiales a:

1. Convenciones = del Documento

Este manual utiliza varias convenciones para resaltar algunas palabras y = frases y llamar la atenci=C3=B3n sobre ciertas partes espec=C3=ADficas de i= nformaci=C3=B3n.
En ediciones PDF y de papel, este manual utiliza tipos de letra procedent= es de Liberation Fon= ts. Liberation Fonts tambi=C3=A9n se utilizan en ediciones de HTML si e= st=C3=A1n instalados en su sistema. Si no, se muestran tipograf=C3=ADas alt= ernativas pero equivalentes. Nota: Red Hat Enterprise Linux 5 y siguientes = incluyen Liberation Fonts predeterminadas.
=

1.1. Convenciones Tipogr=C3=A1ficas<= /h3>

Se utilizan cuatro convenciones tipogr=C3=A1ficas para llamar la atenci= =C3=B3n sobre palabras o frases espec=C3=ADficas. Dichas convenciones y las= circunstancias en que se aplican son las siguientes:
Negrita monoespaciado
Utilizada para resaltar la entrada del sistema, incluyendo comandos de s= hell, nombres de archivo y rutas. Tambi=C3=A9n se utiliza para resaltar tec= las claves y combinaciones de teclas.
Para ver el contenido del archivo my_next_best= selling_novel en su directorio actual de trabajo, escriba el comando= cat my_next_bestselling_novel en el int=C3= =A9rprete de comandos de shell y pulse Enter= para ejecutar el comando.
Lo anterior incluye un nombre de archivo, un comando de shell y una tecl= a clave, todo en negrita-monoespaciado y distinguible gracias al contexto.
Las combinaciones de teclas se pueden distinguir de las teclas claves me= diante el gui=C3=B3n que conecta cada parte de una combinaci=C3=B3n de tecl= a. Por ejemplo:
Pulse Enter para ejecuta= r el comando.
Pulse Control+Alt+F1<= /strong> para cambiar a la primera terminal virtual. Pulse Control+Alt+F7 par= a volver a su sesi=C3=B3n de Ventanas-X.
La primera oraci=C3=B3n resalta la tecla clave determinada que se debe p= ulsar. La segunda resalta dos conjuntos de tres teclas claves, cada conjunt= o presionado simult=C3=A1neamente.
Si el c=C3=B3digo fuente es discutido, nombres de clase, m=C3=A9todos, f= unciones, nombres de variables, y valores de retorno mencionados dentro de = un p=C3=A1rrafo ser=C3=A1n presentados como lo anterior, en Negrita-monoespaciado. Por ejemplo:
Las clases de archivo relacionadas incluyen f= ilename para sistema de archivos, file para archivos y dir para directorios. = Cada clase tiene su propio conjunto asociado de permisos.
Negrita proporcional
Esta denota palabras o frases encontradas en un sistema, incluyendo nomb= res de aplicaci=C3=B3n; texto de cuadro de di=C3=A1logo, botones etiquetado= s, etiquetas de cajilla de verificaci=C3=B3n y bot=C3=B3n de radio; t=C3=AD= tulos de men=C3=BA y t=C3=ADtulos del sub-men=C3=BA. Por ejemplo:
Seleccionar Sistema > Preferencias &= gt; Rat=C3=B3n desde la barra del men=C3=BA principal para = lanzar Preferencias de Rat=C3=B3n. En la pesta=C3=B1a de Botones<= /strong>, haga clic en la cajilla r= at=C3=B3n de mano izquierda y luego haga clic en Cerrar para cambiar el bot=C3=B3n p= rincipal del rat=C3=B3n de la izquierda a la derecha (adecuando el rat=C3= =B3n para la mano izquierda).
Para insertar un caracter especial en un archivo gedit, seleccione desde la barra del men=C3= =BA principal Aplicaciones > Accesorios = > Mapa de caracteres. Luego, desde la barra del men=C3= =BA elija B=C3=BAsqueda > Hallar=E2=80= =A6 mapa de caracteres<= /strong>, teclee el nombre del caracter en el campo de B=C3=BAsqueda y haga clic en Siguiente. El caracter buscado se= resaltar=C3=A1 en la Tabla de caracteres<= /strong>. Haga doble clic en este caracter resaltado para colocarlo = en el campo de Texto para copiar<= /span> y luego haga clic en el bot=C3=B3n de Copiar. Ahora regrese a su documento y elija Editar > Pegar desde la barra= de men=C3=BA de gedit.
El texto anterior incluye nombres de aplicaci=C3=B3n; nombres de men=C3= =BA de todo el sistema y elementos; nombres de men=C3=BA de aplicaciones es= pec=C3=ADficas y botones y texto hallados dentro de una interfaz GUI, todos= presentados en negrita proporcional y distinguibles por contexto.
Observe la > abrevia= tura utilizada para indicar recorrido a trav=C3=A9s de un men=C3=BA y sus s= ub-men=C3=BAes. Esto es para evitar la dificultad de seguir el m=C3=A9todo = 'Seleccionar Rat=C3=B3n= desde el sub-men=C3=BA Preferencias en el men=C3=BA de Sistema de la barra de men=C3=BA principal'.
It=C3=A1licas-ne= grita monoespaciado o It=C3=A1licas-negrita proporcional=
Negrita monoespaciado o Negrita proporcional, la adici=C3=B3n de it=C3= =A1licas indica texto reemplazable o variable. Las it=C3=A1licas denotan te= xto que usted no escribe literalmente o texto mostrado que cambia dependien= do de la circunstancia. Por ejemplo:
Para conectar a una m=C3=A1quina remota utilizando ssh, teclee ssh nombredeusuario<= /em>@dominio.nombre en u= n int=C3=A9rprete de comandos de shell. Si la m=C3=A1quina remota es example.com y su nombre de usuario en esa m=C3=A1= quina es john, teclee ssh john(a)example.com.
El comando mount -o remount file-system remonta el sistema de archivo l= lamado. Por ejemplo, para volver a montar el sistema de archivo /home, el comando es mount -o = remount /home.
Para ver la versi=C3=B3n de un paquete actualmente instalado, utilice e= l comando rpm -q pa= quete. =C3=89ste entregar=C3=A1 el resultado siguiente: = paquete-versi=C3=B3= n-lanzamiento.
Observe las palabras en it=C3=A1licas- negrita sobre =E2=80=94 nombre de= usuario, domain.name, sistema de archivo, paquete, versi=C3=B3n y lanzamie= nto. Cada palabra es un marcador de posici=C3=B3n, tanto para el texto que = usted escriba al ejecutar un comando como para el texto mostrado por el sis= tema.
Aparte del uso est=C3=A1ndar para presentar el t=C3=ADtulo de un trabajo= , las it=C3=A1licas denotan el primer uso de un t=C3=A9rmino nuevo e import= ante. Por ejemplo:
cuando el servidor Apache HTTP acepta solicitudes, env=C3=ADa procesos = hijos o hilos para manejarlos. Este grupo de procesos hijos o hilos se cono= ce como un server-pool. Bajo el servidor HTTP = de Apache 2.0, la responsabilidad para crear o mantener estos server-pool s= e resume en un grupo de m=C3=B3dulos llamado M=C3= =B3dulos de multi-procesamiento (MPMs). A= diferencia de otros m=C3=B3dulos, s=C3=B3lo un m=C3=B3dulo del grupo MPM p= uede ser cargado por el servidor HTTP de Apache.

1.2. Conv= enciones del documento

Dos, usualmente de varias l=C3=ADneas, los tipos de datos se distinguen = visualmente del texto circundante.
Salida enviada a una terminal est=C3=A1 establecida en tipo romano monoespaciado y presentada as=C3=AD:
libros        Escritorio   documentaci=C3=B3n=
  borradores  mss    fotos   cosas  svn
libros_pruebas  Escritorio1  descargas      im=C3=A1genes  notas  scripts  =
svgs
Los listados de c=C3=B3digo fuente tambi=C3=A9n se establecen en romano monoespaciado, pero se presentan y re= saltan de la siguiente manera:
package org.jboss.book.jca.ex1;

import javax.naming.InitialContext;

public class ExClient
{
   public static void main(String args[]) =

       throws Exception
   {
      InitialContext iniCtx =3D new InitialContext();
      Object         ref    =3D iniCtx.lookup("EchoBean");
      EchoHome       home   =3D (EchoHome) ref;
      Echo           echo   =3D home.create();

      System.out.println("Created Echo");

      System.out.println("Echo.echo('Hello') =3D " + echo.echo("Hello"));
   }
   =

}
=

1.3. Notas y Advertencias

<= /div>
Finalmente, utilizamos tres estilos visuales para llamar la atenci=C3=B3= n sobre la informaci=C3=B3n que de otro modo se podr=C3=ADa pasar por alto.

Nota

Una nota es una sugerencia, atajo o enfoque alternativo que se tiene a = mano para la tarea. Ignorar una nota no deber=C3=ADa tener consecuencias ne= gativas, pero podr=C3=ADa perderse de algunos trucos que pueden facilitarle= las cosas.

Importante

Los cuadros de importante dan detalles de cosas que se pueden pasar por= alto f=C3=A1cilmente: cambios de configuraci=C3=B3n =C3=BAnicamente aplica= bles a la sesi=C3=B3n actual, o servicios que necesitan reiniciarse antes d= e que se aplique una actualizaci=C3=B3n. Ignorar estos cuadros de important= e no ocasionar=C3=A1 p=C3=A9rdida de datos, pero puede causar enfado y frus= traci=C3=B3n.

Advertencia

Las advertencias no deben ignorarse. Ignorarlas muy probablemente ocasi= onar=C3=A1 p=C3=A9rdida de datos.

2. =C2=A1Necesit= amos sus comentarios!

Cuando env=C3=ADe un reporte de error no olvide mencionar el identificado= r del manual: selinux-user-guide
Si tiene una sugerencia para mejorar la documentaci=C3=B3n, intente ser t= an espec=C3=ADfico como sea posible cuando describa su sugerencia. Si ha en= contrado un error, por favor incluya el n=C3=BAmero de secci=C3=B3n y parte= del texto que rodea el error para que podamos encontrarlo m=C3=A1s f=C3=A1= cilmente.

Cap=C3=ADtulo 1. Informaci=C3=B3n de Marca Comercial

Linux=C2=AE es una marca comercial regis= trada de Linus Torvalds en los EEUU y en otros pa=C3=ADses.
UNIX es una marca comercial registrada de El Grupo Abierto.
Type Enforcement (Obligaci=C3=B3n de Tipos) es una marca comercial de Sec= ure Computing, LLC, una subsidiaria de McAfee, Inc., registrada en los EEUU= y en otros pa=C3=ADses. Ni McAfee ni Secure Computing, LLC, ha consentido = el uso o referencia de esta marca comercial para el autor fuera de esta gu= =C3=ADa.
Apache es una marca comercial de La Fundaci=C3=B3n de Software Apache.
MySQL es una marca comercial o marca comercial registrada de MySQL AB en = los EEUU y en otros pa=C3=ADses.
=

1.1. Source Code

The XML source for this guide is available at http://svn.fedorahosted.org/svn/selinuxguid= e/

Cap=C3=ADtulo 2. Introducci=C3=B3n

2.1. Beneficios de usa= r SELinux
2.2. Ejemplos
= 2.3. Arquitectura de SELinux
2.4. SELinux en otros Sistemas Operati= vos
Los Archivos, tales como directorios y dispositivos, se llaman objetos. L= os procesos, tal como un comando que ejecuta el usuario o la aplicaci=C3=B3= n Mozilla=C2=AE = Firefox=C2=AE, se llaman sujetos. La mayor=C3=ADa de los sistemas oe= prativos usan un sistema de Control de Acceso Discrecional (DAC), que contr= ola c=C3=B3mo interactuan los sujetos con los objetos, y c=C3=B3mo los suje= tos interactuan entre s=C3=AD. En sistemas operativos que usan DAC, los usu= arios controlan los permisos de archivos (objetos) de los que son due=C3=B1= os. Por ejemplo, en sistemas operativos Linux=C2=AE, los usuarios pueden hacer sus directorios legibles para el resto= del mundo, dando a los usuarios y procesos (sujetos) acceso a informaci=C3= =B3n potencialmente sensible.
Los mecanismos DAC son fundamentalmente inadecuados para una fuerte segur= idad del sistema. Las decisiones de acceso DAC son s=C3=B3lo basadas en la = identidad del usuario y su propiedad, ignorando informaci=C3=B3n de segurid= ad relevante tal como el rol del usuario, la funci=C3=B3n y la confiabilida= d del programa, y la sensibilidad e integridad de los datos. Cada usuario t= iene completa discreci=C3=B3n sobre sus archivos, haciendo imposible aplica= r una pol=C3=ADtica de seguridad a nivel de sistema. M=C3=A1s a=C3=BAn, cad= a programa que ejecuta un usuario hereda todos los permisos garantizados al= usuario y es libre de cambiar el acceso de archivos del usuario, por lo qu= e no se provee una protecci=C3=B3n contra software malicioso. Muchos servic= ios del sistema y programas privilegiados deben ejecutarse con privilegios = m=C3=A1s all=C3=A1 de lo que realmente necesitan, por lo que una brecha en = cualquiera de estos programas se puede explotar para obtener acceso complet= o al sistema.[1]
El siguiente es un ejemplo de permisos usados en sistemas operativos Linu= x que no corren el Linux de Seguridad Mejorada (SELinux). Los permisos en e= stos ejemplos pueden diferir de su sistema. Use el comando ls -l para ver los permisos de archivos:
$ ls -l archivo1
-rwxrw-r-- 1 usuario1 grupo1 0 2009-04-30 15:42 archivo1
Los primeros tres bits de permisos, rwx, controlan el acceso que el usuario Linux usuario1 (en este caso, el due=C3=B1o) tiene para el archivo1. Los siguientes tres bits de permisos, rw-, controlan el acceso que el grupo Linux= grupo1 tiene para el archivo1. Los =C3=BAltimos tres bits de permisos, r--, controlan el acceso que todo el mundo ti= ene para el archivo1, que incluyen a todos = los usuarios y procesos.
Linux de Seguridad Mejorada (SELinux por Security-Enhanced Linux) agrega = Control de Acceso Obligatorio (MAC en ingl=C3=A9s) al kernel de Linux, y se= habilita por defecto en Fedora. Una arquitectura MAC de prop=C3=B3sito gen= eral necesita la habilidad de aplicar una pol=C3=ADtica de seguridad puesta= administrativamente sobre todos los procesos y archivos del sistema, basan= do decisiones en las etiquetas que contienen informaci=C3=B3n variada relev= ante para la seguridad. Cuando se implementa apropiadamente, hace que un si= stema se autodefienda adecuadamente y ofrece soporte cr=C3=ADtico para la s= eguridad de aplicaciones protegi=C3=A9ndolas de la manipulaci=C3=B3n y sobr= epaso. MAC provee una separaci=C3=B3n fuerte de aplicaciones que permite la= ejecuci=C3=B3n a salvo de aplicaciones no confiables. Su habilidad para li= mitar los privilegios asociados con la ejecuci=C3=B3n de procesos limita el= =C3=A1mbito del potencial da=C3=B1o que puede resultar de la explotaci=C3= =B3n de vulnerabilidades en aplicaciones y servicios del sistema. MA C hace que la informaci=C3=B3n est=C3=A9 protegida de los usuarios leg=C3= =ADtimos con autorizaci=C3=B3n limitada, as=C3=AD como de usuarios autoriza= dos que involuntariamente ejecutaron aplicaciones maliciosas.[2]
El siguiente es un ejemplo de las etiquetas que contienen informaci=C3=B3= n de seguridad relevante que se usa en los procesos, usuarios Linux y archi= vos, en sistemas operativos Linux que corren SELinux. Esta informaci=C3=B3n= se llama contexto de SELinux y se visualiza usando el comando ls -Z:
$ ls -Z file1
-rwxrw-r--  user1 group1 unconfined_u:object_r:user_home_t:s0      file1
En este ejemplo, SELinux provee un usuario (unconfined_u), un rol (object_r), un tipo (user_home_t), y un niv= el (s0). Esta informaci=C3=B3n se usa= para tomar decisiones sobre el control de acceso. Con DAC, el acceso se co= ntrola basado s=C3=B3lo en los IDs de usuarios y grupos de Linux. Las regla= s de pol=C3=ADticas de SELinux se chequean despu=C3=A9s de las reglas DAC. = Las reglas de pol=C3=ADticas de SELInux no se usan si las reglas DAC niegan= el acceso al principio.
Linux y los Usuario= s SELinux
En sistemas operativos Linux que corren SELinux, hay usuarios Linux as= =C3=AD como usuarios SELinux. Los usuarios SELinux son parte de la pol=C3= =ADtica de SELinux. Los usuarios Linux se mapean a usuarios SELinux. Para e= vitar confusi=C3=B3n, esta gu=C3=ADa usa "usuarios Linux" y "usuarios SELin= ux" para diferenciar entre ambos.

2.1. Beneficios de usar SELinux

  • Todos los procesos y archivos se etiquetan con un tipo. Un tipo define= un dominio para los procesos y un tipo para los archivos. Los procesos se = separan entre s=C3=AD corri=C3=A9ndolos en sus propios dominios, y las regl= as de pol=C3=ADticas de SELinux define c=C3=B3mo interact=C3=BAan los proce= sos con los archivos, as=C3=AD como la forma en que interact=C3=BAan entre = s=C3=AD. El acceso s=C3=B3lo se permite si existe una regla de pol=C3=ADtic= a de SELinux que espec=C3=ADficamente lo permita.
  • Control de acceso m=C3=A1s fino. Yendo un paso m=C3=A1s alla de los pe= rmisos tradicionales de UNIX=C2=AE que se = controlan a discreci=C3=B3n del usuario y se basa en los IDs de usuario y d= e grupos de Linux, las decisiones de accesos de SELinux se basan en toda la= informaci=C3=B3n disponible, tales como un usuario SELinux, el rol, el tip= o y, opcionalmente, un nivel.
  • La pol=C3=ADtica de SELinux se define administrativamente, obligando a= todo el sistema, y no se pone a discreci=C3=B3n del usuario.
  • Vulnerabilidad reducida para ataques de escalamiento de privilegios. U= n ejemplo: dado que los procesos corren en dominios, y son por lo tanto sep= arados entresi, y las reglas de la pol=C3=ADtica de SELinux definen c=C3=B3= mo los procesos acceden a los archivos y a otros procesos, si un proceso qu= eda comprometido, el atacante s=C3=B3lo tiene acceso a las funciones normal= es de ese proceso, y a archivos a los que el proceso tiene configurado que = puede acceder. Por ejemplo, si el Servidor HTTP Apache es comprometido, un = atacante no puede usar el proceso para leer archivos en los directorios hom= e de los usuarios, a menos que una regla espec=C3=ADfica de la pol=C3=ADtic= a de SELinux haya sido agregada o configurada para permitir tal acceso.
  • Se linux se puede usar para asegurar la confidencialidad e integridad = de los datos, as=C3=AD como proteger los procesos de entradas no confiables.
SELinux no es:
  • software antivirus.
  • un reemplazo para las contrase=C3=B1as, cortafuegos y otros sistemas d= e seguridad.
  • una soluci=C3=B3n todo en uno.
SELinux est=C3=A1 dise=C3=B1ado para mejorar las soluciones de seguridad= existentes, no reemplazarlas. A=C3=BAn cuando corra SELinux, siga las buen= as pr=C3=A1cticas de seguridad, tales como mantener el software actualizado= , usar contrase=C3=B1as dif=C3=ADciles de adivinar, cortafuegos y dem=C3=A1= s.

2.2. Ejemplos

Los siguientes ejemplos demuestran c=C3=B3mo SELinux aumenta la segurida= d:
El sitio web de Tresys Technology= tiene una secci=C3=B3n de Noticias de Migraci=C3=B3n a SELinux (en la parte derecha), que lista = los ataques recientes que fueron mitigados o prevenidos por SELinux.

2.3. Arquitectura de SELinux

SELinux es un m=C3=B3dulo de seguridad de Linux que se construye dentro = del kernel de Linux. SELinux se maneja por reglas de pol=C3=ADticas cargabl= es. Cuando un acceso de seguridad relevante se lleva a cabo, tal como un pr= oceso que trata de abrir un archivo, la operaci=C3=B3n es interceptada por = SELinux en el kernel. Si una regla de pol=C3=ADtica de SELinux permite la o= peraci=C3=B3n, contin=C3=BAa, sino, la operaci=C3=B3n se bloquea y el proce= so recibe un error.
Las decisiones de SELinux, tales como permitir o negar accesos, son cach= eadas. Este cach=C3=A9 se conoce como Cach=C3=A9 Vector de Acceso (AVC). La= s decisiones de cacheado disminuye la necesidad de que las reglas de pol=C3= =ADticas de SELinux sean chequeadas muy a menudo, lo que mejora la performa= nce. Las reglas de pol=C3=ADticas de SELinux no tienen efecto si las reglas= DAC niegan el acceso primero.

2.4. SELinux en otros Sistemas Ope= rativos

Vaya a la siguiente informaci=C3=B3n sobre c=C3=B3mo correr SELinux en s= istemas operativos:


[1] "Integraci=C3=B3n del Soporte Flexible para Pol=C3=ADticas de Seguridad = en el Sistema Operativo Linux", de Peter Loscocco y Stephen Smalley. Este p= aper fue preparado originalmente por la Agencia de Seguridad Nacional y est= =C3=A1, consecuentemente, en el dominio p=C3=BAblico. Vaya al pape= r original para mas detalles y el documento tal como fue lanzado la pri= mera vez. Cualquier edici=C3=B3n y cambio fue hecho por Murray McAllister.

[2] "Consiguiendo Objetivos de Seguridad Cr=C3=ADticos con Linux de Segurida= d Mejorada", por Peter Loscocco y Stephen Smalley. Este paper fue preparado= originalmente por la Agencia de Seguridad Nacional y est=C3=A1, consecuent= emente, en el dominio p=C3=BAblico. Vaya al paper original para= detalles y por el documento tal como fue lanzado la primera vez. Cualquier= edici=C3=B3n y cambio fue hecho por Murray McAllister.

[3] Archivos de texto que incluyen informaci=C3=B3n, tal como el mapeo de= nombre de equipo a direcci=C3=B3n IP, que usan los servidores de DNS.

[4] Cox, Mark. "Informe de riesgo: Tres a=C3=B1os del Linux para Empresas= de Red Hat 4". Publicado el 26 Febrero 2008. Accedido el 28 Agosto 2008: <= a href=3D"http://www.redhatmagazine.com/2008/02/26/risk-report-three-years-= of-red-hat-enterprise-linux-4/">http://www.redhatmagazine.com/2008/02/26/ri= sk-report-three-years-of-red-hat-enterprise-linux-4/.

[5] Marti, Don. "Un cintur=C3=B3n de seguridad para software servidor: SE= Linux bloquea explotaciones del mundo real". Publicado el 24 Febrero 2008. = Accedido el 28 Agosto 2008: http://www.linuxworld.com/news/2008/022408-se= linux.html?page=3D1.

Cap=C3=ADtulo 3. Contextos de SELinux

Los procesos y archivos se etiquetan con un contexto SELinux que contiene= informaci=C3=B3n adicional, tal como un usuario SELinux, rol, tipo y, opci= onalmente, un nivel. Cuando se ejecuta SELinux, toda esta informaci=C3=B3n = se usa para tomar decisiones de control de acceso. En Fedora 11, SELinux pr= ovee una combinaci=C3=B3n de Control de Acceso Basado en Roles (RBAC en ing= l=C3=A9s), Obligaci=C3=B3n de Tipos=C2=AE = (TE en ingl=C3=A9s), y, opcionalmente, Seguridad Multi-nivel (MLS en ingl= =C3=A9s).
El siguiente es un ejemplo de contexto de SELinux. Los contextos de SELin= ux se usan en procesos, usuarios de Linux y archivos, en sistemas operativo= s Linux que corren SELinux. Use el comando ls -Z para ver el contexto SELinux de archivos y directorios:
$ ls -Z file1
-rwxrw-r--  user1 group1 unconfined_u:object_r:user_home_t:s0      file1
Los contextos de SELinux siguen la SELinux n= ombre-de-usuario:role:type:level sintaxis:
Usuario SELinux
La identidad de usuario SELinux es una identidad conocida para la pol= =C3=ADtica a la que se le autoriza un conjunto espec=C3=ADfico de roles, y = un rango espec=C3=ADfico de MLS. Cada usuario Linux se mapea a un usuario S= ELinux v=C3=ADa la pol=C3=ADtica de SELinux. Esto permite a los usuarios de= LInux heredar las restricciones de los usuarios SELinux. La identidad del = usuario SELinux mapeado se usa en el contexto de SELinux para procesos en e= sa sesi=C3=B3n, para agrupar a qu=C3=A9 roles y niveles pueden ingresar. Ej= ecute el comando semanage login -l como usua= rio root de Linux para ver una lista de mapeos entre cuentas de usuarios Li= nux y SELinux:
# /usr/sbin/semanage login -l

Login Name                SELinux User              MLS/MCS Range

__default__               unconfined_u              s0-s0:c0.c1023
root                      unconfined_u              s0-s0:c0.c1023
system_u                  system_u                  s0-s0:c0.c1023
La salida puede ser distinta de sistema a sistema. La columna Nombre de Ingreso lista los usuarios Linux, y= la columna Usuario SELinux lista qu= =C3=A9 a usuario SELinux es mapeado un usuario Linux. Para procesos, el usu= ario SELinux limita qu=C3=A9 roles y niveles son accesibles. La =C3=BAltima= columna, Rango MLS/MCS, es el nivel = usado por la Seguridad Multi Nivel (MLS) y por la Seguridad Multi Categor= =C3=ADa (MCS). Los niveles se describen brevemente m=C3=A1s adelante.
rol
Parte de SELinux es el modelo de seguridad de Control de Acceso Basado= en Roles (RBAC). El rol es un atributo de RBAC. Los usuarios de SELinux so= n autorizados para ciertos roles y los roles son autorizados para ciertos d= ominios. Los roles sirven como un intermediario entre dominios y usarios SE= Linux. Los roles en los que se puede ingresar determinan los dominios a los= que se ingresan - al final, esto controla los tipos de objetos que se pued= en acceder. Esto ayuda a reducir la vulnerabilidad de ataques de escalada d= e privilegios.
tipo
El tipo es un atributo de la Obligaci=C3=B3n de Tipos. El tipo define = un dominio para procesos y un tipo para los archivos. Las reglas de pol=C3= =ADticas de SELinux define c=C3=B3mo se acceden los tipos entre si, ya sea = un dominio que accede a un tipo o un dominio que accede a otro dominio. Los= acceso s=C3=B3lo se permiten si existe una regla de pol=C3=ADtica de SELin= ux que lo permita.
nivel<= /em>
El nivel es un atributo de MLS y la Seguridad Multi Categor=C3=ADa (MC= S). Un rango MLS es un par de niveles, escrito como bajonivel-altonivel si los niveles sin distintos, o bajonivel si los niveles son id=C3=A9nt= icos (s0-s0 es lo mismo que s0). Cada nivel es un par sensible a categor= =C3=ADas, donde las categor=C3=ADas son opcionales. Si no hay categor=C3=AD= as, el nivel se escribe como sensibilidad:conj= unto-de-categor=C3=ADa. Si no hay categor=C3=ADas, se escribe c= omo sensibilidad.
Si el conjunto de categor=C3=ADa es una serie contigua, se puede abrev= iar. Por ejemplo, c0.c3 es lo mismo q= ue c0,c1,c2,c3. El archivo /etc/selinux/targeted/setrans.conf mapea los niveles = (s0:c0) a una forma legible al humano= (CompanyConfidential). No edite setrans.conf con un editor de texto: use semanage para hacer cambios. Vaya a la p=C3=A1gina= de manual de se= manage(8) para m=C3=A1s informaci=C3=B3n. En Fedora 11, la po= l=C3=ADtica destinada obglica MCS, y en MCS hay s=C3=B3lo una sensibilidad,= la s0. MCS en Fedora 11 soporta 1024= categor=C3=ADas distintas: c0 a c1023. s0-s0:c0.c1023 es la sensibilidad s0 y autorizado para todas las categor=C3=ADas.
MLS aplica el Modelo de Acceso Obligatorio Bell-LaPadula, y se usa en entornos d= e Perfil de Protecci=C3=B3n de Seguirdad Etiquetada (LSPP en ingl=C3=A9s). = Para usar las restricciones MLS, instale el paquete selinux-policy-mls, y configure a MLS como la pol=C3=ADtica de SELi= nux predeterminada. La pol=C3=ADtica MLS puesta en Fedora mite muchos domin= ios de programa que no eran parte de la configuraci=C3=B3n evaluada, y por = lo tanto, MLS es in=C3=BAtil en un escritorio (no hay soporte para el Siste= ma de Ventanas X); sin embargo, una pol=C3=ADtica MLS se puede incluir desd= e los desarrolladores = de la Pol=C3=ADtica de Referencia de SELinux que incluya todos los domi= nios de programa.

3.1. Transiciones de Dominios

Un proceso transiciona de un dominio a otro ejecutando una aplicaci=C3= =B3n que tiene el tipo entrypoint en = el nuevo dominio. Los permisos entrypoint se usan en las pol=C3=ADticas de SELinux, y controlan qu=C3=A9 aplicac= iones pueden usarse para ingresar a un dominio. El siguiente ejemplo muestr= a una transici=C3=B3n de dominio.
  1. Un usuario desea cambiar su contrase=C3=B1a. Para cambiar sus contrase= =C3=B1as, corren la aplicaci=C3=B3n passwd. = El ejecutable /usr/bin/passwd est=C3=A1 eti= quetado con el tipo passwd_exec_t:
    $ ls -Z /usr/bin/passwd
    -rwsr-xr-x  root root system_u:object_r:passwd_exec_t:s0 /usr/bin/passwd
    
    La aplicaci=C3=B3n passwd= accede /etc/shadow, que est=C3=A1 e= tiquetado con el tipo shadow_t:
    $ ls -Z /etc/shadow
    -r--------  root root system_u:object_r:shadow_t:s0    /etc/shadow
    
  2. Una regla de pol=C3=ADtica de SELinux dice que los procesos que se eje= cutan en el dominio passwd_t no puede= n leer y escribir archivos etiquetados con el tipo shadow_t. El tipo shadow_t s=C3=B3lo se aplica a archivos que necesitan un cambio de contrase=C3= =B1as. Esto incluye a /etc/gshadow, /etc/shadow, y sus archivos de respaldo.
  3. Una regla de pol=C3=ADtica de SELinux fija que el dominio passwd_t tiene permiso de entrypoint al tipo passwd_ex= ec_t.
  4. Cuando un usuario ejecuta la aplicaci=C3=B3n /= usr/bin/passwd, el proceso shell del usuario transiciona al dominio = passwd_t. Con SELinux, dado que la ac= ci=C3=B3n por defecto es negar, y existe una regla que permite (entre otras= cosas) a aplicaciones que corran en el dominio passwd_t acceder a archivos etiquetados con el tipo shadow_t, se le permite a passwd acceder a /et= c/shadow, y actualizar la contrase=C3=B1a del usuario.
Este ejemplo no es exhaustivo, y se usa como un ejemplo b=C3=A1sico para= explicar la transici=C3=B3n de dominio. Aunque hay una regla actual que pe= rmite a sujetos corriendo en el dominio pass= wd_t accedan objetos etiquetados con el tipo de archivo shadow_t, otras reglas de pol=C3=ADtica de SELin= ux se deben cumplir para que el sujeto pueda transicionar a un nuevo domini= o. En este ejemplo, la Obligaci=C3=B3n de Tipo asegura:
  • el dominio passwd_t s=C3=B3lo se= puede ingresar ejecutando una aplicaci=C3=B3n con la etiqueta del tipo passwd_exec_t; s=C3=B3lo pueden ejecutar= desde bibliotecas compartidas autorizadas, tales como las del tipo lib_t; y no pueden ejecutar ninguna otra apl= icaci=C3=B3n.
  • s=C3=B3lo los dominios autorizados, tales como passwd_t, pueden escribir en archivos con la etiqueta del ti= po shadow_t. A=C3=BAn si otros proces= os corren con privilegios de superusuario, esos procesos no podr=C3=A1n esc= ribir archivos etiquetados con el tipo shado= w_t, porque no est=C3=A1n corriendo en el dominio passwd_t.
  • s=C3=B3lo los dominios autorizados pueden transicionar al dominio passwd_t. Por ejemplo, el proceso sendmail corriendo en el dominio sendmail_t no tiene una raz=C3=B3n leg=C3=ADtima par= a ejecutar passwd; por lo tanto, no puede tr= ansicionar nunca al dominio passwd_t.
  • los procesos que se ejecutan en el dominio passwd_t s=C3=B3lo pueden leer y escribir a tipos autorizados, t= ales como archivos etiquetados con los tipos etc_t o shadow_t. Esto impide= a la aplicaci=C3=B3n passwd de ser modificada para leer o escribir en archivos arbitrarios.

3.2. Contextos d= e SELinux para los Procesos

Use el comando ps -eZ para ver los contex= tos de SELinux para los procesos. Por ejemplo:
  1. Abra una terminal, como la de Aplicaci= ones =E2=86=92 Herramien= tas del Sistema =E2=86=92 Terminal.
  2. Ejecute el comando /usr/bin/passwd. No = ingrese una nueva contrase=C3=B1a.
  3. Abra una nueva pesta=C3=B1a, u otra terminal, y ejecute el comando ps -eZ | grep passwd. La salida es similar a la= siguiente:
    unconfined_u:unconfined_r:passwd_t:s0-s0:c0=
    .c1023 13212 pts/1 00:00:00 passwd
    
  4. En la primer pesta=C3=B1a, presione = Ctrl+C para cancelar la aplicaci=C3=B3n passwd.
En este ejemplo, cuando la aplicaci=C3=B3n /usr= /bin/passwd (etiquetada con el tipo p= asswd_exec_t) se ejecuta, el proceso shell del usuario transiciona a= l dominio passwd_t. Recuerde: el tipo= define un dominio para procesos y un tipo para archivos.
Use el comando ps -eZ para ver los contex= tos SELinux de los procesos en ejecuci=C3=B3n. El siguiente es un ejemplo l= imitado de la salida, y puede cambiar en su sistema:
system_u:system_r:setroubleshootd_t:s0 1866 ?=
  00:00:08 setroubleshootd
system_u:system_r:dhcpc_t:s0     1869 ?        00:00:00 dhclient
system_u:system_r:sshd_t:s0-s0:c0.c1023 1882 ? 00:00:00 sshd
system_u:system_r:gpm_t:s0       1964 ?        00:00:00 gpm
system_u:system_r:crond_t:s0-s0:c0.c1023 1973 ? 00:00:00 crond
system_u:system_r:kerneloops_t:s0 1983 ?       00:00:05 kerneloops
system_u:system_r:crond_t:s0-s0:c0.c1023 1991 ? 00:00:00 atd
El rol system_r se usa para proces= os de sistema, como los demonios. El tipo obligatorio los separa luego en d= ominios.

3.3. Contextos de SELinux para los Usu= arios

Use el comando id -Z para ver el contexto= SELinux asociado con su usuario Linux:
unconfined_u:unconfined_r:unconfined_t:s0-s0:=
c0.c1023
En Fedora 11, los usuarios Linux corren no confinados por defecto. Este = contexto de SELinux muestra que el usuario Linux se mapea al usuario SELinu= x unconfined_u, corriendo con el rol = unconfined_r y en el dominio unconfined_t. = s0-s0 es un rango MLS, que en este caso, es el mismo que s0. Las categor=C3=ADas a las que el usuario tie= ne acceso se definen por c0.c1023, qu= e son todas las categor=C3=ADas (c0 a= c1023).

Cap=C3=ADtulo 4. Pol=C3=ADtica Destinado

La pol=C3=ADtica destinada es la pol=C3=ADtica predeterminada de SELinux = usada en Fedora 11. Cuando la pol=C3=ADtica destinada est=C3=A1 en uso, los= procesos son destinados a correr en dominios confinados, y los procesos qu= e no son destinados a correr en un dominio corren en un dominio no confinad= o. Por ejemplo, por defecto, los usuarios que ingresaron corren en el domin= io unconfined_t, y los procesos del s= istema iniciado por init corren en el dominio initrc_t - ambos dominios est=C3=A1n no confinados.
Unconfined domains (as well as confined domains) are subject to executabl= e and writeable memory checks. By default, subjects running in an unconfine= d domain can not allocate writeable memory and execute it. This reduces vul= nerability to buff= er overflow attacks. These memory checks are disabled by setting Boolea= ns, which allow the SELinux policy to be modified at runtime. Boolean confi= guration is discussed later.
=

4.1. Procesos Confinados

Casi todos los servicios que escuchan en la red se confinan en Fedora 11= . Tambi=C3=A9n, la mayor=C3=ADa de los procesos que corren como usuario roo= t de Linux y realizan tareas para los usuarios, tales como la aplicaci=C3= =B3n passwd, est=C3=A1n= confinadas. Cuando un proceso se confina, corre en su propio dominio, tal = como el proceso httpd ejecut=C3=A1ndose e= n el domino httpd_t. Si un proceso co= nfinado es comprometido por un atacante, dependiendo de la configuraci=C3= =B3n de pol=C3=ADtica de SELinux, el acceso del atacante a recursos y el po= sible da=C3=B1o que puedan causar es limitado.
El siguiente ejemplo muestra c=C3=B3mo previene SELinux la lectura por p= arte del Servidor HTTP Apache (httpd) de = archivos que no se etiquetaron correctamente, tales como archivos a usar co= n Samba. Este es un ejemplo, y no se debe usar en producci=C3=B3n. Asume qu= e los paquetes httpd, wget, setroubleshoot-server y audit est=C3=A1n instalados, que se usa la pol=C3= =ADtica destinada de SELinux y que SELinux est=C3=A1 corriendo en modo obli= gatorio:
  1. Ejecute el comando sestatus para confir= mar que SELinux est=C3=A1 activado, se ejecuta en modo obligatorio y que la= pol=C3=ADtica destinada se est=C3=A1 usando:
    $ /usr/sbin/sestatus
    SELinux status:                 enabled
    SELinuxfs mount:                /selinux
    Current mode:                   enforcing
    Mode from config file:          enforcing
    Policy version:                 23
    Policy from config file:        targeted
    
    SELinux status: enabled is retur= ned when SELinux is enabled. Current mode: e= nforcing is returned when SELinux is running in enforcing mode. Policy from config file: targeted is retu= rned when the SELinux targeted policy is used.
  2. Como usuario root de Linux, ejecute el comando touch /var/www/html/prueba para crear un archivo.
  3. Ejecute el comando ls -Z /var/www/html/prueba<= /code> para ver el contexto SELinux:
    -rw-r--r--  root root unconfined_u:object_r=
    :httpd_sys_content_t:s0 /var/www/html/prueba
    
    Por defecto, los usuarios Linux corren no confinados en Fedora 11, raz= =C3=B3n por la cual el archivo prueba se et= iqueta con el usuario SELinux unconfined_u. RBAC se usa para procesos, y no para archivos. Los roles no tienen s= ignificado para archivos - el rol object_r es un rol gen=C3=A9rico usado para archivos (en sistemas de archivos = persistentes y de red). Bajo el directorio /proc/<= /code>, los archivos relacionados con procesos pueden usar el rol system_r.[6] El tipo httpd_sys_content_t permite al proceso httpd acceder a este archivo.
  4. Como usuario root de Linux, ejecute el comando service httpd start para iniciar el proceso httpd. La salida escomo sigue si http= d inicia con =C3=A9xito:
    # /sbin/service httpd start
    Iniciando httpd:                                            [  OK  ]
    
  5. Cambie al directorio donde su usuario Linux tenga acceso de escritura = y ejecute el comando wget http://localhost/prueba. A menos que hubieran cambios en la configuraci=C3=B3n predeterminada= , este comando tiene =C3=A9xito:
    --2009-05-06 23:00:01--  http://localhost/p=
    rueba
    Resolving localhost... 127.0.0.1
    Connecting to localhost|127.0.0.1|:80... connected.
    HTTP request sent, awaiting response... 200 OK
    Length: 0 [text/plain]
    Saving to: `prueba'
    
    [ <=3D>                              ] 0     --.-K/s   in 0s
                    =
    
    2009-05-06 23:00:01 (0.00 B/s) - `prueba' saved [0/0]
    
  6. El comando chcon reetiqueta archivos; s= in embargo, tales cambios de etiquetas no sobreviven cuando el sistema se r= eetiqueta. Para que los cambios sobrevivan un reetiquetado del sistema, use= el comando semanage, que se discute m=C3=A1= s adelante. Como usuario root de Linux, corra el siguiente comando para cam= biar el tipo a un tipo usado por Samba:
    chcon -t samba_share_t /var/www/html/prueba
    Ejecute el comando ls -Z /var/www/html/prueba<= /code> para ver los cambios:
    -rw-r--r--  root root unconfined_u:object_r=
    :samba_share_t:s0 /var/www/html/prueba
    
  7. Nota: los permisos de DAC actuales permiten al proceso httpd acceder al prueba.= Cambie al directorio donde el usuario Linux tenga permiso de escritura y e= jecute el comando wget http://localhost/prueba. A menos que hayan cambios en la configuraci=C3=B3n predeterminada, este= comando fallar=C3=A1:
    --2009-05-06 23:00:54--  http://localhost/p=
    rueba
    Resolving localhost... 127.0.0.1
    Connecting to localhost|127.0.0.1|:80... connected.
    HTTP request sent, awaiting response... 403 Forbidden
    2009-05-06 23:00:54 ERROR 403: Forbidden.
    
  8. Como usuario root de Linux, corra el comando r= m -i /var/www/html/prueba para borrar prueb= a.
  9. Si no necesita que corra httpd, como= usuario root de Linux corra el comando service htt= pd stop para detener a httpd:
    # /sbin/service httpd stop
    Deteniendo httpd:                                            [  OK  ]
    
Este ejemplo muestra la seguridad adicional agregada por SELinux. Aunque= las reglas de DAC permitieron al proceso httpd<= /code> acceder a prueba en el paso 7, dado = que estaba etiquetado con un tipo al que el proceso httpd no ten=C3=ADa acceso, SELinux neg=C3=B3 el acceso. Despu= =C3=A9s del paso 7, un error similar al siguiente se guarda en /var/log/messages:
May 6 23:00:54 localhost setroubleshoot: SELi=
nux is preventing httpd (httpd_t) "getattr"
to /var/www/html/prueba (samba_share_t). For complete SELinux messages.
run sealert -l c05911d3-e680-4e42-8e36-fe2ab9f8e654
Archivos log previos pueden usar el formato /va= r/log/messages.YYYYMMDD.= Cuando se ejecuta syslog-ng, los archivos log previos pueden usar el formato /var/log/messages.X= . Si los procesos setroubleshootd y auditd est=C3=A1n ejecut=C3=A1ndose, errores s= imilares a los siguientes se registran en /var/log= /audit/audit.log:
type=3DAVC msg=3Daudit(1220706212.937:70): av=
c:  denied  { getattr } for  pid=3D1904 comm=3D"httpd" path=3D"/var/www/htm=
l/prueba" dev=3Dsda5 ino=3D247576 scontext=3Dunconfined_u:system_r:httpd_t:=
s0 tcontext=3Dunconfined_u:object_r:samba_share_t:s0  tclass=3Dfile

type=3DSYSCALL msg=3Daudit(1220706212.937:70): arch=3D40000003 syscall=3D19=
6 success=3Dno exit=3D-13 a0=3Db9e21da0 a1=3Dbf9581dc a2=3D555ff4 a3=3D2008=
171 items=3D0 ppid=3D1902 pid=3D1904 auid=3D500 uid=3D48 gid=3D48 euid=3D48=
 suid=3D48 fsuid=3D48 egid=3D48 sgid=3D48 fsgid=3D48 tty=3D(none) ses=3D1 c=
omm=3D"httpd" exe=3D"/usr/sbin/httpd" subj=3Dunconfined_u:system_r:httpd_t:=
s0 key=3D(null)
Tambi=C3=A9n, un error similar al siguiente se registra en /var/log/httpd/error_log:
[Wed May 06 23:00:54 2009] [error] [client 127.0.0.1] (13)Permission denied:=
 access to /prueba denied

Nota

En Fedora 11, los paquetes setroubleshoot-serve= r y audit se instalan por defecto. Es= tos paquetes incluyen los demonios setroubleshoo= td y auditd respectivamente. Estos= demonios se ejecutan por defecto. Detener alguno de ellos provoca un cambi= o de en d=C3=B3nde se graban las negaciones de SELinux. Vaya a Secci=C3=B3n=C2=A0= 5.2, =E2=80=9CQu=C3=A9 Archivo Log se usa=E2=80=9D para m=C3=A1s inform= aci=C3=B3n.

4.2. Procesos no Confinados

=
Los procesos no confinados corren en dominios no confinados, por ejemplo= , los programas init (del arranque) corren en el dominio no confinado initrc_t, los procesos no confinados del k= ernel corren en el dominio kernel_t y= los usuarios no confinados deLInux corren en el dominio unconfined_t. Para procesos no confinados, las reglas d= e la pol=C3=ADtica de SELinux son aplicadas, pero hay reglas de la pol=C3= =ADtica que permiten que los procesos se ejecuten en dominios no confinados= tengan casi todos los accesos. Los procesos que corren en dominios no conf= inados terminan usando exclusivamente las reglas DAC. Si un proceso no conf= inado es comprometido, SELinux no impide que un atacante gane acceso a los = recursos del sistema y a los datos, pero, por supuesto, las reglas DAC toda= v=C3=ADa se usan. SELinux es una mejora de seguridad sobre las reglas DAC -= no las reemplaza.
El siguiente ejemplo muestra c=C3=B3mo el Servidor HTTP Apache (httpd) puede acceder datos que se suponen son par= a ser usados por Samba, cuando se corre no confinado. Nota: en Fedora 11, e= l proceso httpd corre en el dominio confi= nado httpd_t por defecto. Este es un = ejemplo, y no debe usarse en producci=C3=B3n. Se asume que los paquetes httpd, wget, setroubleshoot-server, y audit est=C3=A1n instalados, que se usa la pol=C3=ADtica destinada= de SELinux y que SELinux corre en modo obligatorio:
  1. Ejecute el comando sestatus para confir= mar que SELinux est=C3=A1 activado, se ejecuta en modo obligatorio y que la= pol=C3=ADtica destinada se est=C3=A1 usando:
    $ /usr/sbin/sestatus
    SELinux status:                 enabled
    SELinuxfs mount:                /selinux
    Current mode:                   enforcing
    Mode from config file:          enforcing
    Policy version:                 23
    Policy from config file:        targeted
    
    SELinux status: enabled is retur= ned when SELinux is enabled. Current mode: e= nforcing is returned when SELinux is running in enforcing mode. Policy from config file: targeted is retu= rned when the SELinux targeted policy is used.
  2. Como usuario root de Linux, corra el comando t= ouch /var/www/html/prueba2 para crear un archivo.
  3. Ejecute el comando ls -Z /var/www/html/prueba2= para ver el contexto SELinux:
    -rw-r--r--  root root unconfined_u:object_r=
    :httpd_sys_content_t:s0 /var/www/html/prueba2
    
    Por defecto, los usuarios Linux corren no confinados en Fedora 11, raz= =C3=B3n por la cual el archivo prueba2 est= =C3=A1 etiquetado con el usuario SELinux unc= onfined_u. RBAC se usa para procesos, no para archivos. Los roles no= tienen un significado para archivos - el rol object_r es el rol gen=C3=A9rico que se usa para archivos (en alma= cenamiento persistente y sistemas de archivos de red). Bajo el directorio <= code class=3D"filename">/proc/, los archivos relacionados con proces= os pueden usar el rol system_r.[= 7] El = tipo httpd_sys_content_t permite al p= roceso httpd acceder a este archivo.
  4. El comando chcon reetiqueta archivos; s= in embargo, tales cambios de etiquetas no sobreviven cuando el sistema se r= eetiqueta. Para que los cambios sobrevivan un reetiquetado del sistema, use= el comando semanage, que se discute m=C3=A1= s adelante. Como usuario root de Linux, corra el siguiente comando para cam= biar el tipo a un tipo usado por Samba:
    chcon -t samba_share_t /var/www/html/prueba2
    Ejecute el comando ls -Z /var/www/html/prueba2= para ver los cambios:
    -rw-r--r--  root root unconfined_u:object_r=
    :samba_share_t:s0 /var/www/html/prueba2
    
  5. Corra el comando service httpd status p= ara confirmar que el proceso httpd no se = est=C3=A1 ejecutando:
    $ /sbin/service httpd status
    httpd est=C3=A1 detenido
    
    Si la salida difiere, ejecute service httpd st= op como usuario root de Linux para detener el proceso httpd:
    # /sbin/service httpd stop
    Deteniendo httpd:                                            [  OK  ]
    
  6. Para hacer que el proceso httpd corr= a no confinado, ejecute el siguiente comando como usuario root de Linux par= a cambiar el tipo de /usr/sbin/httpd, a un = tipo que no transicione a un dominio confinado:
    chcon -t unconfined_exec_t /usr/sbin/httpd
  7. Ejecute el comando ls -Z /usr/sbin/httpd para confirmar que /usr/sbin/httpd est=C3= =A1 etiquetado con el tipo unconfined_exec_t= :
    -rwxr-xr-x  root root system_u:object_r:unc=
    onfined_exec_t /usr/sbin/httpd
    
  8. Como usuario root de Linux, ejecute el comando service httpd start para iniciar el proceso httpd. La salida escomo sigue si http= d inicia con =C3=A9xito:
    # /sbin/service httpd start
    Iniciando httpd:                                            [  OK  ]
    
  9. Ejecute el comando ps -eZ | grep httpd = para ver si httpd est=C3=A1 corriendo en = el dominio unconfined_t:
    $ ps -eZ | grep httpd
    unconfined_u:system_r:unconfined_t 7721 ?      00:00:00 httpd
    unconfined_u:system_r:unconfined_t 7723 ?      00:00:00 httpd
    unconfined_u:system_r:unconfined_t 7724 ?      00:00:00 httpd
    unconfined_u:system_r:unconfined_t 7725 ?      00:00:00 httpd
    unconfined_u:system_r:unconfined_t 7726 ?      00:00:00 httpd
    unconfined_u:system_r:unconfined_t 7727 ?      00:00:00 httpd
    unconfined_u:system_r:unconfined_t 7728 ?      00:00:00 httpd
    unconfined_u:system_r:unconfined_t 7729 ?      00:00:00 httpd
    unconfined_u:system_r:unconfined_t 7730 ?      00:00:00 httpd
    
  10. Cambie al directorio donde su usuario Linux tenga permiso de escritura= y ejecute el comando wget http://localhost/prueba2= . A menos que hayan cambios en la configuraci=C3=B3n predeterminada,= este comando deber=C3=ADa tener =C3=A9xito:
    --2009-05-07 01:41:10--  http://localhost/p=
    rueba2
    Resolving localhost... 127.0.0.1
    Connecting to localhost|127.0.0.1|:80... connected.
    HTTP request sent, awaiting response... 200 OK
    Length: 0 [text/plain]
    Saving to: `prueba2.1'
    
    [ <=3D>                            ]--.-K/s   in 0s      =
    
            =
    
    2009-05-07 01:41:10 (0.00 B/s) - `prueba2.1' saved [0/0]
    
    Aunque el proceso httpd no tiene acc= eso a archivos etiquetados con el tipo samba= _share_t, httpd se ejecuta en el d= ominio unconfined_t, y termina usando= las reglas DAC, como tal, el comando wget t= iene =C3=A9xito. Teniendo a httpd ejecut= =C3=A1ndose en el dominio httpd_t, el= comando wget habr=C3=ADa fallado.
  11. El comando restorecon restaura el conte= xto SELinux predeterminado de los archivos. Como usuario root de Linux, eje= cute el comando restorecon -v /usr/sbin/httpd para restaurar el contexto SELinux de /usr/sbin/= httpd:
    # /sbin/restorecon -v /usr/sbin/httpd
    restorecon reset /usr/sbin/httpd context system_u:object_r:unconfined_notra=
    ns_exec_t:s0->system_u:object_r:httpd_exec_t:s0
    
    Ejecute el comando ls -Z /usr/sbin/httpd para confirmar que /usr/sbin/httpd est=C3= =A1 etiquetado con el tipo httpd_exec_t:
    $ ls -Z /usr/sbin/httpd
    -rwxr-xr-x  root root system_u:object_r:httpd_exec_t   /usr/sbin/httpd
    
  12. Como usuario root de Linux, corra el comando /= sbin/service httpd restart para reiniciar httpd. Despu=C3=A9s de reiniciar, ejecute p= s -eZ | grep httpd para confirmar que htt= pd se est=C3=A1 ejecutando en el dominio confinado httpd_t:
    # /sbin/service httpd restart
    Stopping httpd:                                            [  OK  ]
    Starting httpd:                                            [  OK  ]
    # ps -eZ | grep httpd
    unconfined_u:system_r:httpd_t    8880 ?        00:00:00 httpd
    unconfined_u:system_r:httpd_t    8882 ?        00:00:00 httpd
    unconfined_u:system_r:httpd_t    8883 ?        00:00:00 httpd
    unconfined_u:system_r:httpd_t    8884 ?        00:00:00 httpd
    unconfined_u:system_r:httpd_t    8885 ?        00:00:00 httpd
    unconfined_u:system_r:httpd_t    8886 ?        00:00:00 httpd
    unconfined_u:system_r:httpd_t    8887 ?        00:00:00 httpd
    unconfined_u:system_r:httpd_t    8888 ?        00:00:00 httpd
    unconfined_u:system_r:httpd_t    8889 ?        00:00:00 httpd
    
  13. Como usuario root de Linux, corra el comando r= m -i /var/www/html/prueba2 para eliminar pr= ueba2.
  14. Si no necesita que corra httpd, como= usuario root de Linux corra el comando service htt= pd stop para detener a httpd:
    # /sbin/service httpd stop
    Deteniendo httpd:                                            [  OK  ]
    
Los ejemplos en estas secciones muestran c=C3=B3mo proteger los datos de= sde un proceso confinado comprometido (protegido por SELinux), as=C3=AD com= o cu=C3=A1nto m=C3=A1s accesible son los datos para un atacante si el proce= so comprometido estaba no confinado (no protegido por SELinux).

4.3. Usuarios Confinados y no Confin= ados

Cada usuario Linux se mapea a un usuario SELinux v=C3=ADa la pol=C3=ADti= ca de SELinux. Esto permite a los usuarios Linux heredar las restricciones = sobre los usuarios SELinux. Este mapeo de usuarios Linux se ve ejecutando e= l comando semanage login -l como usuario roo= t de Linux:
# /usr/sbin/semanage login -l

Login Name                SELinux User              MLS/MCS Range

__default__               unconfined_u              s0-s0:c0.c1023
root                      unconfined_u              s0-s0:c0.c1023
system_u                  system_u                  s0-s0:c0.c1023
En Fedora 11, los usuarios de Linux se mapean por defecto al ingreso __default__ de SELinux (el cual se mapea= al usuario SELinux unconfined_u). Lo= siguiente define el mapeo por defecto:
__default__               unconfined_u       =
       s0-s0:c0.c1023
El siguiente ejemplo muestra el agregado de un usuario de Linux nuevo y = el mapeo de ese usuario al usuario SELinux u= nconfined_u. Asume que el usuario root corre no confinado, como es p= or defecto en Fedora 11:
  1. Como usuario root de Linux, ejecute el comando /usr/sbin/useradd usuarionuevo para crear un nuevo usuario Linux co= n nombre usuarionuevo.
  2. As the Linux root user, run the passwd newuser= command to assign a password to the Linux newuser user:
    # passwd usuarionuevo
    Changing password for user usuarionuevo.
    New UNIX password: Enter a password<=
    /em> =
    
    Retype new UNIX password: Enter the same pa=
    ssword again =
    
    passwd: all authentication tokens updated successfully.
    
  3. Salga de su sesi=C3=B3n actual e ingrese como el usuario Linux usuario= nuevo. Cuando ingrese, pam_selinux mapea el usuario Linux a un usuario SELi= nux (en este caso, unconfined_u), y configura el contexto SELinux resultant= e. El shell del usuario Linux es entonces lanzado en este contexto. Corra e= l comando id -Z para ver el contexto de un u= suario Linux:
    [usuarionuevo(a)localhost ~]$ id -Z
    unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
    
  4. Salga de la sesi=C3=B3n del usuarionuevo de Linux e ingrese con su cue= nta. Si no quiere el usuario usuarionuevo, ejecute el comando /usr/sbin/userdel -r usuarionuevo como usuario root de = Linux para eliminarlo, junto con su directorio de inicio.
Los usuarios Linux confinados y no confinados son sujeto a chequeso de m= emoria escribible y ejecutable, y tambi=C3=A9n son restringidos por MCS (y = MLS, si la pol=C3=ADtica MLS est=C3=A1 siendo usada). Si los usuarios Linux= no confinados ejecutan una aplicaci=C3=B3n que la pol=C3=ADtica de SELinux= define que puede transicionar del dominio u= nconfined_t a su propio dominio confinado, los usuarios Linux no con= finados est=C3=A1n sujetos a restricciones de ese dominio confinado. El ben= eficio de seguridad de esto es que, aunque un usuario Linux corra no confin= ado, la aplicaci=C3=B3n permanece confinada, y por lo tanto, la explotaci= =C3=B3n de una brecha en la aplicaci=C3=B3n est=C3=A1 limitada por la pol= =C3=ADtica. Nota: esto no protege al sistema del usuario. En su defecto, el= usuario y el sistema est=C3=A1n siendo protegidos de posibles da=C3=B1os c= ausados por una brecha en la aplicaci=C3=B3n.
Los siguientes usuarios SELinux confinados est=C3=A1n disponibles en Fed= ora 11:
=
Usuario Dominio Sistema de Ventanas X su y sudo Ejecute en el directorio de inicio y /tmp/ Red
guest_u guest_t no no opcional no
xguest_u xguest_t si no opcional s=C3=B3lo Firefox
user_u user_t si no opcional si
staff_u staff_t si s=C3=B3lo sudo opcional si
Tabla 4.1. Capacidades del Usuari= o SELinux

=
  • Los usuarios Linux en los dominios gues= t_t, xguest_t y user_t s=C3=B3lo pueden ejecutar aplicaciones con I= D de usuario (setuid) si la pol=C3=ADtica de SELinux lo permite (tal como <= code class=3D"command">passwd). No podr=C3=A1n ejecutar su y /usr/bin/sudo
  • Los usuarios Linux en el dominio guest_= t no tienen acceso a la red, y s=C3=B3lo pueden ingresar v=C3=ADa un= a terminal (incluyendo ssh; pueden ingres= aro por ssh, pero no se pueden ssh conectar a otro sistema).
  • El =C3=BAnico acceso de red que tienen los usuarios en el dominoi xguest_t es con Firefox conect=C3=A1ndose a p=C3=A1ginas web.
  • Los usuarios Linux en los dominios xgue= st_t, user_t y staff_t pueden ingresar v=C3=ADa el Sistema de Venta= nas X o por una terminal.
  • Por defecto, los usuarios Linux en el dominio staff_t no tienen permisos para ejecutar aplicaciones con /usr/bin/sudo. Estos permisos deben ser configu= rados por un administrador.
Por defecto, los usuarios de Linux en los dominios guest_t y xguest_t n= o pueden ejecutar aplicaciones en sus directorios de inicio o en /tmp/, previni=C3=A9ndolos de ejecutar aplicaciones (= que hereden los permisos de los usuarios) en directorios a los que tienen a= cceso de escritura. Esto ayuda a prevenir que aplicaciones maliciosas modif= iquen archivos de los usuarios.
Por defecto, los usuarios Linux en los dominios user_t y staff_t pueden= ejecutar aplicaciones en sus directorios de inicio y en /tmp/. Vaya a Secci=C3=B3= n=C2=A06.6, =E2=80=9CBooleanos para que los Usuarios Ejecuten Aplicaciones= =E2=80=9D para informaci=C3=B3n sobre permitir y evitar que los usuario= s ejecuten aplicaciones en sus directorios de inicio y en /tmp/.


[6] cuando se usan otras pol=C3=ADticas, tal como MLS, se pueden usar otr= os roles, por ejemplo secadm_r.

[7] Cuando se usan otras pol=C3=ADticas, tal como la MLS, se pueden usar = tambi=C3=A9n otros roles, por ejemplo el sec= adm_r.

Cap=C3=ADtulo 5. Trabajando con SELinux

Las siguientes secciones dan un breve repaso de los paquetes de SELinux p= rincipales en Fedora 11; instalaci=C3=B3n y actualizaci=C3=B3n de paquetes;= qu=C3=A9 archivos de registro se usan; el archivo de configuraci=C3=B3n pr= incipal de SELinux; habilitaci=C3=B3n y deshabilitaci=C3=B3n de SELinux; mo= dos de SELinux; configuraci=C3=B3n de Booleanos; cambios temporales y perma= nentes de etiquetas de archivos y directorios; superposici=C3=B3n de las et= iquetas de sistemas de archivos con el comando moun= t; montaje de sistemas de archivos NFS; y c=C3=B3mo preservar contex= tos de SELinux cuando se copia y compacta archivos y directorios.
=

5.1. Paquetes de SELinux

En Fedora 11, los paquetes SELinux se instalan por defecto, a menos que = hayan sido manualmente exclu=C3=ADdos durante la instalaci=C3=B3n. Por defe= cto, la pol=C3=ADtica destinada de SELinux se usa y SELinux corre en modo O= bediente. La siguiente es una descripci=C3=B3n breve de los paquetes SELinu= x principales:
policycoreutils: provee utilitarios, tale= s como semanage, res= torecon, audit2allow, semodule, load_policy y setsebool, para la operaci=C3=B3n y administraci= =C3=B3n de SELinux.
policycoreutils-gui: provee system-config-selinux, una herramienta gr=C3=A1fica par= a la administraci=C3=B3n de SELinux.
selinux-policy: provee una Pol=C3=ADtica = de Referencia de SELinux. La Pol=C3=ADtica de Referencia de SELinux en una = pol=C3=ADtica de SELinux completa, y se usa como base para otras pol=C3=ADt= icas, tales como la pol=C3=ADtica destinada de SELinux. Vaya a la p=C3=A1gi= na Pol=C3=ADtica de Re= ferencia de SELinux de Tresys Technology para m=C3=A1s informaci=C3=B3n= . El paquete selinux-policy-devel provee her= ramientas de desarrollo, tales como/usr/share/selin= ux/devel/policygentool y /usr/share/selinux/= devel/policyhelp, as=C3=AD como archivos de pol=C3=ADtica ejemplos. = Este paquete fue mezclado con el paquete selinux-po= licy.
selinux-policy-p= olicy: provee las pol=C3=ADticas de SELinux. Para la pol= =C3=ADtica destinada, instale selinux-policy-target= ed. Para MLS, instale selinux-policy-mls. En Fedora 8, la pol=C3=ADtica estricta fue mezclada con la pol=C3=ADti= ca destinada, permitiendo a los usuarios confinados y no confinados coexist= ir en el mismo sistema.
setroubleshoot-server: traduce mensajes d= e negaciones, producidos cuando el acceso es denegado por SELinux, en descr= ipciones detalladas que se ven con sealert (= que se provee en este paquete).
setools, setools-= gui y setools-console: estos paquetes= proveen la Distribuci= =C3=B3n de SEHerramientas de Tresys Technology, un n=C3=BAmero de herra= mientas y bibliotecas para analizar y consultar la pol=C3=ADtica, monitorea= r e informes de auditor=C3=ADa, y administraci=C3=B3n de contexto de archiv= os [8]<= /sup>. El paquete setools es un metapaquete = para las SEHerramientas. El paquete setools-gui provee las herramientas apol, seaudit y sediffx. El p= aquete setools-console provee las herramient= as de l=C3=ADnea de comando seaudit-report, = sechecker, sediff< /code>, seinfo, ses= earch, findcon, replcon y indexcon. Vaya a la p=C3= =A1gina de las SEHerrami= entas de Tresys Technology para informaci=C3=B3n sobre estas herramient= as.
libselinux-utils: provee las herramientas= avcstat, getenforce= , getsebool, = matchpathcon, selinuxconlist, selinuxdefcon, selinuxenabl= ed, setenforce, togglesebool.
mcstrans: traduce niveles, tales como s0-s0:c0.c1023, a una forma legible como= SystemLow-SystemHigh. Este paquete n= o se instala por defecto.
Para instalar paquetes en Fedora 11, como usuario root de Linux ejecute = el comando yum install nombre-de-paquete. Por ejemplo, para instalar el paq= uete mcstrans, ejecute el comando yum install mcstrans. Para actualizar todos los paquet= es instalados en Fedora 11, ejecute el comando yum = update.
Vaya a Administraci=C3= =B3n de Software con yum[9] para m=C3=A1s informaci=C3=B3n sobre el uso = de yum para administrar paquetes.

Nota

En versiones anteriores de Fedora, el paquete s= elinux-policy-devel es necesario cuando se crea un m=C3=B3dulo de po= l=C3=ADtica local con audit2allow -M.

5.2. Qu=C3=A9 Archivo Log se us= a

En Fedora 11, los paquetes setroubleshoot-server= y audit se instalan si los paquetes = no se eliminan de la selecci=C3=B3n de paquetes predeterminada. Estos paque= tes incluyen a los demonios setroubleshootd y auditd respectivamente. Estos demoni= os se ejecutan por defecto.
Los mensajes de negaci=C3=B3n de SELinux, tales como el siguiente, se es= criben por defecto en /var/log/audit/audit.log:
type=3DAVC msg=3Daudit(1223024155.684:49): av=
c:  denied  { getattr } for  pid=3D2000 comm=3D"httpd" path=3D"/var/www/htm=
l/archivo1" dev=3Ddm-0 ino=3D399185 scontext=3Dunconfined_u:system_r:httpd_=
t:s0 tcontext=3Dsystem_u:object_r:samba_share_t:s0 tclass=3Dfile
Tambi=C3=A9n, si setroubleshootd est= =C3=A1 ejecut=C3=A1ndose, lo que es por defecto, los mensajes de negaci=C3= =B3n desde /var/log/audit/audit.log se trad= ucen a una forma m=C3=A1s f=C3=A1cil de leer en /v= ar/log/messages:
May  7 18:55:56 localhost setroubleshoot: SEL=
inux is preventing httpd (httpd_t) "getattr" to /var/www/html/archivo1 (sam=
ba_share_t). For complete SELinux messages. run sealert -l de7e30d6-5488-46=
6d-a606-92c9f40d316d
Los mensajes de negaci=C3=B3n se env=C3=ADan a una ubicaci=C3=B3n distin= ta, dependiendo de cu=C3=A1les demonios se est=C3=A1n ejecutando:
=
DaemonLog Location
auditd on/var/log/audit/audit.log
auditd off; rsyslogd on/var/log/messages
setroubleshootd, rsyslogd, and auditd on/var/log/audit/audit.log.= Easier-to-read denial messages also sent to /var/= log/messages
Iniciando Demonios Autom=C3=A1tic= amente
Para configurar los demonios auditd, = rsyslogd, y se= troubleshootd para que inicien autom=C3=A1ticamente al arrancar, cor= ra los siguientes comandos como usuario root de Linux:
/sbin/chkconfig --levels 2345 auditd on
/sbin/chkconfig --levels 2345 rsyslog on
/sbin/chkconfig --levels 345 setroubleshoot on
Use el comando service nombre-de-servicio status para chequear si estos = servicios se est=C3=A1n ejecutando, por ejemplo:
$ /sbin/service auditd status
auditd (pid  1318) is running...
Si los servicos de arriba no se est=C3=A1n ejecutando (nombre-de-servicio est=C3=A1 detenido), use el comando servic= e nombre-de-servicio start como usuario root de Linux para iniciarlos. Por ejemplo:
# /sbin/service setroubleshoot start
Starting setroubleshootd:                                  [  OK  ]
=

5.3. Archivo de Configuraci=C3=B3n Prin= cipal

El archivo /etc/selinux/config es el arc= hivo de configuraci=C3=B3n principal de SELinux. Controla el modo de SELinu= x y la pol=C3=ADtica de SELinux a usar:
# This file controls the state of SELinux on =
the system.
# SELINUX=3D 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=3Denforcing
# SELINUXTYPE=3D can take one of these two values:
#       targeted - Targeted processes are protected,
#       mls - Multi Level Security protection.
SELINUXTYPE=3Dtargeted
SELINUX=3Denforcing
La opci=C3=B3n SELINUX pone el modo en = el que corre SELinux. SELinux tiene tres modos: obediente, permisivo y desh= abilitado. Cuando se usa modo obediente, la pol=C3=ADtica de SELinux es apl= icada y SELinux niega el acceso bas=C3=A1ndose en las reglas de pol=C3=ADti= cas de SELinux. Los mensajes de negaci=C3=B3n se guardan. Cuando se usa mod= o permisivo, la pol=C3=ADtica de SELinux no es obediente. Los mensajes son = guardados. SELinux no niega el acceso, pero se guardan las negaciones de ac= ciones que hubieran sido negadas si SELinux estaba en modo obediente. Cuand= o se usa el modo deshabilitado, SELinux est=C3=A1 deshabilitado (el m=C3=B3= dulo de SELinux no se registra con el kernel de Linux), y s=C3=B3lo se usan= las reglas DAC.
SEL= INUXTYPE=3Dtargeted
La opci=C3=B3n SELINUXTYPE pone la pol= =C3=ADtica SELinux a usar. La pol=C3=ADtica Destinada es la predeterminada.= S=C3=B3lo cambie esta opci=C3=B3n si quiere usar la pol=C3=ADtica MLS. Par= a usar la pol=C3=ADtica MLS, instale el paquete sel= inux-policy-mls; configure SELINUXTYPE=3Dmls<= /code> en /etc/selinux/config; y reinicie s= u sistema.

Importante

Cuando los sistemas corren con SELinux en modo permisivo o deshabilitad= o, los usuarios tiene permiso para etiquetar los archivos incorrectamente. = Tambi=C3=A9n, los archivos creados con SELinux deshabilitado no son etiquet= ados. Esto causa problemas cuando se cambia a modo obediente. Para prevenir= el etiquetado incorrecto o la falta de etiquetado, los sistemas de archivo= s son autom=C3=A1ticamente reetiquetados cuando se cambie desde el modo des= habilitado al modo permisivo u obediente.

5.4. Habilitando y Desh= abilitando SELinux

Use los comandos /usr/sbin/getenforce o <= code class=3D"command">/usr/sbin/sestatus para chequear el estado de= SELinux. El comando getenforce devuelve Obediente, Permisivo, o Deshabilitado. = El comando getenforce devuelve Obediente cuando SELinux est=C3=A1 habilitado (l= as reglas de la pol=C3=ADtica de SELinux son aplicadas):
$ /usr/sbin/getenforce
Enforcing
El comando getenforce devuelve Permissive cuando SELinux est=C3=A1 activado, p= ero las reglas de pol=C3=ADticas de SELinux no est=C3=A1n en obligatorio, y= s=C3=B3lo se usan las reglas DAC. El comando geten= force devuelve Disabled si SEL= inux est=C3=A1 deshabilitado.
El comando sestatus devuelve el estado de= SELinux y la pol=C3=ADtica de SELinux que se est=C3=A1 usando:
$ /usr/sbin/sestatus
SELinux status:                 enabled
SELinuxfs mount:                /selinux
Current mode:                   enforcing
Mode from config file:          enforcing
Policy version:                 23
Policy from config file:        targeted
SELinux status: enabled is returne= d when SELinux is enabled. Current mode: enf= orcing is returned when SELinux is running in enforcing mode. Policy from config file: targeted is return= ed when the SELinux targeted policy is used.

5.4.1. Habilitando SELinux

En sistemas con SELinux deshabilitado, la opci=C3=B3n SELINUX=3Ddisabled se configura en /etc/selinux/config:
# This file controls the state of SELinux on=
 the system.
# SELINUX=3D 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=3Ddisabled
# SELINUXTYPE=3D can take one of these two values:
#       targeted - Targeted processes are protected,
#       mls - Multi Level Security protection.
SELINUXTYPE=3Dtargeted
Tambi=C3=A9n, el comando getenforce devu= elve Disabled:
$ /usr/sbin/getenforce
Disabled
Para habilitar SELinux:
  1. Use los comandos rpm -qa | grep selinux, rpm -q policycoreutils y rpm -qa | grep setroubleshoot para confirmar que los paquete= s de SELinux est=C3=A1n instalados. esta gu=C3=ADa asume que los siguientes= paquetes est=C3=A1n instalados: selinux-policy-tar= geted, selinux-policy, libselinux, libselinux-python, libselinux-utils, policycoreutils, setroubleshoot, setroubleshoot-server, setroubleshoot-plugins. Si estos paquetes no est=C3=A1n instalados,= como usuario root de Linux, debe instalarlos con el comando yum install nombre-de-paquete. Los siguientes paquetes son opcionales: policycoreutils-gui, = setroubleshoot, selinux-policy-devel = y mcstrans.
    Despu=C3=A9s de instalar el paquete setrouble= shoot-server, use el comando /sbin/chkconfig= --list setroubleshoot para confirmar que setroubleshootd se inicia cuando el sistema corre en el nivel de ej= ecuci=C3=B3n [10] 3, 4, y 5:
    $ /sbin/chkconfig --list setroubleshoot
    setroubleshoot  0:off   1:off   2:off   3:on    4:on    5:on    6:off
    
    Si la salida difiere, como usuario root de Linux ejecute el comando <= code class=3D"command">/sbin/chkconfig --levels 345 setroubleshoot on. Esto hace que setroubleshootd se inici= e autom=C3=A1ticamente cuando el sistema est=C3=A9 en los niveles de ejecuc= i=C3=B3n 3, 4 y 5.
  2. Antes de activar SELinux, cada archivo en el sistema de archivo debe = ser etiquetado con un contexto de SELinux. Antes que esto ocurra, los domin= ios confinados pueden tener el acceso denegado, impidiendo de que su sistem= a se inicie correctamente. Para prevenir esto, configure SELINUX=3Dpermissive en /etc/s= elinux/config:
    # This file controls the state of SELinux =
    on the system.
    # SELINUX=3D 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=3Dpermissive
    # SELINUXTYPE=3D can take one of these two values:
    #       targeted - Targeted processes are protected,
    #       mls - Multi Level Security protection.
    SELINUXTYPE=3Dtargeted
    
  3. Como usuario root de Linux, corra el comando = reboot para reiniciar el sistema. Durante el siguiente arranque, los= sistemas de archivo son etiquetados. El proceso etiqueta todos los archivo= s con un contexto de SELinux:
    *** Warning -- SELinux targeted policy rel=
    abel is required.
    *** Relabeling could take a very long time, depending on file
    *** system size and speed of hard drives.
    ****
    
    Cada car=C3=A1cter * en la l=C3= =ADnea de abajo representa 1000 archivos que han sido etiquetados. En el ej= emplo de arriba, cuatro caracteres * = representan 4000 archivos etiquetados. El tiempo que toma reetiquetar todos= los archivos depende del n=C3=BAmero de archivos del sistema, y la velocid= ad de los discos r=C3=ADgidos. En sistemas modernos, este proceso puede tom= ar 10 minutos.
  4. En modo permisivo, la pol=C3=ADtica de SELinux no es aplicada, pero l= as negaciones se guardan para las acciones que hubieran sido negadas si est= aba corriendo en modo obediente. Antes de cambiar a modo obediente, como us= uario root de Linux, ejecute el comando grep "SELin= ux est=C3=A1 negando" /var/log/messages como usuario root de Linux p= ara confirmar que SELinux no neg=C3=B3 acciones durante la =C3=BAltima rein= iciada. Si SELinux no neg=C3=B3 acciones durante el =C3=BAltimo arranque, e= ste comando no devuelve nada. Vaya a Cap=C3=ADtulo=C2=A07, Soluci=C3=B3n a Problemas par= a informaci=C3=B3n para resolver problemas si SELinux neg=C3=B3 el acceso d= urante el arranque.
  5. Si no hay mensajes de negaci=C3=B3n en /var/= log/messages, configure SELINUX=3Denf= orcing en /etc/selinux/config:
    # This file controls the state of SELinux =
    on the system.
    # SELINUX=3D 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=3Denforcing
    # SELINUXTYPE=3D can take one of these two values:
    #       targeted - Targeted processes are protected,
    #       mls - Multi Level Security protection.
    SELINUXTYPE=3Dtargeted
    
  6. Reinicie su sistema. Despu=C3=A9s de reiniciar, confirme que getenforce devuelve E= nforcing:
    $ /usr/sbin/getenforce
    Enforcing
    
  7. Como usuario root de Linux, corra el comando = /usr/sbin/semanage login -l para ver el mapeo entre usuarios de SELi= nux y de Linux. La salida debe ser como la siguiente:
    Login Name                SELinux User    =
              MLS/MCS Range
    
    __default__               unconfined_u              s0-s0:c0.c1023
    root                      unconfined_u              s0-s0:c0.c1023
    system_u                  system_u                  s0-s0:c0.c1023
    
Si =C3=A9ste no es el caso, ejecute los siguientes comandos como usuari= o root de Linux para corregir los mapeos de usuario. Es seguro ignorar los = mensajes El usuario SELinux nombre-de-usuario ya est=C3=A1 definido = si es que aparecen, donde nombre-de-usuario= puede ser unconfined_u, = guest_u, o xguest_u:
  1. =
    /usr/sbin/semanage usuario -a -S targeted -P usuario =
    -R "unconfined_r system_r" -r s0-s0:c0.c1023 unconfined_u
    
  2. =
    /usr/sbin/semanage login -m -S targeted -s "unconfine=
    d_u" -r s0-s0:c0.c1023 __default__
    
  3. =
    /usr/sbin/semanage login -m -S targeted -s "unconfine=
    d_u" -r s0-s0:c0.c1023 root
    
  4. =
    /usr/sbin/semanage usuario -a -S targeted -P usuario =
    -R guest_r guest_u
    
  5. =
    /usr/sbin/semanage usuario -a -S targeted  -P usuario=
     -R xguest_r xguest_u
    

Importante

Cuando los sistemas corren con SELinux en modo permisivo o deshabilita= do, los usuarios tiene permiso para etiquetar los archivos incorrectamente.= Tambi=C3=A9n, los archivos creados con SELinux deshabilitado no son etique= tados. Esto causa problemas cuando se cambia a modo obediente. Para preveni= r el etiquetado incorrecto o la falta de etiquetado, los sistemas de archiv= os son autom=C3=A1ticamente reetiquetados cuando se cambie desde el modo de= shabilitado al modo permisivo u obediente.

5.4.2. Deshabilitando SEL= inux

Para deshabilitar SELinux, configure SELINUX=3Dd= isabled en /etc/selinux/config:
# This file controls the state of SELinux on=
 the system.
# SELINUX=3D 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=3Ddisabled
# SELINUXTYPE=3D can take one of these two values:
#       targeted - Targeted processes are protected,
#       mls - Multi Level Security protection.
SELINUXTYPE=3Dtargeted
Reinicie su sistema. Despu=C3=A9s de reiniciar, confirme que getenforce devuelve Dis= abled:
$ /usr/sbin/getenforce
Disabled

5.5. Modos de SELinux

SELinux tiene tres modos:
  • Obligatorio: la pol=C3=ADtica de SELinux es obligatoria. SELinux niega= el acceso basado en las reglas de pol=C3=ADticas de SELinux.
  • Permisivo: la pol=C3=ADtica de SELinux no es obligatoria. SELinux no n= iega el acceso, pero se guardan las negaciones para acciones que hubieran s= ido negadas si el modo obligatorio estaba activado.
  • Deshabilitado: SELinux est=C3=A1 deshabilitado. S=C3=B3lo se usan las = reglas DAC.
Use el comando /usr/sbin/setenforce para = cambiar entre los modos obediente y permisivo. Los cambios hechos con /usr/sbin/setenforce no sobreviven a una reinicia= da. Para cambiar a modo obediente, como usuario root de Linux, ejecute el c= omando /usr/sbin/setenforce 1. Para cambiar = a modo permisivo, ejecute el comando /usr/sbin/sete= nforce 0. Use el comando /usr/sbin/getenforc= e para ver el modo de SELinux actual.

5.6. Booleanos

Los booleanos permiten cambiar partes de la pol=C3=ADtica de SELinux en = tiempo de ejecuci=C3=B3n, sin ning=C3=BAn conocimiento sobre la escritura d= e pol=C3=ADticas de SELinux. Esto permite cambios, como permitir el acceso = de servicios a sistemas de archivo NFS, sin recargar o recompilar la pol=C3= =ADtica de SELinux.

5.6.1. Listando los Booleanos

Para una lista de los Booleanos, una explicaci=C3=B3n de lo que son y d= e si est=C3=A1n activos o inactivos, ejecute el comando semanage boolean -l como usuario root de Linux. El siguiente ej= emplo no lista todos los Booleanos:
# /usr/sbin/semanage boolean -l
SELinux boolean                          Description

ftp_home_dir                   -> off   Allow ftp to read and write file=
s in the user home directories
xen_use_nfs                    -> off   Allow xen to manage nfs files
xguest_connect_network         -> on    Allow xguest to configure Networ=
k Manager
La columna SELinux boolean lista = los nombres de Booleanos. La columna Descrip= tion lista si el booleano est=C3=A1 activo (on) o inactivo (off) y l= o que hacen.
En el siguiente ejemplo, el Booleano ftp= _home_dir est=C3=A1 apagado, impidiendo al demonio FTP (vsftpd) la lectura y escritura de archivos en los di= rectorios de inicio de los usuarios:
ftp_home_dir                   -> off   P=
ermite a ftp leer y escribir al directorio de inicio de los usuarios
El comando getsebool -a lista los Boolea= nos, ya sea que est=C3=A9n activos o inactivos, pero no da una descripci=C3= =B3n de cada uno. El siguiente ejemplo no lista todos los booleanos:
$ /usr/sbin/getsebool -a
allow_console_login --> off
allow_cvs_read_shadow --> off
allow_daemons_dump_core --> on
Ejecute el comando getsebool nombre-de-booleano para listar solamente e= l estado del booleano nombre-de-booleano:
$ /usr/sbin/getsebool allow_console_login
allow_console_login --> off
Una lista separada por espacio para listar los Booleanos m=C3=BAltiples:
$ getsebool allow_console_login allow_cvs_re=
ad_shadow allow_daemons_dump_core
allow_console_login --> off
allow_cvs_read_shadow --> off
allow_daemons_dump_core --> on
=

5.6.2. Configurando los Booleanos

El comando setsebool = nombre-de-booleano x activa o desactiva Booleanos, donde nombre-de-booleano es un nombre de Booleano, y x es on p= ara activar, u off para desactivar.
El siguiente ejemplo muestra la configuraci=C3=B3n de Booleano httpd_can_network_connect_db:
  1. Por defecto, el booleano httpd_can_net= work_connect_db est=C3=A1 apagado, impidiendo a los scripts y m=C3= =B3dulos del Servidor HTTP Apache conectarse a servidores de bases de datos:
    $ /usr/sbin/getsebool httpd_can_network_co=
    nnect_db
    httpd_can_network_connect_db --> off
    
  2. Para permitir temporalmente a los scripts y m=C3=B3dulos del Servidor= HTTP Apache conectarse a servidores de bases de datos, ejecute el comando = setsebool httpd_can_network_connect_db on co= mo usuario root de Linux.
  3. Use el comando getsebool httpd_can_network_co= nnect_db para verificar que el Booleano est=C3=A1 activado:
    $ /usr/sbin/getsebool httpd_can_network_co=
    nnect_db
    httpd_can_network_connect_db --> on
    
    Esto permite a los scripts y m=C3=B3dulos del Servidor HTTP Apache co= nectarse a servidores de bases de datos.
  4. Este cambio no es persistente entre reinicios. Para hacer los cambios= persistentes, corra el comando setsebool -P boolean-name on como usuario r= oot de Linux:
    # /usr/sbin/setsebool -P httpd_can_network=
    _connect_db on
    
  5. Para revertir temporalmente el comportamiento por defecto, como usuar= io root de Linux, corra el comando setsebool httpd_= can_network_connect_db off. Para que los cambios sean persistentes e= ntre reiniciadas, ejecute el comando setsebool -P h= ttpd_can_network_connect_db off.

5.6.3. Booleanos para NFS y = CIFS

Por defecto, los montajes NFS en el lado del cliente se etiquetan con e= l contexto predeterminado definido por la pol=C3=ADtica para sistemas de ar= chivos NFS. En pol=C3=ADticas com=C3=BAnes, este contexto predeterminado us= a el tipo nfs_t. Tambi=C3=A9n, por de= fecto, los compartidos de Samba en el lado del cliente se etiquetan con el = contexto predeterminado definido por la pol=C3=ADtica. En pol=C3=ADticas co= m=C3=BAnes, este contexto predeterminado usa el tipo cifs_t.
Dependiendo en la configuraci=C3=B3n de la pol=C3=ADtica, los servicios= pueden tener bloqueado la lectura a archivos con la etiqueta de los tipos = nfs_t o cifs_t. Esto puede prevenir que los sistemas de archivo etiquetado= s con estas etiquetas se monten y sean le=C3=ADdos o exportados por otros s= ervicios. Hay Booleanos que se pueden poner en 1 o 0 para controlar qu=C3= =A9 servicios pueden acceder los tipos nfs_t= y cifs_t.
Los comandos setsebool y semanage se deben ejecutar como usuario root de Linux. El c= omando setsebool -P hace persistentes a los = cambios. No use la opci=C3=B3n -P si no quier= e que los cambios persistan entre reiniciadas:
Servidor = HTTP Apache
Para permitir el acceso a sistemas de archivo NFS (archivos etiquetado= s con el tipo nfs_t):
/usr/sbin/setsebool -P httpd_use_nfs on
Para permitir el acceso a sistemas de archivos SAMBA (archivos etiqueta= dos con el tipo cifs_t):
/usr/sbin/setsebool -P httpd_use_cifs on
Samba
Para exportar sistemas de archivo NFS:
/usr/sbin/setsebool -P samba_share_nfs on
FTP (vsftpd)
Para permitir el acceso a sistemas de archivo NFS:
/usr/sbin/setsebool -P allow_ftpd_use_nfs on
Para permitir el acceso a sistemas de archivo Samba:
/usr/sbin/setsebool -P allow_ftpd_use_cifs on
Otros Servici= os
Para una lista de los Booleanos relacionados con NFS para otros servic= ios:
/usr/sbin/semanage boolean -l | grep nfs
Para una lista de los Booleanos relacionados con SAMBA para otros servi= cios:
/usr/sbin/semanage boolean -l | grep cifs

Nota

Estos Booleanos existen en la pol=C3=ADtica de SELinux tal cual fueron= puestos en Fedora 11. No pu eden existir en la pol=C3=ADtica puesta en otr= as versiones de Fedora o de otros sistemas operativos.

5.7. Contextos = de SELinux - Etiquetado de Archivos

En sistemas que corren SELinux, todos los procesos y archivos son etique= tados con una etiqueta que contiene informaci=C3=B3n de seguridad relevante= . Esta informaci=C3=B3n se llama contexto de SELinux. Para archivos, esto s= e ve usando el comando ls -Z:
$ ls -Z archivo1
-rw-rw-r--  usuario1 grupo1 unconfined_u:object_r:user_home_t:s0 archivo1
En este ejemplo, SELinux provee un usuario (unconfined_u), un rol (object_r), un tipo (user_home_t) y un niv= el (s0). Esta informaci=C3=B3n se usa= para tomar decisiones sobre el control de acceso. En sistemas DAC, el cont= rol de acceso se basa en los IDs de usuario y grupo de Linux. Las reglas de= la pol=C3=ADtica de SELinux se chequean despu=C3=A9s de las reglas DAC. La= s reglas de la pol=C3=ADtica de SELinux no se usan si las reglas DAC niegan= el acceso antes.
Hay muchos comandos para la administraci=C3=B3n del contexto de archivos= de SELinux, como por ejemplo chcon, semanage fcontext, y restor= econ.

5.7.1. Cambios Temporales: chcon=

El comando chcon cambia el contexto SELi= nux de los archivos. Estos cambios no sobreviven un reetiquetado del sistem= a de archivo, o el comando /sbin/restorecon.= La pol=C3=ADtica de SELinux controla si los usuarios pueden modificar el c= ontexto SELinux de alg=C3=BAn archivo. Cuando se usa chcon, los usuarios proveen toda o parte del contexto SELinux a ca= mbiar. Un tipo de archivo incorrecto es una causa com=C3=BAn de negaci=C3= =B3n de acceso de SELinux.
Referencia R= =C3=A1pida
  • Ejecute el comando chcon -t tipo nombre-de= -archivo para cambiar el tipo de archivo, donde tipo es el tipo, por ejemplo httpd_sys_content_t, y nombre-de-archivo es un nombre de archivo o de director= io.
  • Ejecute el comando chcon -R -t tipo nombre= -de-directorio para cambiar el tipo de un directorio y s= u contenido, donde tipo es el t= ipo, por ejemplo httpd_sys_content_t,= y nombre-de-directorio es un n= ombre de directorio.
Cambiando el Tipo de un Archivo o de un Directorio
El siguiente ejemplo muestra el cambio de tipo solamente en el context= o de SELinux:
  1. Ejecute el comando cd sin argumentos p= ara cambiar a su directorio de inicio.
  2. Ejecute el comando touch archivo1 para= crear un archivo nuevo. Use el comando ls -Z archi= vo1 para ver el contexto de SELinux del arc= hivo1:
    $ ls -Z archivo1
    -rw-rw-r--  usuario1 grupo1 unconfined_u:object_r:user_home_t:s0 archivo1
    
    En este ejemplo, el contexto SELinux del arc= hivo1 incluye el usuario unconfined_u= , el rol object_r, el tipo user_home_t, y el nivel s0. Para una descripci=C3=B3n de cada parte del conte= xto SELinux, vaya a Cap=C3= =ADtulo=C2=A03, Contextos de SELinux.
  3. EJecute el comando chcon -t samba_share_t arc= hivo1 para cambiar el tipo a samba_sh= are_t. La opci=C3=B3n -t s=C3=B3lo cam= bia el tipo. Vea el cambio con ls -Z archivo1:
    $ ls -Z archivo1 =
    
    -rw-rw-r--  usuario1 grupo1 unconfined_u:object_r:samba_share_t:s0 archivo1
    
  4. Use el comando /sbin/restorecon -v archivo1 para restaurar el contexto de SELinux del ar= chivo1. Use la opci=C3=B3n -v para ver= qu=C3=A9 cambia:
    $ /sbin/restorecon -v archivo1
    restorecon reset archivo1 context unconfined_u:object_r:samba_share_t:s0-&g=
    t;system_u:object_r:user_home_t:s0
    
    En este ejemplo, el tipo previo samba_= share_t, se restaura al tipo correcto user_home_t. Cuando se usa la pol=C3=ADtica destinada (la pol=C3=AD= tica SELinux predeterminada en Fedora 11), el comando /sbin/restorecon lee los archivos en el directorio /etc/selinux/targeted/contexts/files/ para ver qu=C3=A9 c= ontexto de SELinux deben tener los archivos.
El ejemplo en esta secci=C3=B3n funciona igual para directorios, por ej= emplo, si archivo1 fuera un directorio.
Cambio de un Directorio y sus Tipos de Contenidos
El siguiente ejemplo muestra la creaci=C3=B3n de un directorio nuevo y= el cambio del tipo de archivo del mismo (junto con su contenido) a un tipo= usado por el Servidor HTTP Apache. La configuraci=C3=B3n en este ejemplo s= e usa si quiere que el Servidor HTTP Apache use una ra=C3=ADz de documento = distinta (en vez de /var/www/html/):
  1. Como usuario root de Linux, ejecute el comando mkdir /web para crear un directorio nuevo, y luego el comando touch /web/archivo{1,2,3} para crear 3 archivos = vac=C3=ADos (archivo1, archivo2 y archivo3). El direct= orio /web/ y los archivos en =C3=A9l son et= iquetados con el tipo default_t:
    # ls -dZ /web
    drwxr-xr-x  root root unconfined_u:object_r:default_t:s0 /web
    # ls -lZ /web
    -rw-r--r--  root root unconfined_u:object_r:default_t:s0 archivo1
    -rw-r--r--  root root unconfined_u:object_r:default_t:s0 archivo2
    -rw-r--r--  root root unconfined_u:object_r:default_t:s0 archivo3
    
  2. Como usuario root de Linux, corra el comando = chcon -R -t httpd_sys_content_t /web/ para cambiar el tipo del direc= torio /web/ (y su contenido) a httpd_sys_content_t:
    # chcon -R -t httpd_sys_content_t /web/
    # ls -dZ /web/
    drwxr-xr-x  root root unconfined_u:object_r:httpd_sys_content_t:s0 /web/
    # ls -lZ /web/
    -rw-r--r--  root root unconfined_u:object_r:httpd_sys_content_t:s0 archivo1
    -rw-r--r--  root root unconfined_u:object_r:httpd_sys_content_t:s0 archivo2
    -rw-r--r--  root root unconfined_u:object_r:httpd_sys_content_t:s0 archivo3
    
  3. Como usuario root de Linux, corra el comando = /sbin/restorecon -R -v /web/ para restaurar los contextos de SELinux= predeterminados:
    # /sbin/restorecon -R -v /web/
    restorecon reset /web context unconfined_u:object_r:httpd_sys_content_t:s0-=
    >system_u:object_r:default_t:s0
    restorecon reset /web/archivo2 context unconfined_u:object_r:httpd_sys_cont=
    ent_t:s0->system_u:object_r:default_t:s0
    restorecon reset /web/archivo3 context unconfined_u:object_r:httpd_sys_cont=
    ent_t:s0->system_u:object_r:default_t:s0
    restorecon reset /web/archivo1 context unconfined_u:object_r:httpd_sys_cont=
    ent_t:s0->system_u:object_r:default_t:s0
    
Vaya a la p=C3=A1gina del manual de chcon(1) para m=C3=A1s informaci=C3= =B3n sobre chcon.

Nota

La Obligaci=C3=B3n de Tipo es el control de permisos principal usado e= n la pol=C3=ADtica destinada de SELinux. Para la mayor parte, los usuarios = y roles de SELinux se pueden ignorar.

5.7.2= . Cambios Persistentes: semanage fcontext

El comando /usr/sbin/semanage fcontext c= ambia el contexto SELinux de los archivos. Cuando se usa la pol=C3=ADtica d= estinada, los cambios hechos con este comando se agregan al archivo /etc/selinux/targeted/contexts/files/file_contexts= si los cambios so para archivos que est=C3=A1n en file_contexts, se agregan a file_contexts.= local para archivos nuevos y directorios, como ser=C3=ADa al crear u= n directorio /web/ nuevo. setfiles, que se usa cuando el sistema de archivo es reetique= tado, y /sbin/restorecon, que restaura los c= ontextos de SELinux predeterminados, leen estos archivos, Lo que significa = que los cambios hechos por /usr/sbin/semanage fcont= ext son persistentes, a=C3=BAn si el sistema de archivo es reetiquet= ado. La pol=C3=ADtica de SELinux controla si los us uarios pueden modificar el contexto de SELinux para cualquier archivo dado.
R= eferencia R=C3=A1pida
Para hacer que los cambios de contexto de SELinux sobrevivan un reetiq= uetado del sistema de archivo:
  1. Ejecute el comando /usr/sbin/semanage fcontex= t -a opciones nombre-de-archivo|nombre-de-directorio, recuerde usar la direcci=C3=B3n = completa del archivo o del directorio.
  2. Ejecute el comando /sbin/restorecon -v nombre-de-archivo|nombre-de-directorio para aplicar los cambi= os de contexto.
Cambiando un Tipo de archivo
El siguiente ejemplo muestra el cambio de tipo de un archivo, sin toca= r otros atributos del contexto de SELinux:
  1. Como usuario root de Linux, ejecute el comando touch /etc/archivo1 para crear un archivo nuevo. Por defecto, los = archivos reci=C3=A9n creados en el directorio /etc= / se etiquetan con el tipo etc_t:
    # ls -Z /etc/archivo1
    -rw-r--r--  root root unconfined_u:object_r:etc_t:s0       /etc/archivo1
    
  2. Como usuario root de Linux, ejecute el comando /usr/sbin/semanage fcontext -a -t samba_share_t /etc/archivo1 para= cambiar el tipo del archivo1 a samba_share_t. La opci=C3=B3n -a agrega un registro nuevo, y la opci=C3=B3n -t define un tipo (samba_share_= t). Nota: al ejecutar este comando no se cambia directamente el tipo= - el archivo1 todav=C3=ADa es del tipo etc_t:
    # /usr/sbin/semanage fcontext -a -t samba_=
    share_t /etc/archivo1
    # ls -Z /etc/archivo1
    -rw-r--r--  root root unconfined_u:object_r:etc_t:s0       /etc/archivo1
    
    El comando /usr/sbin/semanage fcontext -a -t = samba_share_t /etc/archivo1 agrega la siguiente entrada a /etc/selinux/targeted/contexts/files/file_contexts.local:
    /etc/archivo1    unconfined_u:object_r:sam=
    ba_share_t:s0
    
  3. Como usuario root de Linux, ejecute el comando /sbin/restorecon -v /etc/archivo1 para cambiar el tipo. Dado que e= l comando semanage agreg=C3=B3 una entrada a= file.contexts.local para /etc/archivo1, el comando /sbin/rest= orecon cambia el tipo a samba_share_t= :
    # /sbin/restorecon -v /etc/archivo1
    restorecon reset /etc/archivo1 context unconfined_u:object_r:etc_t:s0->s=
    ystem_u:object_r:samba_share_t:s0
    
  4. Como usuario root de Linux, ejecute el comando rm -i /etc/archivo1 para borrar el archiv= o1.
  5. Como usuario root de Linux, ejecute el comando /usr/sbin/semanage fcontext -d /etc/archivo1 para eliminar el cont= exto agregado para /etc/archivo1. Cuando el= contexto se elimina, ejecutando restorecon = cambia el tipo a etc_t, en vez de samba_share_t.
Cambiando un Tipo de Directorio
El siguiente ejemplo muestra la creaci=C3=B3n de un directorio nuevo y= el cambio del tipo de archivo del directorio a un tipo usado por el Servid= or HTTP Apache:
  1. Como usuario root de LInux, ejecute el comando mkdir /web para crear un directorio nuevo. Este directorio se etiq= ueta con el tipo default_t:
    # ls -dZ /web
    drwxr-xr-x  root root unconfined_u:object_r:default_t:s0 /web
    
    La opci=C3=B3n -d de ls hace que ls liste la informa= ci=C3=B3n de un directorio, en vez de su contenido, y la opci=C3=B3n -Z hace que ls muest= re el contexto de SELinux (en este ejemplo, = unconfined_u:object_r:default_t:s0).
  2. Como usuario root de Linux, ejecute el comando /usr/sbin/semanage fcontext -a -t httpd_sys_content_t /web para ca= mbiar el tipo de /web/ a httpd_sys_content_t. La opci=C3=B3n -a agrega un nuevo registro, y la opci=C3=B3n -t define un tipo (httpd_sys_con= tent_t). Nota: la ejecuci=C3=B3n de este comando no cambia el tipo d= irectamente - /web/ todav=C3=ADa tiene la e= tiqueta de tipo default_t:
    # /usr/sbin/semanage fcontext -a -t httpd_=
    sys_content_t /web
    # ls -dZ /web
    drwxr-xr-x  root root unconfined_u:object_r:default_t:s0   /web
    
    El comando /usr/sbin/semanage fcontext -a -t = httpd_sys_content_t /web agrega la siguiente entrada a /etc/selinux/targeted/contexts/files/file_contexts.local:
    /web    unconfined_u:object_r:httpd_sys_co=
    ntent_t:s0
    
  3. Como usuario root de Linux, ejecute el comando /sbin/restorecon -v /web para cambiar el tipo. Como el comando semanage agreg=C3=B3 una entrada a file.contexts.local para /web= , el comando /sbin/restorecon cambia = el tipo a httpd_sys_content_t:
    # /sbin/restorecon -v /web
    restorecon reset /web context unconfined_u:object_r:default_t:s0->system=
    _u:object_r:httpd_sys_content_t:s0
    
    Por defecto, los archivos y directorios reci=C3=A9n creados heredan e= l tipo SELinux de sus carpetas padres. Cuando se us=C3=B3 este ejemplo, y a= ntes de eliminar el contexto SELinux agregado para /web/, los archivos y directorios creados en el directorio /web/ fueron etiquetados con el tipo httpd_sys_content_t.
  4. Como usuario root de Linux, ejecute el comando /usr/sbin/semanage fcontext -d /web para borrar el contexto agrega= do para /web/.
  5. Como usuario root de Linux, ejecute el comando /sbin/restorecon -v /web para restaurar el contexto predeterminado= de SELinux.
Cambio de un Directorio y sus = Tipos de Contenidos
El siguiente ejemplo muestra la creaci=C3=B3n de un directorio nuevo y= el cambio del tipo de archivo del mismo (junto con su contenido) a un tipo= usado por el Servidor HTTP Apache. La configuraci=C3=B3n en este ejemplo s= e usa si quiere que el Servidor HTTP Apache use una ra=C3=ADz de documento = distinta (en vez de /var/www/html/):
  1. Como usuario root de Linux, ejecute el comando mkdir /web para crear un directorio nuevo, y luego el comando touch /web/archivo{1,2,3} para crear 3 archivos = vac=C3=ADos (archivo1, archivo2 y archivo3). El direct= orio /web/ y los archivos en =C3=A9l son et= iquetados con el tipo default_t:
    # ls -dZ /web
    drwxr-xr-x  root root unconfined_u:object_r:default_t:s0 /web
    # ls -lZ /web
    -rw-r--r--  root root unconfined_u:object_r:default_t:s0 archivo1
    -rw-r--r--  root root unconfined_u:object_r:default_t:s0 archivo2
    -rw-r--r--  root root unconfined_u:object_r:default_t:s0 archivo3
    
  2. Como usuario root de Linux, ejecute el comando /usr/sbin/semanage fcontext -a -t httpd_sys_content_t "/web(/.*)?"= para cambiar el tipo del directorio /web/ = junto con los archivos dentro de =C3=A9l, a = httpd_sys_content_t. La opci=C3=B3n -a= agrega un registro nuevo, y la opci=C3=B3n -t define un tipo(httpd_sys_content_t). La expresi=C3=B3n regular "/web(/.*)?" hace que el comando semanage aplique los cambios al directorio /web/, as=C3=AD como a los archivos dentro de =C3=A9l. Not= a: la ejecuci=C3=B3n de este comando no cambia el tipo directamente - /web/ y los archivos dentro de =C3=A9l todav=C3= =ADa tienen la etiqueta del tipo default_t:
    # ls -dZ /web
    drwxr-xr-x  root root unconfined_u:object_r:default_t:s0 /web
    # ls -lZ /web
    -rw-r--r--  root root unconfined_u:object_r:default_t:s0 archivo1
    -rw-r--r--  root root unconfined_u:object_r:default_t:s0 archivo2
    -rw-r--r--  root root unconfined_u:object_r:default_t:s0 archivo3
    
    El comando /usr/sbin/semanage fcontext -a -t = httpd_sys_content_t "/web(/.*)?" agrega una entrada a /etc/selinux/targeted/contexts/files/file_contexts.local:
    /web(/.*)?    system_u:object_r:httpd_sys_=
    content_t:s0
    
  3. Como usuario root de LInux, ejecute el comando /sbin/restorecon -R -v /web para cambiar elt ipo del directorio /web/, junto con los archivos dentro de =C3= =A9l. La opci=C3=B3n -R significa recursivo, = es decir, todos los archivos y directorios dentro del directorio /web/ se etiquetar=C3=A1n con el tipo httpd_sys_content_t. Dado que el comando semanage agreg=C3=B3 una entrada en file.contexts.local para /web(/= .*)?, el comando /sbin/restorecon los= tipos a httpd_sys_content_t:
    # /sbin/restorecon -R -v /web
    restorecon reset /web context unconfined_u:object_r:default_t:s0->system=
    _u:object_r:httpd_sys_content_t:s0
    restorecon reset /web/archivo2 context unconfined_u:object_r:default_t:s0-&=
    gt;system_u:object_r:httpd_sys_content_t:s0
    restorecon reset /web/archivo3 context unconfined_u:object_r:default_t:s0-&=
    gt;system_u:object_r:httpd_sys_content_t:s0
    restorecon reset /web/archivo1 context unconfined_u:object_r:default_t:s0-&=
    gt;system_u:object_r:httpd_sys_content_t:s0
    
    Por defecto, los archivos y directorios reci=C3=A9n creados heredan e= l tipo SELinux de sus padres. En este ejemplo, los archivos y directorios c= reado en el directorio /web/ se etiquetar= =C3=A1n con el tipo httpd_sys_content_t.
  4. Como usuario root de Linux, ejecute el comando /usr/sbin/semanage fcontext -d "/web(/.*)?" para eliminar el conte= xto agregado para "/web(/.*)?".
  5. Como usuario root de Linux, ejecute el comando /sbin/restorecon -R -v /web para restaurar el contexto predetermin= ado de SELinux.
Borrado de un Contexto agregado
El siguiente ejemplo muestra el agregado y su eliminaci=C3=B3n del con= texto de SELinux:
  1. Como usuario root de Linux, ejecute el comando /usr/sbin/semanage fcontext -a -t httpd_sys_content_t /prueba. El = directorio /prueba/ no tiene que existir. E= ste comando agrega el siguiente contexto a /etc/se= linux/targeted/contexts/files/file_contexts.local:
    /prueba    system_u:object_r:httpd_sys_con=
    tent_t:s0
    
  2. Para eliminar el contexto, como usuario root de Linux, ejecute el com= ando /usr/sbin/semanage fcontext -d nombre-de-archivo|nombre-de-directorio, donde nombre-de-archivo|nombr= e-de-directorio es la primera parte en file_contexts.local. El siguiente es un ejemplo de un contexto en <= code class=3D"filename">file_contexts.local:
    /prueba    system_u:object_r:httpd_sys_con=
    tent_t:s0
    
    Siendo la primera parte /prueba= . Para evitar que el directorio /prueba/ se= etiquete con httpd_sys_content_t des= pu=C3=A9s de ejecutar /sbin/restorecon, o de= spu=C3=A9s de un reetiquetado del sistema, ejecute el siguiente comando com= o usuario root de Linux para eliminar el contexto de file_contexts.local:
    /usr/sbin/semanage fcontext -d /prueba
Si el contexto es parte de una expresi=C3=B3n regular, por ejemplo /web(/.*)?, use las comillas para encerra= r la expresi=C3=B3n regular:
/usr/sbin/semanage fcontext -d "/web(/.*)?"
Vaya a la p=C3=A1gina de manual de semanage(8) para informaci=C3=B3n adic= ional sobre /usr/sbin/semanage.

Importante

Cuando se cambia el contexto de SELinux con /u= sr/sbin/semanage fcontext -a, use la direcci=C3=B3n completa del arc= hivo o directorio para evitar etiquetar mal los archivos despu=C3=A9s de un= reetiquetado del sistema de archivo, o despu=C3=A9s ejecutar el comando /sbin/restorecon.

5.8. Los tipos f= ile_t y default_t

En sistemas de archivo que soportan atributos extendidos, cuando se acce= de a un archivo en disco al que le falta el contexto de SELinux, se trata c= omo si tuviera un contexto predeterminado tal como fue definido en la pol= =C3=ADtica de SELinux. En pol=C3=ADticas comunes, este conexto por defecto = usa el tipo file_t. Este deber=C3=ADa= ser el =C3=BAnico uso de este tipo, por lo que los archivos sin un context= o en el disco se podr=C3=ADan distinguir en la pol=C3=ADtica, y generalment= e mantenerse inaccesibles a dominios confinados. El tipo file_t no deber=C3=ADa existir en sistemas de archivo c= orrectamente etiquetados, porque todos los archivos dado que todos los arch= ivos en un sistema corriendo SELinux deber=C3=ADan tener un contexto de SEL= inux, y el tipo file_t no seber=C3=AD= a usarse en la configuraci=C3=B3n de contexto de archivos [11].
El tipo default_t se usa en archiv= os que no coinciden con ning=C3=BAn otro patr=C3=B3n en la configuraci=C3= =B3n de contexto de archivo, por lo que tales archivos se pueden distinguir= de aquellos que no tienen un contexto en el disco, y generalmente mantener= se inaccesibles a los dominios confinados. Si crea un directorio de alto ni= vel, tal como /midir/, este directorio pued= e ser etiquetado con el tipo default_t. Si los servicios necesitan acceder a tal directorio, actualice la config= uraci=C3=B3n de contextos de archivo para esta ubicaci=C3=B3n. Vaya a Secci=C3=B3n=C2=A05.7.2, =E2=80=9CCambios Persi= stentes: semanage fcontext=E2=80=9D para m=C3=A1s detalles sobre agraga= do de un contexto para la configuraci=C3=B3n de contexto de archivos.

5.9. Montaje de Sistemas de Archivos

Por defecto, cuando un sistema de archivo que soporta atributos extendid= os se monta, el contexto de seguridad para cada archivo se obtiene de atrib= uto extendido security.selinux del= archivo. A los archivos en sistemas de archivo que no dan soporte a atribu= tos extendidos se les asigna un =C3=BAnico contexto de seguridad predetermi= nado desde la configuraci=C3=B3n de la pol=C3=ADtica, basada en el tipo de = sistema de archivo.
Use el comando mount -o context para supe= rponer los atributos extendidos actuales, o para especificar uno distinto y= por defecto para sistemas de archivo que no dan soporte a atributos extend= idos. Esto es =C3=BAtil si no conf=C3=ADa en que un sistema de archivo prov= ea los atributos correctos, por ejemplo, medios removibles en sistemas m=C3= =BAltiples. El comando mount -o context tamb= i=C3=A9n se puede ussar para dar soporte al etiquetado de sistemas de archi= vos que no soportan atributos extendidos, tales como la Tabla de Ubicaci=C3= =B3n de Archivos (FAT) o los sistemas de archivo NFS. El contexto especific= ado con la opci=C3=B3n context no se escribe = al disco: los contextos originales son preservados, y se ven cuando se lo m= onta sin la opci=C3=B3n context (si el sistem= a de archivo ya ten=C3=ADa sopoorte para atributos extendidos).
Para m=C3=A1s informaci=C3=B3n sobre el etiquetado de sistemas de archiv= o, vaya al art=C3=ADculo de James Morris "Etiquetado del Sistema de Archivo= en SELinux": http://w= ww.linuxjournal.com/article/7426.

5.9.1. Montajes de Contexto

<= div class=3D"para"> Para montar un sistema de archivo con el contexto especificado, superpo= niendo los contextos existentes si existieran, o para especificar uno prede= terminado distinto para un sistema de archivo que no da soporte para atribu= tos extendidos, como usuario root de Linux, use el comando mount -o context=3DSELinux_user:rol= e:type:level cuando monte el sistema de archivo deseado.= Los cambios de contexto no se graban en el disco. Por defecto, los montaje= s NFS en el lado del cliente se etiquetan con un contexto distinto definido= por una pol=C3=ADtica para sistemas de archivo NFS. En pol=C3=ADticas comu= nes, este contexto predeterminado usa el tipo nfs_t. Sin las opciones de montaje adicionales, esto podr=C3=ADa e= vitar el que sistemas de archivo NFS sean compartidos v=C3=ADa otros servic= ios, como el Servidor HTTP Apache. El siguiente ejemplo monta un sistema de= archivo NFS para que se pueda acceder = a trav=C3=A9s del Servidor HTTP Apache:
=
# mount servidor:/export /local/mount/point -o\
context=3D"system_u:object_r:httpd_sys_content_t:s0"
Los archivos y directorios reci=C3=A9n creados en este sistema de archi= vo parecen tener un contexto SELinux especificado con -o contexto; sin embargo, dado que los cambios del contexto no se = escriben en el disco en estas situaciones, el contexto especificado por la = opci=C3=B3n -o contexto s=C3=B3lo se mantiene= si se usa la misma opci=C3=B3n en la siguiente montada, y si adem=C3=A1s s= e especifica el mismo contexto.
La Obligaci=C3=B3n de Tipo es el control de permiso principal en la pol= =C3=ADtica destinada de SELinux. Para la mayor parte, los usuarios y roles = de SELinux se pueden ignorar, por lo que, cuando se superponga el contexto = de SELinux con -o context, use el usuario SEL= inux system_u y el rol object_r, y conc=C3=A9ntrese en el tipo. Si no est= =C3=A1 usando la pol=C3=ADtica MLS o seguridad multi-categor=C3=ADa, use el= nivel s0.

Nota

Cuando se monta un sistema de archivo con la opci=C3=B3n context, los cambios de contexto (por usuarios y proceso= s) son prohibidos. Por ejemplo, ejecutando chcon en un sistema de archivo montado con la opci=C3=B3n context resulta en un error de O= peraci=C3=B3n no soportada.

5.9.2. Cambio del Conte= xto Predeterminado

Como se mencion=C3=B3 en Secci=C3=B3n=C2=A05.8, =E2=80=9CLos tipos f= ile_t y default_t=E2=80=9D, en sistemas de archivo que soportan atribut= os extendidos, cuando se accede a un archivo en disco que le falta el conte= xto SELinux, se trata como si hubiera tenido el contexto predeterminado tal= como se define en la pol=C3=ADtica SELinux. En pol=C3=ADticas com=C3=BAnes= , este contexto predeterminados usa el tipo = file_t. Si se desea usar un contexto predeterminado diferente, monte= el sistema de archivo con la opci=C3=B3ndefcontext<= /code>.
El siguiente ejemplo monta un sistema de archivo reci=C3=A9n creado (en= /dev/sda2) en el directorio reci=C3=A9n cr= eado /prueba/. Asume que no hay reglas en <= code class=3D"filename">/etc/selinux/targeted/contexts/files/ que de= finan el contexto del directorio /prueba/:
# mount /dev/sda2 /prueba/ -o defcontext=3D"=
system_u:object_r:samba_share_t:s0"
En este ejemplo:
  • la opci=C3=B3n defcontext define que system_u:object_r:samba_share_t:s0 es "= el contexto de seguridad predeterminado para archivos no etiquetados"[= 12].
  • cuando sea montado, el directorio ra=C3=ADz (/prueba/) del sistema de archivo se trata como si estuviera etiquet= ado con el contexto especificado por defcontext (esta etiqueta no se guarda en el disco). Esto afecta el etiquetado de a= rchvios creados en /prueba/: los archivos n= uevos heredan el tipo samba_share_t, = y estas etiquetas se guardan en el disco.
  • los archivos creados bajo /prueba/ mi= entras el sistema de archivo estaba montado con la opci=C3=B3n defcontext retendr=C3=A1n sus etiquetas.

5.9.3. Montan= do un Sistema de Archivos NFS

Por defecto, los montajes NFS en el lado del cliente son etiquetados co= n un contexto predeterminado por la pol=C3=ADtica para los sistemas de arch= ivo NFS. En pol=C3=ADticas comunes, este contexto predeterminado usa el tip= o nfs_t. Dependiendo de la configurac= i=C3=B3n de la pol=C3=ADtica, los servicios, como el Servidor HTTP Apache y= MySQL, pueden no poder leer archivos etiquetados con el tipo nfs_t. Esto puede prevenir que los sistemas de a= rchivos etiquetados con este tipo se monten y sean le=C3=ADdos o exportados= por otros servicios.
Si desea montar un sistema de archivo NFS y leer o exportar ese sistema= de archivo con otro servicio, use la opci=C3=B3n co= ntexto cuando monte para anular el tipo nfs_t. Use la siguiente opci=C3=B3n de contexto para montar siste= mas de archivo NFS para que puedan compartirse v=C3=ADa el Servidor HTTP Ap= ache:
mount servidor:/export /local/punto/de/monta=
je -o\
context=3D"system_u:object_r:httpd_sys_content_t:s0"
Dado que los cambios de contexto no se escriben al disco para estas sit= uaciones, el contexto especificado con la opci=C3=B3n context s=C3=B3lo se retiene si la opci=C3=B3n context se usa en el siguiente montaje, y si el mismo contexto s= e especifica.
Como una alternativa a montar sistemas de archivo con la opci=C3=B3n contexto, los Booleanos se pueden activar para = permitir a los servicios acceder sistemas de archivos etiquetados con el ti= po nfs_t. Vaya a Secci=C3=B3n=C2=A05.6.3, =E2=80=9CB= ooleanos para NFS y CIFS=E2=80=9D para instrucciones sobre configuraci= =C3=B3n de Booleanos para permitir a servicios acceder al tipo nfs_t.

5.9.4. Montajes NFS M=C3=BAltiples

=
Cuando se monten m=C3=BAltiples montajes desde el mismo NFS exportado, = el intento de sobreescribir el contexto de SELinux e cada montaje con un co= ntexto diferente, resulta en fallos de los comandos de montaje subsecuentes= . En el siguiente ejemplo, el servidor NFS tiene un exportado =C3=BAnico, <= code class=3D"filename">/export, que tiene dos subdirectorios, web/ and database/. El siguiente comando intenta dos montajes desde un =C3=BAnico export NF= S e intenta sobreescribir el contexto para cada uno:
# mount servidor:/export/web /local/web -o\
context=3D"system_u:object_r:httpd_sys_content_t:s0"

# mount servidor:/export/database /local/database -o\
context=3D"system_u:object_r:mysqld_db_t:s0"
El segundo comando mount falla, y se graba lo siguiente en /var/log/messages:
kernel: SELinux: montaje inv=C3=A1lido.  Sim=
ilar superblock, configuraci=C3=B3n de seguridad diferente para (dev 0:15, =
tipo nfs)
Para montar montajes m=C3=BAltiples de un exportado NFS =C3=BAnico, con= cada montaje teniendo un contexto diferente, use las opciones -o nosharecache,context. El siguiente ejemplo monta mont= ajes m=C3=BAltiples de un =C3=BAnico export de NSF, con un contexto diferen= te para cada montaje (permitiendo un =C3=BAnico acceso de servicio a cada u= no):
# mount servidor:/export/web /local/web -o\
nosharecache,context=3D"system_u:object_r:httpd_sys_content_t:s0"

# mount servidor:/export/database /local/database -o\
nosharecache,context=3D"system_u:object_r:mysqld_db_t:s0"
En este ejemplo, server:/export/web se monta localmente en /local/web/, con = todos los archivos etiquetados con el tipo h= ttpd_sys_content_t, lo que permite el acceso al Servidor HTTP Apache= . server:/export/database est=C3=A1 m= ontado localmente en /local/database, con l= os archivos etiquetados con el tipo mysqld_d= b_t, lo que permite a MySQL el acceso. Estos cambios de tipo no se e= scriben en el disco.

Importante

Las opciones nosharecache le permiten mo= ntar el mismo subdirectorio de un exportado varias veces con distintos cont= extos (por ejemplo, montar /export/web vari= as veces). No monte el mismo directorio de un exportado varias veces con di= stintos contextos, dado que esto crea un montado solapado, donde los archiv= os se pueden acceder con dos contextos diferentes.

5.9.5. Haciendo Per= sistente los Contextos de Montajes

Para hacer que los contextos de montajes persistentes entre remontadas = y reiniciadas, agregue las entradas de los sistemas de archivos en /etc/fstab o un mapa de automontador, y use el cont= exto deseado como una opci=C3=B3n de montaje. El siguiente ejemplo agrega u= na entrada en /etc/fstab para un montaje de= contexto NFS:
servidor:/export /local/montaje/ nfs context=
=3D"system_u:object_r:httpd_sys_content_t:s0" 0 0
Vaya a la Gu=C3=ADa de D= espliegue del Linux para Empresas de Red Hat 5, Secci=C3=B3n 19.2. "Configu= raci=C3=B3n de Cliente NFS" para informaci=C3=B3n adicional sobre monta= je de sistemas de archivo NFS.

5.10. Mantenci=C3=B3n de l= as Etiquetas de SELinux

Estas secciones describen qu=C3=A9 les pasa a los contextos SELinux cuan= do se copia, mueve y compacta archivos y directorios. Tambi=C3=A9n explica = c=C3=B3mo preservar los contextos cuando se copia o se compacta.

5.10.1. Copia de Directorios y= Archivos

Cuando se copia un archivo o directorio, se crea uno si no exist=C3=ADa= . El contexto de ese archivo o directorio nuevo est=C3=A1 basado en las reg= las de etiquetados predeterminada, y no el contexto original del archivo o = directorio (a menos que se usen opciones para preservar el contexto origina= l). Por ejemplo, los archivos creados en los directorios home de los usuari= os se etiquetan con el tipo user_home_t:
$ touch archivo1
$ ls -Z archivo1 =

-rw-rw-r--  usuario1 grupo1 unconfined_u:object_r:user_home_t:s0 archivo1
Si un archivo se copia a otro directorio, tal como /etc/, el archivo nuevo se crea de acuerdo a las reglas de etiq= uetado predeterminado del directorio /etc/.= El copiado de un archivo (sin opciones adicionales) puede no preservar el = contexto original:
$ ls -Z archivo1 =

-rw-rw-r--  usuario1 grupo1 unconfined_u:object_r:user_home_t:s0 archivo1
# cp archivo1 /etc/
$ ls -Z /etc/archivo1
-rw-r--r--  root root unconfined_u:object_r:etc_t:s0   /etc/archivo1
Cuando el archivo1 se copia a /etc/, si /etc/archivo1 no existe, /etc/archivo1 se crea como u= n archivo nuevo. Como se muestra en el ejemplo de arriba, /etc/archivo1 se etiqueta con el tipo etc_t, de acuerdo con las reglas de etiquetado predetermina= das.
Cuando un archivo se copia sobre otro existente, el contexto del archiv= o existente se preserva, a menos que el usuario especifique opciones de cp para preservar el contexto del archivo origi= nal, tal como --preserve=3Dcontext. La pol=C3= =ADtica de SELinux puede prevenir que se preserver los contextos al copiar.
Copia sin Preservar los Contextos de SELinux
Cuando se copia un archivo con el comando cp, si no se dan opciones, el tipo se hereda desde el directorio padre d= estino:
$ touch archivo1
$ ls -Z archivo1
-rw-rw-r--  usuario1 grupo1 unconfined_u:object_r:user_home_t:s0 archivo1
$ ls -dZ /var/www/html/
drwxr-xr-x  root root system_u:object_r:httpd_sys_content_t:s0 /var/www/htm=
l/
# cp archivo1 /var/www/html/
$ ls -Z /var/www/html/archivo1
-rw-r--r--  root root unconfined_u:object_r:httpd_sys_content_t:s0 /var/www=
/html/archivo1
En este ejemplo, archivo1 se crea en el= directorio de inicio del usuario, y se etiqueta con el tipo user_home_t. El directorio /var/www/html/ est=C3=A1 etiquetado con el tipo httpd_sys_content_t, como se muestra con el comando ls -dZ /var/www/html/. Cuando el archivo1 se copia a /var/www/html= /, hereda el tipo httpd_sys_content_t= , como se muestra con el comandols -Z /var/w= ww/html/archivo1.
Preservaci=C3=B3n de los Contextos de SELinux cuando se co= pia
Use el comando cp --preserve=3Dcontext = para preservar los contextos cuando se copia:
$ touch archivo1
$ ls -Z archivo1
-rw-rw-r--  usuario1 grupo1 unconfined_u:object_r:user_home_t:s0 archivo1
$ ls -dZ /var/www/html/
drwxr-xr-x  root root system_u:object_r:httpd_sys_content_t:s0 /var/www/htm=
l/
# cp --preserve=3Dcontext archivo1 /var/www/html/
$ ls -Z /var/www/html/archivo1
-rw-r--r--  root root unconfined_u:object_r:user_home_t:s0 /var/www/html/ar=
chivo1
En este ejemplo, el archivo1 se crea en= el directorio de inicio del usuario, y se etiqueta con el tipo user_home_t. El directorio /var/www/html/ est=C3=A1 etiquetado con el tipo httpd_sys_content_t, como se muestra con el comando <= code class=3D"command">ls -dZ /var/www/html/. Usando la opci=C3=B3n = --preserve=3Dcontext se mantienen los context= os de SELinux durante operaciones de copia. Como se muestra con el comando = ls -Z /var/www/html/archivo1, el tipo user_home_t del ar= chivo1 fue preservado cuando el archivo se copi=C3=B3 a /var/www/html/.
Copiado y Cambio del Contexto
Use el comando cp -Z para cambiar el co= ntexto destino de copia. El siguiente ejemplo se realiz=C3=B3 en el directo= rio de inicio del usuario:
$ touch archivo1
$ cp -Z system_u:object_r:samba_share_t:s0 archivo1 archivo2
$ ls -Z archivo1 archivo2
-rw-rw-r--  usuario1 grupo1 unconfined_u:object_r:user_home_t:s0 archivo1
-rw-rw-r--  usuario1 grupo1 system_u:object_r:samba_share_t:s0 archivo2
$ rm archivo1 archivo2
En este ejemplo, el contexto se define en la opci=C3=B3n -Z. Sin la opci=C3=B3n -Z, archivo2 se etiquetar=C3=ADa con el contexto = unconfined_u:object_r:user_home_t.
Copia de un Archivos sobre un otro existente
Cuando un archivo se copia sobre otro existente, el contexto del archi= vo existente se preserva (a menos que se use una opci=C3=B3n para preservar= los contextos). Por ejemplo:
# touch /etc/archivo1
# ls -Z /etc/archivo1
-rw-r--r--  root root unconfined_u:object_r:etc_t:s0   /etc/archivo1
# touch /tmp/archivo2
# ls -Z /tmp/archivo2
-rw-r--r--  root root unconfined_u:object_r:user_tmp_t:s0 /tmp/archivo2
# cp /tmp/archivo2 /etc/archivo1
# ls -Z /etc/archivo1
-rw-r--r--  root root unconfined_u:object_r:etc_t:s0   /etc/archivo1
En este ejemplo, se crean dos archivos: /etc/a= rchivo1, etiquetado con el tipo etc_t= , y /tmp/archivo2, etiquetado con el= tipo user_tmp_t. Ell comando cp /tmp/archivo2 /etc/archivo1 sobreescribe archivo1 con archivo2. Despu=C3=A9s de copiar, el comando ls -Z /etc/= archivo1 muestra a archivo1 etiqueta= do con el tipo etc_t, en vez del user_tmp_t de /t= mp/archivo2 que reemplaz=C3=B3 a /etc/archi= vo1.

Importante

Copie archivos y directorios, en vez de moverlos. Esto ayuda a asegura= r que se etiquetan con los contextos de SELinux correctos. Los contextos SE= Linux incorrectos pueden hacer que los procesos no puedan acceder a esos ar= chivos y directorios.

5.10.2. Movimient= o de Archivos y Directorios

Los archivos y directorios mantienen su contexto SELinux actual cuando = se mueven. En muchos casos, esto es incorrecto para la ubicaci=C3=B3n nueva= a donde se los mueve. El siguiente ejemplo muestra la movida de un archivo= desde el directorio de inicio del usuario a /var/= www/html/, que es usado por el Servidor HTTP Apache. Dado que el arc= hivo es movido, no hereda el contexto SELinux correcto:
  1. Ejecute el comando cd sin ning=C3=BAn = argumento para cambiar a su directorio de inicio. Una vez ah=C3=AD, ejecute= el comando touch archivo1 para crear un arc= hivo. Este archivo se etiqueta con el tipo u= ser_home_t:
    $ ls -Z archivo1
    -rw-rw-r--  usuario1 grupo1 unconfined_u:object_r:user_home_t:s0 archivo1
    
  2. Ejecute el comando ls -dZ /var/www/html/ para ver el contexto de SELinux del directorio = /var/www/html/:
    $ ls -dZ /var/www/html/
    drwxr-xr-x  root root system_u:object_r:httpd_sys_content_t:s0 /var/www/htm=
    l/
    
    Por defecto, el directorio /var/www/html/ se etiqueta con el tipo httpd_sys_conte= nt_t. Los archivos y directorios creados bajo el directorio /var/www/html/ heredan este tipo, y como tal, son e= tiquetados con este tipo.
  3. Como usuario root de Linux, ejecute el comando mv archivo1 /var/www/html/ para mover el = archivo1 al directorio /var/www/html/. Dado que el archivo es movido, mantiene su tipo user_home_t actual:
    # mv archivo1 /var/www/html/
    # ls -Z /var/www/html/archivo1
    -rw-rw-r--  usuario1 grupo1 unconfined_u:object_r:user_home_t:s0 /var/www/h=
    tml/archivo1
    
Por defecto, el Servidor HTTP Apache no puede leer archivos etiquetados= con el tipo user_home_t. Si todos lo= s archivos de una p=C3=A1gina web se etiquetaron con user_home_t, u otro tipo al que el Servidor HTTP Apache no = puede leer, el permiso es negado cuando intente accederlo v=C3=ADa Firefox = o alg=C3=BAn otro navegador web basado en texto.

Importante

Mover archivos y directorios con el comando mv= puede resultar en el contexto SELinux incorrecto, evitando que los = procesos tales como el Servidor HTTP Apache y Samba puedan acceder a tales = archivos y directorios.

5.10.3. C= hequeando el Contexto SELinux Predeterminado

Use el comando /usr/sbin/matchpathcon pa= ra chequear si los archivos y directorios tienen el contexto SELinux correc= to. De la p=C3=A1gina de manual de matchpathcon(8): "= matchpathcon consulta la pol=C3=ADtica del sistema y muestra el cont= exto de seguridad predeterminado asociado con una direcci=C3=B3n de archivo= ."[13]<= /sup>. El siguiente ejemplo muestra el uso del comando /usr/sbin/matchpathcon para verificar que los archivos dentro de= l directorio /var/www/html/ est=C3=A1n etiq= uetados correctamente:
  1. Como usuario root de Linux, ejecute el comando touch /var/www/html/archivo{1,2,3} para crear tres archivos (archivo1, archivo2 y archivo3). Estos heredan el tipo httpd_sys_content_t del directorio /var/www/html/:
    # touch /var/www/html/archivo{1,2,3}
    # ls -Z /var/www/html/
    -rw-r--r--  root root unconfined_u:object_r:httpd_sys_content_t:s0 archivo1
    -rw-r--r--  root root unconfined_u:object_r:httpd_sys_content_t:s0 archivo2
    -rw-r--r--  root root unconfined_u:object_r:httpd_sys_content_t:s0 archivo3
    
  2. Como usuario root de Linux, ejecute el comando chcon -t samba_share_t /var/www/html/archivo1 para cambiar el tipo= del archivo1 a samba_share_t. Nota: El Servidor HTTP Apache no puede leer archi= vos o directorios etiquetados con el tipo sa= mba_share_t.
  3. La opci=C3=B3n /usr/sbin/matchpathcon = -V compara el contexto SELinux actual con el = contexto predeterminado correcto dado por la pol=C3=ADtica de SELinux. Ejec= ute el comando /usr/sbin/matchpathcon -V /var/www/h= tml/* para chequear todos los archivos del directorio /var/www/html/:
    $ /usr/sbin/matchpathcon -V /var/www/html/*
    /var/www/html/archivo1 tiene el contexto unconfined_u:object_r:samba_share_=
    t:s0, deber=C3=ADa ser system_u:object_r:httpd_sys_content_t:s0
    /var/www/html/archivo2 verified.
    /var/www/html/archivo3 verified.
    
La siguiente salida del comando /usr/sbin/match= pathcon explica que el archivo1 est= =C3=A1 etiquetado con el tipo samba_share_t<= /code>, pero deber=C3=ADa estar etiquetado con el tipo httpd_sys_content_t:
/var/www/html/archivo1 tiene el contexto unc=
onfined_u:object_r:samba_share_t:s0, deber=C3=ADa tener system_u:object_r:h=
ttpd_sys_content_t:s0
Para resolver el problema de etiqueta y permitir al Servidor HTTP Apach= e acceder a archivo1, como usuario root de = Linux corra el comando /sbin/restorecon -v /var/www= /html/archivo1:
# /sbin/restorecon -v /var/www/html/archivo1
restorecon reset /var/www/html/archivo1 context unconfined_u:object_r:samba=
_share_t:s0->system_u:object_r:httpd_sys_content_t:s0
=

5.10.4. Archivando archivos con= tar

tar no retiene los atributos extendidos = por defecto. Dado que los contextos SELinux se almacenan en los atributos e= xtendidos, los contextos se pueden perder cuando se compactan archivos. Use= tar --selinux para crear archivos que reten= gan los contextos. Si un archivo Tar contiene archivos sin los atributos ex= tendidos, o si quiere que los atributos extendidos coincidan con los predet= erminados del sistema, ejecute el archivado a trav=C3=A9s de /sbin/restorecon:
$ tar -xvf a=
rchivo.tar | /sbin/restorecon -f -
Nota: dependiendo del directorio, puede necesitar ser el usuario root d= e Linux para ejecutar el comando /sbin/restorecon.
El siguiente ejemplo muestra la creaci=C3=B3n de un archivo Tar que man= tiene sus contextos SELinux:
  1. Como usuario root de Linux, ejecute el comando touch /var/www/html/archivo{1,2,3} para crear tres archivos (archivo1, archivo2 y archivo3). Estos heredan el tipo httpd_sys_content_t del directorio /var/www/html/:
    # touch /var/www/html/archivo{1,2,3}
    # ls -Z /var/www/html/
    -rw-r--r--  root root unconfined_u:object_r:httpd_sys_content_t:s0 archivo1
    -rw-r--r--  root root unconfined_u:object_r:httpd_sys_content_t:s0 archivo2
    -rw-r--r--  root root unconfined_u:object_r:httpd_sys_content_t:s0 archivo3
    
  2. Ejecute el comando cd /var/www/html/ p= ara cambiar al directorio /var/www/html/. U= na vez en este directorio, como usuario root de Linux ejecute el comando tar --selinux -cf prueba.tar archivo{1,2,3} pa= ra crear un archivo Tar con nombre prueba.tar.
  3. Como usuario root de Linux, corra el comando = mkdir /prueba para crear un directorio nuevo, y luego ejecute el com= ando chmod 777 /prueba/ para permitir a los = usuarios acceso total al directorio /prueba/.
  4. Ejecute el comando cp /var/www/html/prueba.ta= r /prueba/ para copiar el archivo prueba.ta= r en el directorio /prueba/.
  5. Ejecute el comando cd /prueba/ para ca= mbiar al directorio /test/. Una vez ah=C3= =AD, ejecute el comando tar -xvf prueba.tar = para extraer el archivo Tar.
  6. Ejecute el comando ls -lZ /prueba/ par= a ver los contextos SELinux. El tipo httpd_s= ys_content_t fue retenido, en vez de haberse cambiado al default_t, lo que hubiera pasado si la opci=C3= =B3n --selinux no se hubiera usado:
    $ ls -lZ /prueba/
    -rw-r--r--  usuario1 grupo1 unconfined_u:object_r:httpd_sys_content_t:s0 ar=
    chivo1
    -rw-r--r--  usuario1 grupo1 unconfined_u:object_r:httpd_sys_content_t:s0 ar=
    chivo2
    -rw-r--r--  usuario1 grupo1 unconfined_u:object_r:httpd_sys_content_t:s0 ar=
    chivo3
    -rw-r--r--  usuario1 grupo1 unconfined_u:object_r:default_t:s0 prueba.tar
    
  7. Si el directorio /prueba/ no se neces= ita m=C3=A1s, como usuario root de Linux ejecute el comando rm -ri /prueba/ para eliminarlo, as=C3=AD como todos los a= rchivos en =C3=A9l.
Vaya a la p=C3=A1gina man de tar(1) para informaci=C3=B3n adicional de = tar, tal como la opci=C3=B3n --xattrs para retener todos los atributos extendidos.

5.10.5. Archivando archivos= con tar

star no retiene los atributos extendidos= por defecto. Dado que los contextos SELinux se almacenan en los atributos = extendidos, los contextos se pueden perder cuando se crean esos archivos. U= se star -xattr -H=3Dexustar para crear archi= vos que retengan los contextos. El paquete star no se instala por defecto. Para instalar star, ejecute el comando yum install star c= omo usuario root de Linux.
El siguiente ejemplo muestra la creaci=C3=B3n de un archivo Star que re= tiene los contextos SELinux:
  1. Como usuario root de Linux, ejecute el comando touch /var/www/html/archivo{1,2,3} para crear tres archivos (archivo1, archivo2 y archivo3). Estos heredan el tipo httpd_sys_content_t del directorio /var/www/html/:
    # touch /var/www/html/archivo{1,2,3}
    # ls -Z /var/www/html/
    -rw-r--r--  root root unconfined_u:object_r:httpd_sys_content_t:s0 archivo1
    -rw-r--r--  root root unconfined_u:object_r:httpd_sys_content_t:s0 archivo2
    -rw-r--r--  root root unconfined_u:object_r:httpd_sys_content_t:s0 archivo3
    
  2. Ejecute el comando cd /var/www/html/ p= ara cambiar al directorio /var/www/html/. U= na vez en este directorio, como usuario root de Linux ejecute el comando star -xattr -H=3Dexustar -c -f=3Dprueba.star archivo{= 1,2,3} para crear un archivo Star llamado p= rueba.star:
    # star -xattr -H=3Dexustar -c -f=3Dprueba.=
    star archivo{1,2,3}
    star: 1 blocks + 0 bytes (total of 10240 bytes =3D 10.00k).
    
  3. Como usuario root de Linux, corra el comando = mkdir /prueba para crear un directorio nuevo, y luego ejecute el com= ando chmod 777 /prueba/ para permitir a los = usuarios acceso total al directorio /prueba/.
  4. Ejecute el comando cp /var/www/html/prueba.st= ar /prueba/ para copiar el archivo prueba.s= tar al directorio /prueba/.
  5. Ejecute el comando cd /prueba/ para ca= mbiar al directorio /prueba/. Una vez ah=C3= =AD, ejecute el comando star -x -f=3Dprueba.star para extraer el archivo Star:
    $ star -x -f=3Dprueba.star =
    
    star: 1 blocks + 0 bytes (total of 10240 bytes =3D 10.00k).
    
  6. Ejecute el comando ls -lZ /prueba/ par= a ver los contextos SELinux. El tipo httpd_s= ys_content_t fue retenido, en vez de haberse cambiado al default_t, lo que hubiera pasado si la opci=C3= =B3n --selinux no se hubiera usado:
    $ ls -lZ /prueba/
    -rw-r--r--  usuario1 grupo1 unconfined_u:object_r:httpd_sys_content_t:s0 ar=
    chivo1
    -rw-r--r--  usuario1 grupo1 unconfined_u:object_r:httpd_sys_content_t:s0 ar=
    chivo2
    -rw-r--r--  usuario1 grupo1 unconfined_u:object_r:httpd_sys_content_t:s0 ar=
    chivo3
    -rw-r--r--  usuario1 grupo1 unconfined_u:object_r:default_t:s0 prueba.star
    
  7. Si el directorio /prueba/ no se neces= ita m=C3=A1s, como usuario root de Linux ejecute el comando rm -ri /prueba/ para eliminarlo, as=C3=AD como todos los a= rchivos en =C3=A9l.
  8. Si star ya no se necesita, como usuari= o root de Linux, ejecute el comando yum remove star= para eliminar el paquete.
Vaya a la p=C3=A1gina man de star(1) para m=C3=A1s informaci=C3=B3n ace= rca de star.


[8] Brindle, Joshua. "Re: blurb for fedora setools packages" Email para Mur= ray McAllister. 1 Noviembre 2008. Cualquier edici=C3=B3n o cambio en esta v= ersi=C3=B3n fue hecha por Murray McAllister.

[9] Administraci=C3=B3n de Software con yum, escrito por Stuart Ellis, edit= ado por Paul W. Frields, Rodrigo Menezes y Hugo Cisneiros.

[10] Vaya a http://en.w= ikipedia.org/wiki/Runlevel para informaci=C3=B3n sobre los niveles de e= jecuci=C3=B3n.

[11] Los archivos en /etc/selinux/targeted/contexts= /files/ definen los contextos de los archivos y directorios. Los arc= hivos en este directorio son accedidos por restorec= on y por setfiles para restaurar al v= alor predeterminado los contextos de los archivos y directorios.

[12] Morris, James. "Etiquetado de Sistemas de Archivos en SELinux". Publ= icado el 1 Octubre 2004. Accedido el 14 Octubre 2008: http://www.linuxjournal.com/article/7426.

[13] La p=C3=A1gina de manual matchpathcon(8), tal como se incluy=C3=B3 en el= paquete libselinux-utils en Fedora, fue esc= rita por Daniel Walsh. Cualquier edici=C3=B3n o cambio en esta versi=C3=B3n= fue hecha por Murray McAllister.

Cap=C3=ADtulo 6. Confinando a los Usuarios

=
Un n=C3=BAmero de usuarios confinados SELinux est=C3=A1n disponibles en F= edora 11. Cada usuario Linux se mapea aun usuario SELinux v=C3=ADa la pol= =C3=ADtica de SELinux, permitiendo a los usuarios Linux heredar las restric= ciones sobre los usuarios SELinux, por ejemplo (dependiendo del usuairo), n= o poder: ejecutar el sistema de ventanas X; usar la red; ejecutar aplicacio= nes setuid (a menos que la pol=C3=ADtica de SELinux lo permita); o ejecutar= comandos su y sudo<= /code> para volverse el usuario root de Linux. Esto ayuda a proteger el sis= tema del usuario. Vaya a Secci=C3=B3n=C2=A04.3, =E2=80=9CUsuarios Confi= nados y no Confinados=E2=80=9D para informaci=C3=B3n adicional sobre us= uarios confinados en Fedora 11.
=

6.1. Linux y los Mapeos de Usuarios de SE= Linux

Como usuario root de Linux, corra el comando sem= anage login -l para ver el mapeo entre los usuarios de Linux y los u= suarios de SELinux:
# /usr/sbin/semanage login -l

Login Name                SELinux User              MLS/MCS Range

__default__               unconfined_u              s0-s0:c0.c1023
root                      unconfined_u              s0-s0:c0.c1023
system_u                  system_u                  s0-s0:c0.c1023
En Fedora 11, los usuarios Linux se mapean al ingreso SELinux __default__ por defecto (que se mapea al usuari= o SELinux unconfined_u). Cuando se cr= ea un usuario Linux con el comando useradd, = si no se especifica ninguna opcion, son mapeados al usuario SELinux unconfined_u. Lo siguiente define el mapeo p= or defecto:
__default__               unconfined_u       =
       s0-s0:c0.c1023
=

6.2. Confinando Usuarios Nuevos de= Linux: useradd

Los usuarios Linux mapeados al usuario SELinux unconfined_u corren en el dominio unconfined_t. Esto se ve ejecutando el comando id -Z luego de haber ingresado como el usuario Linux que se ma= pea a unconfined_u:
$ id -Z
unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
Cuando los usuarios linux ejecuten en el dominio unconfined_t, se aplican las reglas de la pol=C3=ADtica de S= ELinux, pero las reglas de pol=C3=ADticas que existen para usuarios Linux q= ue corren en el dominio unconfined_t = permiten casi todos los accesos. Si los usuarios Linux no confinados ejecut= an una aplicaci=C3=B3n que la pol=C3=ADtica de SELinux define pueden transi= cionar desde el dominio unconfined_t = a su propio dominio confinado, los usuarios Linux no confinados todav=C3=AD= a pueden ser sujetos a restricciones del dominio confinado. El beneficio de= seguridad de esto es que, aunque el usuario Linux corre en un dominio conf= inado, la aplicaci=C3=B3n permanece confinada, y por lo tanto, la explotaci= =C3=B3n de una brecha en la aplicaci=C3=B3n se puede limitar por la pol=C3= =ADtica. Nota: esto no protege al sistema del usuario. En su lugar, el usua= rio y el sistema est=C3=A1n siendo protegido de posibles da=C3=B1o s causados en alguna debilidad en la aplicaci=C3=B3n.
Cuando se crean usuarios LInux con useradd, use la opci=C3=B3n -Z para especificar a q= u=C3=A9 usuario SELinux se debe mapear. El siguiente ejemplo crea un usuari= o Linux nuevo, useruuser, y mapea ese usuario al usuario SELinux user_u. Los usuarios Linux mapeados al usuario = SELinux user_u corren en el dominio <= code class=3D"computeroutput">user_t. En este dominio, los usuarios = Linux no pueden correr aplicaciones setuid a menos que la pol=C3=ADtica de = SELinux lo permita (tal como passwd), y tamp= oco pueden correr su o sudo, lo que evita que se puedan volver usuarios root de Linux co= n estos comandos.
  1. Como usuario root de Linux, corra el comando /= usr/sbin/useradd -Z user_u useruuser para crear el usuario Linux nue= vo (useruuser) que se mapear=C3=A1 al usuario SELinux user_u.
  2. Como usuario root de Linux, corra el comando s= emanage login -l para ver el mapeo entre el usuario Linux useruuser y user= _u:
    # /usr/sbin/semanage login -l
    
    Login Name                SELinux User              MLS/MCS Range
    
    __default__               unconfined_u              s0-s0:c0.c1023
    root                      unconfined_u              s0-s0:c0.c1023
    system_u                  system_u                  s0-s0:c0.c1023
    useruuser                 user_u                    s0
    
  3. Como usuario root de Linux, corra el comando p= asswd useruuser para asignar una contrase=C3=B1a para el usuario use= ruuser de Linux:
    # passwd useruuser
    Cambiando la contrase=C3=B1a del usuario useruuser.
    Nueva contrase=C3=B1a de UNIX: Ingrese una =
    contrase=C3=B1a
    Reingrese la nueva contrase=C3=B1a de UNIX: Ingrese la misma contrase=C3=B1a de nuevo =
    
    passwd: todos los tokens actualizados exitosamente.
    
  4. Salga de su sesi=C3=B3n actual, e ingrese como el usuario useruuser de= Linux. Cuando ingrese, pam_selinux mapea el usuario Linux a un usuario SEL= inux (en este caso, user_u), y config= ura el contexto SELinux resultante. El shell del usuario Linux es luego lan= zado con este contexto. Corra el comando id -Z para ver el contexto de un usuario Linux:
    [useruuser(a)localhost ~]$ id -Z
    user_u:user_r:user_t:s0
    
  5. Salga de la sesi=C3=B3n useruuser de Linux, y vuelva a ingresar en su = cuenta. Si no quiere el usuario useruuser, ejecute el comando /usr/sbin/userdel -r useruuser como usuario root de Lin= ux para borrarlo junto con su directorio de inicio.

6.= 3. Confinando Usuarios Linux Existentes: semanage login

Si un usuario Linux se mapea al usuario u= nconfined_u (el comportamiento predeterminado), y desea cambiar le u= suario SELinux al que se mapea, use el comando sema= nage login. El siguiente ejemplo crea un usuario de Linux nuevo llam= ado usuarionuevo, luego lo mapea al usuario SELinux user_u:
  1. Como usuario root de Linux, ejecute el comando /usr/sbin/useradd usuarionuevo para crear un nuevo usuario (usuario= nuevo). Dado que este usuario usa el mapeo por defecto, no aparece en la sa= lida de /usr/sbin/semanage login -l:
    # /usr/sbin/semanage login -l
    
    Login Name                SELinux User              MLS/MCS Range
    
    __default__               unconfined_u              s0-s0:c0.c1023
    root                      unconfined_u              s0-s0:c0.c1023
    system_u                  system_u                  s0-s0:c0.c1023
    
  2. Para mapear un usuario usuarionuevo de Linux al usuario user_u de SELinux, corra el siguiente comando como = usuario root de Linux:
    /usr/sbin/semanage login -a -s user_u usuarion= uevo
    La opci=C3=B3n -a agrega un registro nue= vo y la opci=C3=B3n -s especifica el usuario = SELinux al que mapea el usuario Linux. El =C3=BAltimo argumento usuarionuevo, es el usuario Linux al que quiere = que se mapee el usuario SELinux especificado.
  3. Para ver el mapeo entre el usuario usarionuevo de Linux y user_u, corra el comando semanage login -l como usuario root de Linux:
    # /usr/sbin/semanage login -l
    
    Login Name                SELinux User              MLS/MCS Range
    
    __default__               unconfined_u              s0-s0:c0.c1023
    usuarionuevo                   user_u                    s0
    root                      unconfined_u              s0-s0:c0.c1023
    system_u                  system_u                  s0-s0:c0.c1023
    
  4. As the Linux root user, run the passwd newuser= command to assign a password to the Linux newuser user:
    # passwd usuarionuevo
    Cambiando la contrase=C3=B1a del usuario usuarionuevo.
    Nueva contrase=C3=B1a de UNIX: Ingrese una =
    contrase=C3=B1a
    Reingrese la nueva contrase=C3=B1a de UNIX: Ingrese la misma contrase=C3=B1a de nuevo =
    
    passwd: todos los tokens de autenticaci=C3=B3n se actualizaron exitosamente.
    
  5. Salga de su sesi=C3=B3n actual e ingrese como el usuario de Linux usua= rionuevo. Corra el comando id -Z para ver el= contexto SELinux de usuarionuevo:
    [usuarionuevo(a)localhost ~]$ id -Z
    user_u:user_r:user_t:s0
    
  6. Salga de la sesi=C3=B3n de Linux del usuarionuevo y vuelva a ingresar = en su cuenta. Si no quiere el usuarionuevo de Linux, corra el comando userdel -r usuarionuevo como usuario root de Linu= x, junto con su directorio de inicio. Tambi=C3=A9n, el mapeo del usuario Li= nux usuarionuevo y user_u se elimina:
    # /usr/sbin/userdel -r usuarionuevo
    # /usr/sbin/semanage login -l
    
    Login Name                SELinux User              MLS/MCS Range
    
    __default__               unconfined_u              s0-s0:c0.c1023
    root                      unconfined_u              s0-s0:c0.c1023
    system_u                  system_u                  s0-s0:c0.c1023
    

6.4. Cambiando el Mapeo= Predeterminado

En Fedora 11, los usuarios Linux se mapean al ingreso SELinux __default__ por defecto (que se mapea al usuari= o SELinux unconfined_u). Si quiere qu= e los usuarios nuevos de Linux y los usuarios Linux no mapeados espec=C3=AD= ficamente a un usuario SELinux sean confinados por defecto, cambie el mapeo= predeterminado con el comando semanage login.
Por ejemplo, corra el siguiente comando como usuario root de Linux para = cambiar el mapeo predeterminado de unconfine= d_u a user_u:
/usr/sbin/semanage login -m -S targeted -s "user= _u" -r s0 __default__
Corra el comando semanage login -l como u= suario root de Linux para verificar que el ingreso __default__ se mapea a user_u<= /code>:
# /usr/sbin/semanage login -l

Login Name                SELinux User              MLS/MCS Range

__default__               user_u                    s0
root                      unconfined_u              s0-s0:c0.c1023
system_u                  system_u                  s0-s0:c0.c1023
Si un usuario Linux nuevo se crea y el usuario SELinux no se especifica,= o si un usuario Linux existente ingresa y no coincide una entrada espec=C3= =ADfica de la salida de semanage login -l, s= e mapean a user_u, seg=C3=BAn el ingr= eso __default__.
Para volver al comportamiento predeterminado, corra el siguiente comando= como usuario root de Linux para mapear el ingreso __default__ al usuario SELinux unconfined_u:
=
/usr/sbin/semanage login -m -S targeted -s "unconfine=
d_u" -r\
s0-s0:c0.c1023 __default__

6.5. xguest: Modo Kiosk

El paquete xguest provee una cuenta de us= uario kiosk. Esta cuenta se usa para asegurar m=C3=A1quinas a las que ingre= san personas y las usan, como las de las bibliotecas, bancos, aeropuertos, = quioscos de informaci=C3=B3n y cyber caf=C3=A9s. La cuenta de usuario kiosk= est=C3=A1 muy bloqueada: escencialmente, s=C2=B4olo permite a los usuarios= ingresar y usar Firefox para navegar sitios de Internet. Cualquier cambio hecho mientras se ingre= s=C3=B3 con esa cuenta, tal como la creaci=C3=B3n y cambio de la configurac= i=C3=B3n, se pierde cuando se sale.
Para configurar la cuenta kiosk:
  1. Como usuario root de Linux, corra el comando y= um install xguest para instalar el paquete x= guest. Instale las dependencias requeridas.
  2. Para permitir a la cuenta kiosk usarse para una variedad de personas, = la cuenta no se protege con contrase=C3=B1a, y como tal, la cuenta s=C3=B3l= o se puede proteger si SELinux est=C3=A1 funcionando en modo obediente. Ant= es de ingresar con esta cuenta, use el comando gete= nforce para confirmar que SELinux est=C3=A1 funcionando en modo obed= iente:
    $ /usr/sbin/getenforce
    Enforcing
    
    Si no es =C3=A9ste el caso, vaya a Secci=C3=B3n=C2=A05.5, =E2=80=9CModos de SELinux=E2=80=9D= para informaci=C3=B3n acerca del cambio de modo de obligatorio. No es posi= ble ingresar con esta cuenta si SELinux est=C3=A1 en modo permisivo o desha= bilitado.
  3. Solamente puede ingresar a esta cuenta a trav=C3=A9s del Administraci= =C3=B3n de Pantalla de GNOME (GDM). Una vez que el paquete xguest se instala, se agrega una cuenta Invitado a GDM. Para ingresar, haga clic en la cuenta Invitado:

6.6. Booleanos= para que los Usuarios Ejecuten Aplicaciones

No permitir que los usuarios Linux ejecuten aplicaciones (que heredan lo= s permisos del usuario) en sus directorios de inicio (home) y /tmp/, a los que tienen acceso de escritura, lo que ay= uda a evitar que aplicaciones con brechas o maliciosas puedan modificar arc= hivos del usuario. En Fedora 11, por defecto, los usuarios Linux en los dom= inios guest_t y xguest_t no pueden ejecutar aplicaciones en los directorio= s de inicio o en /tmp/; however, por defect= o, los usuarios Linux en los dominios user_t= and staff_t si pueden.
Hay booleanos disponibles para cambiar este comportamiento, y se configu= ran con el comando setsebool. El comando setsebool se debe usar con el usuario root de L= inux. El comando setsebool -P hace los cambi= os persistentes. No use la opci=C3=B3n -P si = no quiere que los cambios persistan entre reiniciadas:
guest= _t
Para permitir a los usuarios L= inux en el dominio guest_t que ejecut= en aplicaciones en sus directorios de inicio y en = /tmp/:
/usr/sbin/setsebool -P allow_guest_exec_content = on
xgue= st_t
Para permitir a los usuarios L= inux en el dominio xguest_t ejecutar = aplicaciones en sus directorios inicios y /tmp/:
/usr/sbin/setsebool -P allow_xguest_exec_content= on
user_t=
Para impedir que los usuarios = Linux en el dominio user_t ejecuten a= plicaciones en sus directorios de inicio y /tmp/:
/usr/sbin/setsebool -P allow_user_exec_content o= ff
staff= _t
Para impedir que los usuarios = Linux en el dominio staff_t ejecuten = aplicaciones en sus directorios de inicio y en /tm= p/:
/usr/sbin/setsebool -P allow_staff_exec_content = off

Cap=C3=ADtulo 7. Soluci=C3=B3n a Problemas

<= /div>
El siguiente cap=C3=ADtulo describe qu=C3=A9 pasa cuando SELinux niega el= acceso; las principales tres causas de problemas; d=C3=B3nde encontrar inf= ormaci=C3=B3n acerca del correcto etiquetado; an=C3=A1lisis de las negacion= es de SELinux; y creaci=C3=B3n de m=C3=B3dulos de pol=C3=ADticas personaliz= ados con audit2allow.
=

7.1. Qu=C3=A9 pasa cuando el Acceso es= Denegado

Las decisiones de SELinux, tales como permitir o negar el acceso, son ca= cheadas. Este cache se conoce como Cach=C3=A9 Vector de Acceso (AVC). Los m= ensajes de negaci=C3=B3n se registran cuando SELinux niega el acceso. Estas= negaciones se conocen tambi=C3=A9n como "negaciones AVC", y se guardan en = una ubicaci=C3=B3n distinta, dependiendo de los demonios que se ejecutan:
=
DaemonLog Location
auditd on/var/log/audit/audit.log
auditd off; rsyslogd on/var/log/messages
setroubleshootd, rsyslogd, and auditd on/var/log/audit/audit.log.= Easier-to-read denial messages also sent to /var/= log/messages
Si est=C3=A1 corriendo el Sistema de Ventanas X, ya tienen los paquetes = setroubleshoot y set= roubleshoot-server instalados, y los demonios setroubleshootd y auditd est= =C3=A1n ejecut=C3=A1ndose, se muestra una estrella amarilla y una advertenc= ia cuando SELinux deniega el acceso:
Haciendo clic en las estrelas se presenta un an=C3=A1lisis detallado de = por qu=C3=A9 SELinux neg=C3=B3 el acceso, y una posible soluci=C3=B3n para = permitir el acceso. Si no est=C3=A1 corriendo el Sistema de Ventanas X, es = menos obvio cuando un acceso es negado por SELinux. Por ejemplo, los usuari= os navegando su sitio web pueden recibir un error similar al siguiente:
Prohibido

No tiene permiso para acceder el archivo xx=
 en este servidor
Para estas situaciones, si las reglas DAC (los permisos est=C3=A1ndares = de Linux) permiten el acceso, busque en /var/log/m= essages y /var/log/audit/audit.log l= a cadena de los errores "SELinux est=C3=A1 n= egando" y "negado" respectivam= ente. Esto se puede hacer con los siguientes comandos como usuario root de = Linux:
grep "SELinux est=C3=A1 previniendo" /var/log/me= ssages
grep "denegado" /var/log/audit/audit.log

7.2. Tres Principales Causas de Probl= emas

Las siguientes secciones describen las tres principales causas de proble= mas: problemas de etiquetados, configuraci=C3=B3n de Booleanos y puertos pa= ra servicios, y la evoluci=C3=B3n de las reglas SELinux.

7.2.1. Problemas de Etiquetados

En sistemas que corren SELinux, todos los procesosy archivos se etiquet= an con una etiqueta que contiene informaci=C3=B3n de seguridad relevante. E= sta informaci=C3=B3n se llama contexto de SELinux. Si estas etiquetas est= =C3=A1n mal, el acceso puede ser negado. Si una aplicaci=C3=B3n se etiqueta= incorrectamente, el proceso al que transiciona puede no tener la etiqueta = correcta, causando negaciones de acceso de SELinux, y los procesos pueden c= rear archivo con las etiquetas incorrectas.
Una causa com=C3=BAn de problemas de etiquetados es cuando un directori= o no estandar se usa para un servicio. Por ejemplo, en vez de usar /var/www/html/ para un sitio web, un administrador = prefiere usar /srv/miweb/. En Fedora 11, el= directorio /srv/ se etiqueta con el tipo <= code class=3D"computeroutput">var_t. Los archivos y directorios crea= dos en /srv/ heredan este tipo. Tambi=C3=A9= n, los directorios de alto nivel reci=C3=A9n creados (como /miservidor/) puede ser etiquetado con el tipo default_t. SELinux impide al Servidor HTTP Apach= e (httpd) el acceso a estos dos tipos. Pa= ra permitirle el acceso, SELinux debe saber qu=C3=A9 archivos en /srv/miweb/ son accesibles a httpd:
# /usr/sbin/semanage fcontext -a -t httpd_sy=
s_content_t \
"/srv/myweb(/.*)?"
Este comando semanage agrega el contexto= para el directorio /srv/miweb/ (y todos lo= s archivos dentro de =C3=A9l) a la configuraci=C3=B3n de contexto de archiv= os de SELinux [14]. El comando semanage no ca= mbia el contexto. Como usuario root de Linux, ejecute el comando restorecon para aplicar los cambios:
# /sbin/restorecon -R -v /srv/myweb
Vaya a Secci=C3=B3n=C2=A05.7.2, =E2=80= =9CCambios Persistentes: semanage fcontext=E2=80=9D para m=C3=A1s infor= maci=C3=B3n sobre agregado de contextos a la configuraci=C3=B3n de contexto= de archivo.

7.2.1.1. =C2=BFCu=C3=A1l es el contexto c= orrecto?

El comando matchpathcon chequea el cont= exto de un nombre completo de archivo y lo compara con la etiqueta por defe= cto para esa direcci=C3=B3n. El siguiente ejemplo muestra el uso de matchpathcon en un directorio con archivos etiqueta= dos incorrectamente:
$ /usr/sbin/matchpathcon -V /var/www/html/*
/var/www/html/index.html tiene el contexto unconfined_u:object_r:user_home_=
t:s0, deber=C3=ADa ser system_u:object_r:httpd_sys_content_t:s0
/var/www/html/page1.html tiene el contexto unconfined_u:object_r:user_home_=
t:s0, deber=C3=ADa ser system_u:object_r:httpd_sys_content_t:s0
En este ejemplo, los archivos index.html and pagina1.html se etiquetan con el tip= o user_home_t. Este tipo se usa para = archivos en los directorios de inicio de los usuarios. Usando el comando mv para mover archivos puede resultar en archi= vos etiquetados con el tipo user_home_t. Este tipo no deber=C3=ADa existir fuera de los directorios home. Use el= comando restorecon para restaurar tales arc= hivos a su tipo correcto:
# /sbin/restorecon -v /var/www/html/index.h=
tml =

restorecon reset /var/www/html/index.html context unconfined_u:object_r:use=
r_home_t:s0->system_u:object_r:httpd_sys_content_t:s0
Para restaurar el contexto de todos los archivos bajo un directorio, u= se la opci=C3=B3n -R:
# /sbin/restorecon -R -v /var/www/html/
restorecon reset /var/www/html/page1.html context unconfined_u:object_r:sam=
ba_share_t:s0->system_u:object_r:httpd_sys_content_t:s0
restorecon reset /var/www/html/index.html context unconfined_u:object_r:sam=
ba_share_t:s0->system_u:object_r:httpd_sys_content_t:s0
Vaya a Secci=C3=B3n=C2=A05.10.3, = =E2=80=9CChequeando el Contexto SELinux Predeterminado=E2=80=9D para un= ejemplo m=C3=A1s detallado de matchpathcon.

7.2.2. =C2= =BFC=C3=B3mo se Ejecutan los Servicios Confinados?

Los servicios se pueden ejecutar en una variedad de formas. Para cambia= r esto, debe decirle a SELinux c=C3=B3mo correr=C3=A1 los servicios. Esto s= e puede conseguir v=C3=ADa los Booleanos que permiten que parte de las pol= =C3=ADticas de SELinux se cambien en tiempo de ejecuci=C3=B3n, sin ning=C3= =BAn conocimiento sobre la escritura de pol=C3=ADticas de SELinux. Esto per= mite cambios, tales como permitir a servicios que accedan a sistemas de arc= hivo NFS, sin recargar o recompilar una pol=C3=ADtica SELinux. Tambi=C3=A9n= , correr servicios en n=C3=BAmeros de puerto no predeterminados requiere qu= e la configuraci=C3=B3n de la pol=C3=ADtica se actualice v=C3=ADa el comand= o semanage.
Por ejemplo, para permitir al Servidor HTTP Apache comunicarse con MySQ= L, active el Booleano httpd_can_network_conn= ect_db:
# /usr/sbin/setsebool -P httpd_can_network_c=
onnect_db on
Si el acceso es denegado para un servicio particular, use los comandos = getsebool y grep para ver si alg=C3=BAn Booleano est=C3=A1 disponible para permitir el a= cceso. Por ejemplo, use el comando getsebool -a | g= rep ftp para buscar un Booleano relacionado con FTP:
$ /usr/sbin/getsebool -a | grep ftp
allow_ftpd_anon_write --> off
allow_ftpd_full_access --> off
allow_ftpd_use_cifs --> off
allow_ftpd_use_nfs --> off
ftp_home_dir --> off
httpd_enable_ftp_server --> off
tftp_anon_write --> off
Para una lista de los Booleanos y de si est=C3=A1n activos o inactivos,= corra el comando /usr/sbin/getsebool -a. Pa= ra una lista de los Booleanos y una explicaci=C3=B3n de lo que son, y de si= est=C3=A1n activos o no, ejecute el comando /usr/s= bin/semanage boolean -l como usuario root de Linux. vaya a Secci=C3=B3n=C2=A05.6, =E2=80=9CBooleanos=E2= =80=9D para informaci=C3=B3n sobre listado y configuraci=C3=B3n de Bool= eanos.
N=C3=BA= meros de Puertos
Dependiendo de la configuraci=C3=B3n de la pol=C3=ADtica, los servicio= s pueden tener permitido correr sobre ciertos n=C3=BAmeros de puerto. Inten= tar cambiar el puerto en el que corre un servicio sin cambiar la pol=C3=ADt= ica puede resultar en un fallo al iniciar el servicio. Por ejemplo, ejecute= el comando semanage port -l | grep http com= o usuario root de Linux para listar los puertos relacionados con http:
# /usr/sbin/semanage port -l | grep http
http_cache_port_t              tcp      3128, 8080, 8118
http_cache_port_t              udp      3130
http_port_t                    tcp      80, 443, 488, 8008, 8009, 8443
pegasus_http_port_t            tcp      5988
pegasus_https_port_t           tcp      5989
El tipo de puerto http_port_t def= ine los puertos en los que el Servidor HTTP Apache puede escuchar, que en e= ste caso son los puertos TCP 80, 443, 488, 8008, 8009, y 8443. Si un admini= strador configura httpd.conf para que httpd escuche en el puerto 9876 (Listen 9876), pero la pol=C3=ADtica no fue actualizada p= ara reflejar esto, el comando service httpd start falla:
# /sbin/service httpd start
Starting httpd: (13)Permission denied: make_sock: could not bind to address=
 [::]:9876
(13)Permission denied: make_sock: could not bind to address 0.0.0.0:9876
no listening sockets available, shutting down
Unable to open logs
                                                            [FAILED]
Una negaci=C3=B3n de SELinux es similar a la siguiente y se guarda en <= code class=3D"filename">/var/log/audit/audit.log:
type=3DAVC msg=3Daudit(1225948455.061:294): =
avc:  denied  { name_bind } for  pid=3D4997 comm=3D"httpd" src=3D9876 scont=
ext=3Dunconfined_u:system_r:httpd_t:s0 tcontext=3Dsystem_u:object_r:port_t:=
s0 tclass=3Dtcp_socket
Para permitir a httpd escuchar en un = puerto que no est=C3=A1 listado en el tipo de puerto http_port_t, ejecute el comando sem= anage port para agregar un puerto a la configuraci=C3=B3n de la pol= =C3=ADtica [15]:
# /usr/sbin/semanage port -a -t http_port_t =
-p tcp 9876
La opci=C3=B3n -a agrega un nuevo registr= o; la opci=C3=B3n -t define un tipo; y la opc= i=C3=B3n -p define un protocolo. El =C3=BAlti= mo argumento es el n=C3=BAmero de puerto a agregar.

7.2.3. Evoluc= ionando las Reglas y las Aplicaciones Rotas

Las aplicaciones se pueden romper, provocando que SELinux niegue el acc= eso. Tambi=C3=A9n, las reglas de SELinux evolucionan - SELinux no se debe v= er como una aplicaci=C3=B3n que se ejecuta en una cierta forma, haciendo qu= e deniegue el acceso, a=C3=BAn cuando la aplicaci=C3=B3n est=C3=A1 funciona= do como se espera que lo haga. Por ejemplo, si una nueva versi=C3=B3n de Po= stgreSQL se lanza, puede realizar acciones sobre la pol=C3=ADtica actual qu= e no han sido vistas antes, haciendo que el acceso sea denegado, a=C3=BAn c= uando el acceso deber=C3=ADa ser permitido.
Para estas situaciones, despu=C3=A9s de que se niegue el acceso, use audit2allow para crear un m=C3=B3dulo de pol= =C3=ADtica personalizado para permitir el acceso. Vaya a Secci=C3=B3n=C2= =A07.3.8, =E2=80=9CPermitiendo el Acceso: audit2allow=E2=80=9D para m= =C3=A1s informaci=C3=B3n sobre el uso de audit2allo= w.

7.3. Correcci=C3=B3n de Problemas

Las siguientes secciones ayudan a resolver problemas. Cubren los temas: = chequeo de los permisos de Linux, que se chequean antes que las reglas de S= ELinux; posibles causas de negaciones de acceso de SELinux, pero no negacio= nes que se est=C3=A9n guardando; p=C3=A1ginas man de los servicios, que con= tienen informaci=C3=B3n sobre etiquetado y Booleanos; dominios permisivos, = para permitir a un proceso correr en modo permisivo, en vez de todo el sist= ema; c=C3=B3mo buscar y encontrar mensajes; an=C3=A1lisis de negaciones; y = creaci=C3=B3n de m=C3=B3dulos de pol=C3=ADticas personalizados con audit2allow.

7.3.1. Permisos de Linux

Cuando el acceso se niega, verifique los permisos est=C3=A1ndares de LI= nux. Como se mencion=C3=B3 en Cap= =C3=ADtulo=C2=A02, Introducci=C3=B3n, la mayor=C3=ADa de los sis= temas operativos usan un sistema de Control de Acceso Discrecional (DAC) pa= ra controlar el acceso, permitiendo a los usuarios controlar los permisos d= e sus propios archivos. Las reglas de pol=C3=ADticas de SELinux se verifica= n despu=C3=A9s de estas reglas DAC. Las reglas de pol=C3=ADticas de SELinux= no se usan si las reglas DAC niegan el acceso al principio.
Si el acceso es denegado y no hay negaciones SELinux guardadas, use el = comando ls -l para ver los permisos est=C3= =A1ndares de Linux:
$ ls -l /var/www/html/index.html
-rw-r----- 1 root root 0 2009-05-07 11:06 index.html
En este ejemplo, index.html pertenece a= l usuario y al grupo root. El usuario root tiene permisos de lectura y escr= itura (-rw), y los miembros del grupo= root tienen permisos de lectura (-r-= ). Cualquier otro no tiene acceso (---). Por defecto, tales permisos no permiten a ht= tpd leer este archivo. Para resolver esto, use el comando chown el due=C3=B1o y el grupo. Este comando se debe e= jecutar como usuario root de Linux:
# chown apache:apache /var/www/html/index.ht=
ml
Esto asume la configuraci=C3=B3n predeterminada, en la que httpd corre como usuario apache de Linux. Si corre <= code class=3D"systemitem">httpd con un usuario diferente, reemplace = apache:apache con ese usuario.
Vaya al borrador Proyecto de Documentaci=C3=B3n de Fedora - = "Permisos" para informaci=C3=B3n sobre el manejo de los permisos de Lin= ux.

7.3.2. Posibles Causas de las N= egaciones Silenciosas

En ciertas situaciones, las negaciones AVC pueden no ser guardadas cuan= do SELinux niega el acceso. Las aplicaciones y las funciones de las bibliot= ecas del sistema a menudo prueban m=C3=A1s accesos que los pedidos para rea= lizar sus tareas. Para mantener el menor privilegio sin llenar los informes= de auditor=C3=ADa con negaciones AVC para pruebas sin peligro de las aplic= aciones, la pol=C3=ADtica puede silenciar las negaciones AVC sin permitir e= l uso de reglas dontaudit. Estas regl= as son com=C3=BAnes en la pol=C3=ADtica est=C3=A1ndar. La contraparte de dontaudit es que, aunque SELinux niega = el acceso, los mensajes no se guardan, lo que dificulta resolver el problem= a.
Deshabilite temporalmente las reglas don= taudit, permitiendo que se guarden todas las negaciones, ejecute el = siguiente comando como usuario root de Linux:
/usr/sbin/semodule -DB
La opci=C3=B3n -D deshabilita las reglas = dontaudit; la opci=C3=B3n -B reconstruye la pol=C3=ADtica. Despu=C3=A9s de ejcutar= semodule -DB, pruebe ejercitar la aplicaci= =C3=B3n que tuvo problemas de permisos, y vea si ahora se guardan negacione= s de SELinux relacionadas con la aplicaci=C3=B3n. Tenga cuidado con la deci= ci=C3=B3n de qu=C3=A9 negaciones se deben permitir, dado que algunas se deb= en ignorar y manejarse v=C3=ADa reglas donta= udit. Si tiene duda, o busca alguna gu=C3=ADa, contacte a otros usua= rios y desarrolladores de SELinux en una lista de SELinux, tal como fedora-seli= nux-list.
Para reconstruir la pol=C3=ADtica y habilitar las reglas dontaudit, ejecute el siguiente comando como usuari= o root de Linux:
/usr/sbin/semodule -B
Esto restaura la pol=C3=ADtica a su estado original. Para una lista com= pleta de las reglas dontaudit, corra = el comando sesearch --dontaudit. B=C3=BAsque= das m=C3=A1s refinadas usando la opci=C3=B3n -s dominio y el comando grep. Por ejemplo:
$ sesearch --dontaudit -s smbd_t | grep squid
WARNING: This policy contained disabled aliases; they have been removed.
dontaudit smbd_t squid_port_t : tcp_socket name_bind ;
dontaudit smbd_t squid_port_t : udp_socket name_bind ;

7.3.3. P=C3=A1ginas de Manual para Serv= icios

Las p=C3=A1ginas de manual para los servicios conteniendo informaci=C3= =B3n valiosa, tal como qu=C3=A9 tipo de archivo usar para una situaci=C3=B3= n dada, y los Booleanos para cambiar el acceso que un servicio tiene (tal c= omo httpd para acceder sistemas de archiv= os NFS). Esta informaci=C3=B3n puede estar en la p=C3=A1gina de manual est= =C3=A1ndar o una p=C3=A1gina de manual con s= elinux como prefijo o sufijo.
Por ejemplo, la p=C3=A1gina de manual httpd_selinux(8) tiene informaci=C3= =B3n sobre qu=C3=A9 tipo de archivo usar para una situaci=C3=B3n dada, as= =C3=AD como los Booleanos para permitir scripts, compartir archivos, accede= r directorios dentro de los directorios home, y as=C3=AD sucesivamente. Otr= as p=C3=A1ginas de manual con informaci=C3=B3n de SELinux para servicios in= cluyen a:
  • Samba: la p=C3=A1gina de manual samba_selinux(8) describe que los archi= vos y directorios exportar v=C3=ADa Samba deben ser etiquetados con el tipo= samba_share_t, as=C3=AD como los Boo= leanos para permitir archivos etiquetados con otros tipos distintos a samba_share_t para exportarlos v=C3=ADa Sa= mba.
  • NFS: la p=C3=A1gina de manual nfs_selinux(8) describe que, por defecto,= los sistemas de archivo no se pueden exportar v=C3=ADa NFS, y que no se pe= rmite exportar sistemas de archivos. Los Booleanos como nfs_export_all_ro o nfs_e= xport_all_rw deben activarse.
  • Berkeley Internet Name Domain (BIND): la p=C3=A1gina de manual de named(8) describe qu=C3=A9 tipo de archivo usar para una situaci=C3=B3n dada (ve= a la secci=C3=B3n Perfil de Seguridad de SEL= inux para BIND de Red Hat section). La p=C3=A1gina man de named_selinux(8) describe que, por defecto, named no = puede escribir a archivos de zona maestros y que, para permitir ese acceso,= el Booleano named_write_master_zones= debe ser puesto en 1.
La informaci=C3=B3n en las p=C3=A1ginas del manual le ayudan a configur= ar los tipos de archivos correctos y los Booleanos, ayud=C3=A1ndolo a preve= nir las negaciones de acceso por parte de SELinux.

7.3.4. Dominios Permisivos

Cuando SELinux se ejecuta en modo permisivo, SELinux no niega el acceso= , sino que las negaciones para las acciones se guardan como si fuera que co= rre en modo obediente. Previamente, no era posible hacer permisivo un =C3= =BAnico dominio (recuerde: los procesos corren en dominios). En ciertas sit= uaciones, esto llev=C3=B3 a hacer el sistema permisivo para poder corregir = los problemas.
Fedora 11 introduce los dominios permisivos, donde un administrador pue= de configurar un =C3=BAnico proceso (dominio) para que corra permisivo, en = vez de hacer todo el sistema permisivo. Los chequeos de SELinux se realizan= igualmente para dominios permisivos; sin embargo, el kernel permite el acc= eso e informa la negaci=C3=B3n AVC para situaciones donde SELinux hubiera n= egado el acceso. Los dominios permisivos est=C3=A1n tambi=C3=A9n disponible= s en Fedora 9 (con las =C3=BAltimas actualizaciones aplicadas).
En el Linux para Empresas de Red Hat 4 y 5, los Booleanos dominio_dis= able_trans est=C3=A1n disponibles para prevenir que una aplicaci=C3= =B3n transicione a un dominio confinado, y por lo tanto, el proceso se ejec= ute en un dominio no confinado, tal como ini= trc_t. Poniendo en 1 tales booleanos pueden causar problemas serios.= Por ejemplo, si el Booleano httpd_disable_t= rans se pone en 1:
  • httpd corre en el dominio no confin= ado initrc_t. Los archivos creados po= r los procesos en el dominio initrc_t= puede no tener aplicadas las mismas reglas de etiquetados como los archivo= s creados por el proceso corriendo en el dominio httpd_t, permitiendo que los procesos puedan potencialmente cre= ar archivos mal etiquetados. Esto causa problemas m=C3=A1s adelante.
  • dominios confinados que pueden comunicarse con httpd_t no pueden comunicarse con initrc_t, posiblemente causan fallas adicionales.
Los Booleanos = domain_disable_trans fueron eliminados de Fedora 7= , y no se pusieron reemplazos. Los dominios permisivos pueden resolver esos= problemas: se aplican las reglas de transici=C3=B3n y los archivos se crea= n con las etiquetas correctas.
Los dominios permisivos se pueden usar para:
  • hacer que un =C3=BAnico proceso (dominio) corra permisivo para soluci= onar alguna cuesti=C3=B3n, en vez de poner todo el sistema en riesgo hacien= do permisivo a todo el sistema.
  • creaci=C3=B3n de pol=C3=ADticas para nuevas aplicaciones. Previamente= , era recomendado crear una pol=C3=ADtica m=C3=ADnima, y luego poner la m= =C3=A1quina completa en modo permisivo, para que la aplicaci=C3=B3n pudiera= funcionar, pero las negaciones de SELinux eran igualmente grabadas. audit2allow podr=C3=ADa usarse luego para ayudar a= escribir la pol=C3=ADtica. Esto pone todo el sistema en riesgo. Con domini= os permisivos, s=C3=B3lo el dominio en la nueva pol=C3=ADtica puede marcars= e como permisivo, sin poner en riesgo todo el sistema.

7.3.4.1. Creando un Dom= inio Permisivo

Para hacer un dominio permisivo, ejecute el comando semanage permissive -a dominio= , donde dominio es = el dominio que quiere hacer permisivo. Por ejemplo, ejecute el siguiente co= mando como usuario root de Linux para hacer permisivo el dominio httpd_t (el dominio en el que corre el Servidor= HTTP Apache):
/usr/sbin/semanage permissive -a httpd_t
Para ver una lista de los dominios que hizo permisivos, corra el coman= do semodule -l | grep permissive como usuari= o root de Linux. Por ejemplo:
# /usr/sbin/semodule -l | grep permissive
permissive_httpd_t      1.0
Si ya no quiere que un dominio sea permisivo, corra el comando semanage permissive -d dom= inio como usuario root de Linux. Por ejemplo:
/usr/sbin/semanage permissive -d httpd_t

7.3.4.2. Negaciones para Domin= ios Permisivos

El mensaje SYSCALL es diferente = para dominios permisivos. El siguiente es un ejemplo de una negaci=C3=B3n d= e AVC (y la llamada a sistema asociada) desde el Servidor HTTP Apache:
type=3DAVC msg=3Daudit(1226882736.442:86): =
avc:  denied  { getattr } for  pid=3D2427 comm=3D"httpd" path=3D"/var/www/h=
tml/archivo1" dev=3Ddm-0 ino=3D284133 scontext=3Dunconfined_u:system_r:http=
d_t:s0 tcontext=3Dunconfined_u:object_r:samba_share_t:s0 tclass=3Dfile
        =

type=3DSYSCALL msg=3Daudit(1226882736.442:86): arch=3D40000003 syscall=3D19=
6 success=3Dno exit=3D-13 a0=3Db9a1e198 a1=3Dbfc2921c a2=3D54dff4 a3=3D2008=
171 items=3D0 ppid=3D2425 pid=3D2427 auid=3D502 uid=3D48 gid=3D48 euid=3D48=
 suid=3D48 fsuid=3D48 egid=3D48 sgid=3D48 fsgid=3D48 tty=3D(none) ses=3D4 c=
omm=3D"httpd" exe=3D"/usr/sbin/httpd" subj=3Dunconfined_u:system_r:httpd_t:=
s0 key=3D(null)
Por defecto, el dominio httpd_t = es no permisivo, y como tal, la acci=C3=B3n es negada, y el mensaje SYSCALL contiene success=3Dno. El siguiente es un ejemplo de negaci=C3=B3n AVC pa= ra la misma situaci=C3=B3n, excepto que el comando = semanage permissive -a httpd_t se ejecut=C3=B3 para hacer el dominio= httpd_t permisivo:
type=3DAVC msg=3Daudit(1226882925.714:136):=
 avc:  denied  { read } for  pid=3D2512 comm=3D"httpd" name=3D"archivo1" de=
v=3Ddm-0 ino=3D284133 scontext=3Dunconfined_u:system_r:httpd_t:s0 tcontext=
=3Dunconfined_u:object_r:samba_share_t:s0 tclass=3Dfile
        =

type=3DSYSCALL msg=3Daudit(1226882925.714:136): arch=3D40000003 syscall=3D5=
 success=3Dyes exit=3D11 a0=3Db962a1e8 a1=3D8000 a2=3D0 a3=3D8000 items=3D0=
 ppid=3D2511 pid=3D2512 auid=3D502 uid=3D48 gid=3D48 euid=3D48 suid=3D48 fs=
uid=3D48 egid=3D48 sgid=3D48 fsgid=3D48 tty=3D(none) ses=3D4 comm=3D"httpd"=
 exe=3D"/usr/sbin/httpd" subj=3Dunconfined_u:system_r:httpd_t:s0 key=3D(nul=
l)
En este caso, aunque la negaci=C3=B3n AVC fue grabada, el acceso no fu= e negado, como se muestra en el mensaje SYSC= ALL success=3Dyes.
Vaya al blog de Dan Walsh "Dominios Permisivos" para m=C3=A1s informaci=C3=B3n sobre d= ominios permisivos.

7.3.5. B=C3=BAsqueda y R= evisi=C3=B3n de Negaciones

Esta secci=C3=B3n asume que los paquetes setrou= bleshoot, setroubleshoot-server, y audit est=C3=A1n instalados, y que los demonio= s auditd, rsys= logd y setroubleshootd est=C3=A1n = ejecut=C3=A1ndose. Vaya a Secci=C3=B3n=C2=A05.2, =E2=80=9CQu=C3=A9 Archivo Log se= usa=E2=80=9D para informaci=C3=B3n sobre c=C3=B3mo iniciar estos demon= ios. Hay disponibles un n=C3=BAmero de herramientas para ver las negaciones= de SELinux, tales como ausearch, aureport y sealert.
ausearch El paquete audit provee ausearch. De la p=C3=A1gina de manual de ausearch(8): "ausearch es una herramienta que puede consultar lo= s registros del demonio audit basados en distintos criterios de b=C3=BAsque= da"[16]= . La herramienta ausearch accede a /var/log/audit/audit.log, y como tal, sebe ser= ejecutada como usuario root de Linux:
BuscandoComando
todas las negaciones/sbin/ausearch -m avc
negaciones de hoy= /sbin/ausearch -m avc -ts today
negaciones desde los =C3=BAltimos = 10 minutos/sbin/ausearch -m = avc -ts recent
Para buscar negaciones de SELinux para un servicio particular, use la o= pci=C3=B3n -c nombre= -de-comando, donde nombr= e-de-comando "es el nombre del ejecutable"[17], por ejemplo, httpd para el Servidor HTTP Apache, y smbd para Samba:
/sbin/ausearch -m avc -c httpd
/sbin/ausearch -m avc -c smbd
Vaya a la p=C3=A1gina de manual de ausearch(8) para m=C3=A1s opciones de = ausearch.
aureport El paquete audit provee aureport. De la p=C3=A1gina de manual de aureport(8): "aureport es una herramienta que produce informes r= esumen de los registros de auditor=C3=ADa del sistema"[18]. La herramienta <= code class=3D"command">aureport accede a /v= ar/log/audit/audit.log, y como tal, se debe ejecutar como usuario ro= ot de Linux. Para ver una lista de las negaciones de SElinux y cu=C3=A1n a = menudo ocurren, ejecute el comando aureport -a. El siguiente es un ejemplo de la salida en donde se incluyen dos negaci= ones:
# /sbin/aureport -a

AVC Report
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D
# date time comm subj syscall class permission obj event
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D
1. 05/01/2009 21:41:39 httpd unconfined_u:system_r:httpd_t:s0 195 file geta=
ttr system_u:object_r:samba_share_t:s0 denied 2
2. 05/03/2009 22:00:25 vsftpd unconfined_u:system_r:ftpd_t:s0 5 file read u=
nconfined_u:object_r:cifs_t:s0 denied 4
Vaya a la p=C3=A1gina de manual de aureport(8) para m=C3=A1s opciones de = aureport.
sealert
El paquete setroubleshoot-server provee= sealert, que lee los mensajes de negaci=C3= =B3n traducidos por setroubleshoot-server. A= las negaciones se le asignan IDs, como se ve en /= var/log/messages. El siguiente es un ejemplo de negaci=C3=B3n en messages:
setroubleshoot: SELinux esta previniendo ac=
erca de la intenci=C3=B3n de httpd (httpd_t) "getattr" to /var/www/html/arc=
hivo1 (samba_share_t). Para mensajes SELinux completos, ejecute sealert -l =
84e0b04d-d0ad-4347-8317-22e74f6cd020
En este ejemplo, el ID de negaci=C3=B3n es 84e0b04d-d0ad-4347-8317-22e74f6cd020. La opci=C3=B3n -l toma un ID como argumento. Ejecutando el comando sealert -l 84e0b04d-d0ad-4347-8317-22e74f6cd020 = le presenta un an=C3=A1lisis detallado de por qu=C3=A9 SELinux neg=C3=B3 el= acceso, y una posible soluci=C3=B3n para permitir el acceso.
Si est=C3=A1 corriendo el Sistema de Ventanas X, tenga los paquetes setroubleshoot y setrou= bleshoot-server instalados, y los demonios setroubleshootd y auditd ejecut= =C3=A1ndose, una estrella amarilla y una advertencia se muestran cuando un = acceso es negado por SELinux. Con clic sobre la estrella se lanza sealert modo gr=C3=A1fico y se muestra la negaci=C3= =B3n como HTML:
=
  • Ejecute el comando sealert -b para lan= zar la GUI de sealert.
  • Ejecute el comando sealert -l \* para = ver un an=C3=A1lisis detallado de todas las negaciones.
  • Como usuario root de Linux, ejecute el comando sealert -a /var/log/audit/audit.log -H > audit.html para crear = una versi=C3=B3n HTML del an=C3=A1lisis de sealert<= /code>, como si se viera en la GUI de sealert.
Vaya a la p=C3=A1gina man de sealert(8) para m=C3=A1s opciones de sealert.

7.3.6. Mensajes Crudos de Auditor=C3=ADa

<= /div>
Los mensajes crudos de auditor=C3=ADa se guardan en /var/log/audit/audit.log. El siguiente es un ejemplo de negaci= =C3=B3n AVC (y su llamada a sistema asociado) que ocurr=C3=ADo cuando el Se= rvidor HTTP Apache (corriendo en el dominio = httpd_t) intent=C3=B3 acceder el /var/www/h= tml/archivo1 (etiquetado con el tipo = samba_share_t):
type=3DAVC msg=3Daudit(1226874073.147:96): a=
vc:  denied  { getattr } for  pid=3D2465 comm=3D"httpd" path=3D"/var/www/ht=
ml/archivo1" dev=3Ddm-0 ino=3D284133 scontext=3Dunconfined_u:system_r:httpd=
_t:s0 tcontext=3Dunconfined_u:object_r:samba_share_t:s0 tclass=3Dfile

type=3DSYSCALL msg=3Daudit(1226874073.147:96): arch=3D40000003 syscall=3D19=
6 success=3Dno exit=3D-13 a0=3Db98df198 a1=3Dbfec85dc a2=3D54dff4 a3=3D2008=
171 items=3D0 ppid=3D2463 pid=3D2465 auid=3D502 uid=3D48 gid=3D48 euid=3D48=
 suid=3D48 fsuid=3D48 egid=3D48 sgid=3D48 fsgid=3D48 tty=3D(none) ses=3D6 c=
omm=3D"httpd" exe=3D"/usr/sbin/httpd" subj=3Dunconfined_u:system_r:httpd_t:=
s0 key=3D(null)
{ getattr }
El item entre llaves indica el permiso que fue negado. getattr indica el proceso fuente que intent=C3= =B3 leer la informaci=C3=B3n de estado del archivo destino. Esto ocurre ant= es de leer archivos. Esta acci=C3=B3n es negada dado que el archivo est=C3= =A1 siendo accedido con la etiqueta equivocada. Los permisos vistos com=C3= =BAnmente incluyen a getattr, read y write<= /code>.
comm=3D"httpd"
El ejecutable que lanz=C3=B3 el proceso. La direcci=C3=B3n completa = del ejecutable se encuentra en la secci=C3=B3n exe=3D del mensaje de la llamada al sistema (SYSCALL), que es en este caso exe=3D"/usr/sbin/httpd".
path=3D"/var/www/html/archivo1"
La direcci=C3=B3n al objeto (destino) al que quiere acceder el proce= so.
scontext=3D"unconfined_u:system_r:httpd_t:s0"
El contexto de SELinux del proceso que intent=C3=B3 la acci=C3=B3n d= enegada. En este caso, es el contexto SELinux del Servidor HTTP Apache, que= core en el dominio httpd_t.
tcontext=3D"unconfined_u:object_r:samba_share_t:s0"
<= dd>
El contexto de SELinux del objeto (destino) al que intent=C3=B3 acce= der el proceso. En este caso, es el contexto SELinux del archivo1. Nota: el tipo samba_= share_t no es accesible para procesos que corren el dominio httpd_t.
En ciertas cituaci=C3=B3nes, el tcont= ext puede coincidir con scontext, por ejemplo, cuando un proceso intenta ejecutar un servicio del sistema= que cambiar=C3=A1 las caracter=C3=ADsticas de ese proceso en ejecuci=C3=B3= n, tales como el ID del usuario. Tambi=C3=A9n el tcontext puede coincidir con el = scontext cuando un proceso intenta usar m=C3=A1s recursos (como la m= emoria) m=C3=A1s all=C3=A1 de los l=C3=ADmites normales permitidos, lo que = resulta en un chequeo de seguridad para ver si el proceso tiene permitido r= omper esos l=C3=ADmites.
Desde el mensaje de llamado al sistema (= SYSCALL) nos interesan dos =C3=ADtems:
  • success=3Dno: indica si la negaci=C3=B3n (AVC) fue aplicada o = no. success=3Dno indica que la llamad= a al sistema no fue exitosa(SELinux neg=C3=B3 el acceso). success=3Dyes indica que la llamada al sistema fue exi= tosa - esto se puede ver en dominios permisivos o en dominios no confinados= , tales como initrc_t y kernel_t.
  • exe=3D"/usr/sbin/httpd": la direcci=C3=B3n completa al ejecuta= ble que inici=C3=B3 el proceso, que es en este caso exe=3D"/usr/sbin/httpd".
Un tipo de archivo incorrecto es una causa com=C3=BAn de que SELinux ni= egue el acceso. Para comenzar a resolver el problema, compare el contexto f= uente (scontext) con el contexto dest= ino (tcontext). =C2=BFDeber=C3=ADa el= proceso (scontext) acceder a un obje= to (tcontext)? Por ejemplo, el Servid= or HTTP Apache (httpd_t) s=C3=B3lo de= ber=C3=ADa acceder tipos especificados en la p=C3=A1gina man httpd_selinux(8)= , tales como httpd_sys_content_t, public_content_t, y as=C3=AD sucesivamen= te, a menos que se configure de otra forma.

7.3.7. Mensajes sealert

Las negaciones tienen IDs asignados, como se ve en /var/log/messages. El siguiente es un ejemplo de negaci=C3=B3n = AVC (guardado en messages) que ocurri=C3=B3= cuando el Servidor HTTP Apache (corriendo en el dominio httpd_t domain) intent=C3=B3 acceder el /var/www/html/archivo1 (etiquetado con el tipo samba_share_t):
hostname setroubleshoot: SELinux est=C3=A1 previniendo acerca de la intenci=
=C3=B3n de httpd (httpd_t) de "getattr" sobre /var/www/html/archivo1 (samba=
_share_t). Para los mensajes completos de SELinux, ejecute sealert -l 84e0b=
04d-d0ad-4347-8317-22e74f6cd020
Como se sugiri=C3=B3, ejecute el comando sealer= t -l 84e0b04d-d0ad-4347-8317-22e74f6cd020 para ver el mensaje comple= to. Este comando s=C3=B3lo funciona en la m=C3=A1quina local, y presenta la= misma informaci=C3=B3n que la interfase gr=C3=A1fica de sealert:
$ sealert -l 84e0b04d-d0ad-4347-8317-22e74f6=
cd020

Summary:

SELinux is preventing httpd (httpd_t) "getattr" to /var/www/html/archivo
(samba_share_t).

Detailed Description:

SELinux denied access to /var/www/html/archivo1 requested by httpd.
/var/www/html/file1 has a context used for sharing by different program. If=
 you
would like to share /var/www/html/file1 from httpd also, you need to change=
 its
file context to public_content_t. If you did not intend to this access, this
could signal a intrusion attempt.

Allowing Access:

You can alter the file context by executing chcon -t public_content_t
'/var/www/html/file1'

Fix Command:

chcon -t public_content_t '/var/www/html/archivo1'

Additional Information:

Source Context                unconfined_u:system_r:httpd_t:s0
Target Context                unconfined_u:object_r:samba_share_t:s0
Target Objects                /var/www/html/archivo1 [ file ]
Source                        httpd
Source Path                   /usr/sbin/httpd
Port                          <Unknown>
Host                          hostname
Source RPM Packages           httpd-2.2.10-2
Target RPM Packages
Policy RPM                    selinux-policy-3.5.13-11.fc11
Selinux Enabled               True
Policy Type                   targeted
MLS Enabled                   True
Enforcing Mode                Enforcing
Plugin Name                   public_content
Host Name                     hostname
Platform                      Linux hostnam=
e 2.6.27.4-68.fc11.i686 #1 SMP Thu Oct
30 00:49:42 EDT 2008 i686 i686
Alert Count                   4
First Seen                    Wed Nov  5 18:53:05 2008
Last Seen                     Wed Nov  5 01:22:58 2008
Local ID                      84e0b04d-d0ad-4347-8317-22e74f6cd020
Line Numbers

Raw Audit Messages

node=3Dhostname type=3DAVC msg=
=3Daudit(1225812178.788:101): avc:  denied  { getattr } for  pid=3D2441 com=
m=3D"httpd" path=3D"/var/www/html/archivo1" dev=3Ddm-0 ino=3D284916 scontex=
t=3Dunconfined_u:system_r:httpd_t:s0 tcontext=3Dunconfined_u:object_r:samba=
_share_t:s0 tclass=3Dfile

node=3Dhostname type=3DSYSCALL =
msg=3Daudit(1225812178.788:101): arch=3D40000003 syscall=3D196 success=3Dno=
 exit=3D-13 a0=3Db8e97188 a1=3Dbf87aaac a2=3D54dff4 a3=3D2008171 items=3D0 =
ppid=3D2439 pid=3D2441 auid=3D502 uid=3D48 gid=3D48 euid=3D48 suid=3D48 fsu=
id=3D48 egid=3D48 sgid=3D48 fsgid=3D48 tty=3D(none) ses=3D3 comm=3D"httpd" =
exe=3D"/usr/sbin/httpd" subj=3Dunconfined_u:system_r:httpd_t:s0 key=3D(null)
Resumen
Un breve resumen de la acci=C3=B3n negada. Esto es lo mismo que la n= egaci=C3=B3n en /var/log/messages. En este = ejemplo, al proceso httpd se le neg=C3=B3= el acceso al (archivo1), que est=C3=A1 eti= quetado con el tipo samba_share_t.
Descripci=C3=B3n Detallada=
Una descripci=C3=B3n m=C3=A1s detallada. En este ejemplo archivo1 est=C3=A1 etiquetado con el tipo samba_share_t. Este tipo se usa para archivos y = directorios que quiere exportar v=C3=ADa Samba. La descripci=C3=B3n sugiere= cambiar el tipo a un tipo que pueda ser accedido por Samba y por el Servid= or HTTP Apache, si tal acceso es deseado.
Permitiendo Acceso
Una sugerencia sobre c=C3=B3mo permitir el acceso. Esto puede hacers= e reetiquetando archivos, poniendo en 1 un Booleano, o creando un m=C3=B3du= lo de pol=C3=ADtica local. En este caso, la sugerencia es etiquetar el arch= ivo con un tipo accesible por el Servidor HTTP Apache y por Samba.
Comando para Corregir
=
Un comando sugerido para permitir el acceso y resolver la negaci=C3= =B3n. En este ejemplo, se d=C3=A1 el comando para cambiar el tipo del archivo1 a public= _content_t, que es accesible por el Servidor HTTP Apache y por Samba.
Informaci=C3=B3n Adicional=
Informaci=C3=B3n que es =C3=BAtil en los informes de errores, como e= l nombre de paquete de pol=C3=ADtica y la versi=C3=B3n (selinux-policy-3.5.13-11.fc11), pero que no puede ser de= ayuda para resolver por qu=C3=A9 ocurri=C3=B3 la negaci=C3=B3n.
Mensajes Crudos de Auditor=C3=ADa=
Los mensajes crudos de auditor=C3=ADa de /v= ar/log/audit/audit.log que son asociados con la negaci=C3=B3n. Vaya = a Secci= =C3=B3n=C2=A07.3.6, =E2=80=9CMensajes Crudos de Auditor=C3=ADa=E2=80=9D= para informaci=C3=B3n acerca de cada =C3=ADtem en la negaci=C3=B3n AVC.

7.3.8. Permitiendo= el Acceso: audit2allow

No use el ejemplo en esta secci=C3=B3n en producci=C3=B3n. Se usa s=C3= =B3lo para mostrar el uso de audit2allow.
De la p=C3=A1gina de manual de audit2allow(1): "a= udit2allow - genera reglas para habilitar de la pol=C3=ADtica de SEL= inux a partir de operaciones negadas"[19]. Despu=C3=A9s de analizar las nega= ciones como en Secci=C3=B3= n=C2=A07.3.7, =E2=80=9CMensajes sealert=E2=80=9D, y si ning=C3=BAn camb= io de etiqueta o de Booleano permiti=C3=B3 el acceso, use audit2allow para crear un m=C3=B3dulo de pol=C3=ADtica local.= Despu=C3=A9s de que el acceso es negado por SELinux, ejecutando el comando= audit2allow presenta reglas de Obligaci=C3= =B3n de Tipo que permitir=C3=ADan el acceso previamente negado.
El siguiente ejemplo muestra el uso de audit2al= low para crear un m=C3=B3dulo de pol=C3=ADtica:
  1. Una negaci=C3=B3n y la llamada al sistema asociado se graban en /var/log/audit/audit.log:
    type=3DAVC msg=3Daudit(1226270358.848:238)=
    : avc:  denied  { write } for  pid=3D13349 comm=3D"certwatch" name=3D"cache=
    " dev=3Ddm-0 ino=3D218171 scontext=3Dsystem_u:system_r:certwatch_t:s0 tcont=
    ext=3Dsystem_u:object_r:var_t:s0 tclass=3Ddir
    
    type=3DSYSCALL msg=3Daudit(1226270358.848:238): arch=3D40000003 syscall=3D3=
    9 success=3Dno exit=3D-13 a0=3D39a2bf a1=3D3ff a2=3D3a0354 a3=3D94703c8 ite=
    ms=3D0 ppid=3D13344 pid=3D13349 auid=3D4294967295 uid=3D0 gid=3D0 euid=3D0 =
    suid=3D0 fsuid=3D0 egid=3D0 sgid=3D0 fsgid=3D0 tty=3D(none) ses=3D429496729=
    5 comm=3D"certwatch" exe=3D"/usr/bin/certwatch" subj=3Dsystem_u:system_r:ce=
    rtwatch_t:s0 key=3D(null)
    
    En este ejemplo, a certwatch (comm=3D"certwatch") se l= e neg=C3=B3 el acceso de escritura ({ write = }) a un direcotiro etiquetado con el tipo var_t (tcontext=3Dsystem_u:objec= t_r:var_t:s0). Analice la negaci=C3=B3n como en Secci=C3=B3n=C2=A07.3.7, =E2=80=9CMensajes sea= lert=E2=80=9D. Si no hay cambios de etiquetas o Boleanos que permitan e= l acceso, use audit2allow para crear un m=C3= =B3dulo de pol=C3=ADtica local.
  2. Con una negaci=C3=B3n grabada, tal como la negaci=C3=B3n de certwatch en el paso 1, corra el comando audit2allow -w -a para producir una descripci=C3= =B3n legible al humano sobre por qu=C3=A9 el acceso fue negado. La opci=C3= =B3n -a hace que se lean todos los registros = de autidor=C3=ADa. La opci=C3=B3n -w produce = una descripci=C3=B3n legible al humano. La herramienta audit2allow accede a /var/log/audit/aud= it.log, y como tal, debe ser ejecutada como usuario root de Linux:
    # audit2allow -w -a
    type=3DAVC msg=3Daudit(1226270358.848:238): avc:  denied  { write } for  pi=
    d=3D13349 comm=3D"certwatch" name=3D"cache" dev=3Ddm-0 ino=3D218171 scontex=
    t=3Dsystem_u:system_r:certwatch_t:s0 tcontext=3Dsystem_u:object_r:var_t:s0 =
    tclass=3Ddir
            Was caused by:
                    Missing type enforcement (TE) allow rule.
    
            You can use audit2allow to generate a loadable module to allow this=
     access.
    
    Como se muestra, el acceso fue negado debido a que falta una regla de= Obligaci=C3=B3n de Tipo.
  3. Ejecute el comando audit2allow -a para= ver la regla de Obligaci=C3=B3n de Tipo que permite el acceso negado:
    # audit2allow -a
    
    
    #=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D certwatch_t =3D=3D=3D=3D=3D=3D=3D=
    =3D=3D=3D=3D=3D=3D=3D
    allow certwatch_t var_t:dir write;
    

    Importante

    La falta de reglas de Ejecuci=C3=B3n de Tipos son usualmente causado= s por errores en la pol=C3=ADtica de SELinux, y deben ser informadas en el = Bugzilla de Red Hat. Para Fedo= ra, crear informes sobre el producto Fedora<= /code>, y seleccione el componente selinux-p= olicy. Incluya la salida de los comandos aud= it2allow -w -a y audit2allow -a en el= informe del error.
  4. Para usar la regla mostrada por audit2allow -= a, ejecute el comando audit2allow -a -M mycertwatch como usuario roo= t de Linux. La opci=C3=B3n -M crea un archivo= de Obligaci=C3=B3n de Tipo (.te) con el no= mbre especificado en -M, en su directorio act= ual de trabajo:
    # audit2allow -a -M mycertwatch
    
    ******************** IMPORTANT ***********************
    To make this policy package active, execute:
    
    semodule -i mycertwatch.pp
    
    # ls
    mycertwatch.pp  mycertwatch.te
    
    Tambi=C3=A9n, audit2allow compila la r= egla de Obediencia de Tipo en un paquete de pol=C3=ADtica (.pp). Para instalar el m=C3=B3dulo, ejecute el comando /usr/sbin/semodule -i m= ycertwatch.pp como usuario root de Linux.

    Importante

    Los m=C3=B3dulos creados con audit2allow pueden permitir m=C3=A1s acceso que el requerido. Se recomienda que la = pol=C3=ADtica creada con audit2allow sea env= iada a una lista de SELinux, tal como fedora-selinux-list, para su revisi= =C3=B3n. Si cree que hay un error en la pol=C3=ADtica, informe un error en = Bugzilla de Red Hat.
Si tiene m=C3=BAltiples negaciones de m=C3=BAltiples procesos, pero sol= o quiere crear una pol=C3=ADtica personalizada para un proceso =C3=BAnico, = use el comando grep para una b=C3=BAsqueda m= =C3=A1s refinada de audit2allow. El siguient= e ejemplo muestra el uso de grep para s=C3= =B3lo enviar negaciones de certwatch a audit2allow:
# grep certwatch /var/log/audit/audit.log | =
audit2allow -M mycertwatch2
******************** IMPORTANT ***********************
To make this policy package active, execute:

# /usr/sbin/semodule -i mycertwatch2.pp
Vaya a la entrada blog "Uso de audit2allow para construir m=C3=B3dulos de pol=C3=ADticas. R= evisado." de Dan Walsh para informaci=C3=B3n adicional sobre el uso de = audit2allow para construir m=C3=B3dulos de p= ol=C3=ADticas.


[14] Los archivos en /etc/selinux/targeted/context= s/files/ definen los contextos de archivos y directorios. Los archiv= os en este directorio son le=C3=ADdos por restoreco= n y setfiles para restaurar archivos = y directorios a sus contextos predeterminados.

[15] El comando semanage port -a agrega una = entrada al archivo /etc/selinux/targeted/modules/a= ctive/ports.local. Nota: por defecto, este archivo s=C3=B3lo puede s= er visto por el usuario root de Linux.

[16] De la p=C3=A1gina man de ausearch(8), como se incluy=C3=B3 en el paquet= e audit en Fedora 11.

[17] De la p=C3=A1gina de manual de ausearch(8), como se incluy=C3=B3 en el p= aquete audit en Fedora 11.

[18] de la p=C3=A1gina de manual de aureport(8) como se incluy=C3=B3 en el p= aquete audit en Fedora 11.

[19] De la p=C3=A1gina man de audit2allow(1), tal como fue incluida en el paq= uete policycoreutils en Fedora 11.

Cap=C3=ADtulo 8. Informaci=C3=B3n Adicional

<= /div>
Los investigadores del laboratorio de Inves= tigaci=C3=B3n en Seguridad de la Informaci=C3=B3n Nacional (NIARL) de la NS= A dise=C3=B1aron e implementaron controles de acceso obligatorios flexibles= en los susbsistemas principales del kernel de Linux e implementaron nuevos= componentes del sistema operativo provistos por la arquitectura Flask, lla= mado servidor de seguridad y cach=C3=A9 vector de acceso. Los investigadore= s de la NSA redise=C3=B1aron el SELinux basado en LSM para inclu=C3=ADrlo e= n Linux 2.6. NSA tambi=C3=A9n lider=C3=B3 el desarrollo de controles simila= res para el Sistema de Ventanas X (XACE/XSELinux) y para Xen (XSM/Flask).
Tecnolog=C3=ADa de Tresys
Tresys Technology son los desarr= olladores de:
Noti= cias de SELinux
Wiki del Proy= ecto SELinux
Linux par= a Empresas de Red Hat
Fedora
IRC
En Freenode:
  • #selinux
  • #fedora-selinux

Revision History

<= div class=3D"para">
His= torial de revisiones
Revisi=C3=B3n 1.3<= /td>Tue May 12 2009Scott = Radvan
<= td>Revisi=C3=B3n para Fedora 11
Revisi=C3=B3n 1.2Mon Jan 19 2009Murray McAllister
<= td>Actualizaci=C3=B3n de los enlaces a sitios web de la NSA
Revisi=C3=B3n 1.1Sat Dec 6 2008Murray McAllister
<= td>Resoluci=C3=B3n del Bugzilla de Red Hat #472986, "httpd no escribe en /etc/httpd/l= ogs/"
Se agreg=C3=B3 la secci=C3=B3n nueva, "6.6. Bool= eanos para que los Usuarios Ejecuten Aplicaciones"
Revisio= nes menores del texto
Revisi=C3=B3n 1.0Tue Nov 25 2008Murray McAllister
<= td>El contenido inicial se guarda en http://docs.fedoraproject.org/
--===============0340056048976850889==--