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 ---
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html
PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html
xmlns="http://www.w3.org/1999/xhtml"><head><title&g...
con Seguridad Mejorada</title><link rel="stylesheet"
href="./Common_Content/css/default.css" type="text/css"/><meta
name="generator" content="publican"/><meta
name="package" content=""/><meta name="description"
content="Este libro es acerca de la administración y uso del Linux de Seguridad
Mejorada."/></head><body class=""><div
class="book" lang="es-ES"><div
class="titlepage"><div><div
class="producttitle"><span
class="productname">Fedora</span> <span
class="productnumber">11</span></div><div><h1
id="d0e1" class="title">Linux con Seguridad
Mejorada</h1></div><div><h2 class="subtitle">Guía del
Usuario</h2></div><p class="edition">Edición
1.3</p><div><h3 class="corpauthor">
<span class="inlinemediaobject"><object
data="Common_Content/images/title_logo.svg" type="image/svg+xml">
Logo</object></span>
</h3></div><div><div class="authorgroup"><div
class="author"><h3 class="author"><span
class="firstname">Murray</span> <span
class="surname">McAllister</span></h3><div
class="affiliation"><span class="orgname">Red
Hat</span> <span class="orgdiv">Ingeniería de Servicios de
Contenidos</span></div><code class="email"><a
class="email"
href="mailto:mmcallis@redhat.com">mmcallis@redhat.com</a></code></div><div
class="author"><h3 class="author"><span
class="firstname">Daniel</span> <span
class="surname">Walsh</span></h3><div
class="affiliation"><span class="orgname">Red
Hat</span> <span class="orgdiv">Ingeniería de
Seguridad</span></div><code class="email"><a
class="email"
href="mailto:dwalsh@redhat.com">dwalsh@redhat.com</a></code></div><div
class="author"><h3 class="author"><span
class="firstname">Dominick</span> <span
class="surname">Grift</span></h3><span
class="contrib">Editor Técnico para la Introducción, Contextos de SELinux,
Política Destinada, Trabajando con SELinux,
Confinando Usuarios, y capítulos de Resolución de Problemas.</span> <div
class="affiliation"><span class="orgname"/> <span
class="orgdiv"/></div><code class="email"><a
class="email"
href="mailto:domg472@gmail.com">domg472@gmail.com</a></code></div><div
class="author"><h3 class="author"><span
class="firstname">Eric</span> <span
class="surname">Paris</span></h3><span
class="contrib">Editor Técnico para las secciones de Montaje de Sistemas de
Archivo y Mensajes de Auditoría Crudos..</span> <div
class="affiliation"><span class="orgname">Red
Hat</span> <span class="orgdiv">Ingeniería de
Seguridad</span></div><code class="email"><a
class="email"
href="mailto:eparis@parisplace.org">eparis@parisplace.org</a></code></div><div
class="author"><h3 class="author"><span
class="firstname">James</span> <span
class="surname">Morris</span></h3><span
class="contrib">Editor Técnico para los capítolos de Introducción y Política
Destinada.</span> <div class="affiliation"><span class=
"orgname">Red Hat</span> <span
class="orgdiv">Ingeniería de Seguridad</span></div><code
class="email"><a class="email"
href="mailto:jmorris@redhat.com">jmorris@redhat.com</a></code></div><div
class="author"><h3 class="author"><span
class="firstname">Scott</span> <span
class="surname">Radvan</span></h3><div
class="affiliation"><span class="orgname">Red
Hat</span> <span class="orgdiv">Ingeniería de Servicios de
Contenido</span></div><code class="email"><a
class="email"
href="mailto:sradvan@redhat.com">sradvan@redhat.com</a></code></div></div></div><div><p
class="copyright">Copyright © 2009 Red Hat,
Inc.</p></div><hr/><div><div id="d0e35"
class="legalnotice"><h1 class="legalnotice">aviso
legal</h1><div class="para">
Copyright <span class="trademark"/>© 2009 Red Hat, Inc. This material
may only be distributed subject to the terms and conditions set forth in the Open
Publication License, V1.0, (the latest version is presently available at <a
href="http://www.opencontent.org/openpub/">http://www.openco...>).
</div><div class="para">
Fedora and the Fedora Infinity Design logo are trademarks or registered trademarks of
Red Hat, Inc., in the U.S. and other countries.
</div><div class="para">
Red Hat and the Red Hat "Shadow Man" logo are registered trademarks of Red Hat
Inc. in the United States and other countries.
</div><div class="para">
All other trademarks and copyrights referred to are the property of their respective
owners.
</div><div class="para">
Documentation, as with software itself, may be subject to export control. Read about
Fedora Project export controls at <a
href="http://fedoraproject.org/wiki/Legal/Export">http://fed...;.
</div></div></div><div><div
class="abstract"><h6>Resumen</h6><div
class="para">Este libro es acerca de la administración y uso del <span
class="trademark">Linux</span>® de Seguridad
Mejorada.</div></div></div></div><hr/></div><div
class="toc"><dl><dt><span class="preface"><a
href="#pref-Security-Enhanced_Linux-Preface">Prefacio</a></span></dt><dd><dl><dt><span
class="section"><a href="#d0e158">1. Convenciones del
Documento</a></span></dt><dd><dl><dt><span
class="section"><a href="#d0e168">1.1. Convenciones
Tipográficas</a></span></dt><dt><span
class="section"><a href="#d0e384">1.2. Convenciones del
documento</a></span></dt><dt><span
class="section"><a href="#d0e403">1.3. Notas y
Advertencias</a></span></dt></dl></dd><dt><span
class="section"><a href="#d0e423">2. ¡Necesitamos sus
comentarios!</a></span></dt></dl></dd><dt><span
class="chapter"><a
href="#chap-Security-Enhanced_Linux-Trademark_Information">1. Información de
Marca Comercial</a></span></dt><dd><dl><dt><span c
lass="section"><a
href="#chap-Security-Enhanced_Linux-Trademark_Information-Source_Code">1.1.
Source Code</a></span></dt></dl></dd><dt><span
class="chapter"><a
href="#chap-Security-Enhanced_Linux-Introduction">2.
Introducción</a></span></dt><dd><dl><dt><span
class="section"><a
href="#sect-Security-Enhanced_Linux-Introduction-Benefits_of_running_SELinux">2.1.
Beneficios de usar SELinux</a></span></dt><dt><span
class="section"><a
href="#sect-Security-Enhanced_Linux-Introduction-Examples">2.2.
Ejemplos</a></span></dt><dt><span
class="section"><a
href="#sect-Security-Enhanced_Linux-Introduction-SELinux_Architecture">2.3.
Arquitectura de SELinux</a></span></dt><dt><span
class="section"><a
href="#sect-Security-Enhanced_Linux-Introduction-SELinux_on_Other_Operating_Systems">2.4.
SELinux en otros Sistemas
Operativos</a></span></dt></dl></dd><dt><span
class="chapter"><a
href="#chap-Security-Enhanced_Linux-SELinux_Contexts">3. Contextos de
SELinux</a></span></dt><dd><dl><dt><span cla
ss="section"><a
href="#sect-Security-Enhanced_Linux-SELinux_Contexts-Domain_Transitions">3.1.
Transiciones de Dominios</a></span></dt><dt><span
class="section"><a
href="#sect-Security-Enhanced_Linux-SELinux_Contexts-SELinux_Contexts_for_Processes">3.2.
Contextos de SELinux para los Procesos</a></span></dt><dt><span
class="section"><a
href="#sect-Security-Enhanced_Linux-SELinux_Contexts-SELinux_Contexts_for_Users">3.3.
Contextos de SELinux para los
Usuarios</a></span></dt></dl></dd><dt><span
class="chapter"><a
href="#chap-Security-Enhanced_Linux-Targeted_Policy">4. Política
Destinado</a></span></dt><dd><dl><dt><span
class="section"><a
href="#sect-Security-Enhanced_Linux-Targeted_Policy-Confined_Processes">4.1.
Procesos Confinados</a></span></dt><dt><span
class="section"><a
href="#sect-Security-Enhanced_Linux-Targeted_Policy-Unconfined_Processes">4.2.
Procesos no Confinados</a></span></dt><dt><span
class="section"><a
href="#sect-Security-Enhanced_Linux-Targeted_Policy-Confine
d_and_Unconfined_Users">4.3. Usuarios Confinados y no
Confinados</a></span></dt></dl></dd><dt><span
class="chapter"><a
href="#chap-Security-Enhanced_Linux-Working_with_SELinux">5. Trabajando con
SELinux</a></span></dt><dd><dl><dt><span
class="section"><a
href="#sect-Security-Enhanced_Linux-Working_with_SELinux-SELinux_Packages">5.1.
Paquetes de SELinux</a></span></dt><dt><span
class="section"><a
href="#sect-Security-Enhanced_Linux-Working_with_SELinux-Which_Log_File_is_Used">5.2.
Qué Archivo Log se usa</a></span></dt><dt><span
class="section"><a
href="#sect-Security-Enhanced_Linux-Working_with_SELinux-Main_Configuration_File">5.3.
Archivo de Configuración Principal</a></span></dt><dt><span
class="section"><a
href="#sect-Security-Enhanced_Linux-Working_with_SELinux-Enabling_and_Disabling_SELinux">5.4.
Habilitando y Deshabilitando
SELinux</a></span></dt><dd><dl><dt><span
class="section"><a
href="#sect-Security-Enhanced_Linux-Enabling_and_Disabling_SELinux-Enabling_SELinux">5
.4.1. Habilitando SELinux</a></span></dt><dt><span
class="section"><a
href="#sect-Security-Enhanced_Linux-Enabling_and_Disabling_SELinux-Disabling_SELinux">5.4.2.
Deshabilitando
SELinux</a></span></dt></dl></dd><dt><span
class="section"><a
href="#sect-Security-Enhanced_Linux-Working_with_SELinux-SELinux_Modes">5.5.
Modos de SELinux</a></span></dt><dt><span
class="section"><a
href="#sect-Security-Enhanced_Linux-Working_with_SELinux-Booleans">5.6.
Booleanos</a></span></dt><dd><dl><dt><span
class="section"><a
href="#sect-Security-Enhanced_Linux-Booleans-Listing_Booleans">5.6.1.
Listando los Booleanos</a></span></dt><dt><span
class="section"><a
href="#sect-Security-Enhanced_Linux-Booleans-Configuring_Booleans">5.6.2.
Configurando los Booleanos</a></span></dt><dt><span
class="section"><a
href="#sect-Security-Enhanced_Linux-Booleans-Booleans_for_NFS_and_CIFS">5.6.3.
Booleanos para NFS y
CIFS</a></span></dt></dl></dd><dt><span
class="section"><a href="#sect-Security-Enhanced_Linux-
Working_with_SELinux-SELinux_Contexts_Labeling_Files">5.7. Contextos de SELinux -
Etiquetado de
Archivos</a></span></dt><dd><dl><dt><span
class="section"><a
href="#sect-Security-Enhanced_Linux-SELinux_Contexts_Labeling_Files-Temporary_Changes_chcon">5.7.1.
Cambios Temporales: chcon</a></span></dt><dt><span
class="section"><a
href="#sect-Security-Enhanced_Linux-SELinux_Contexts_Labeling_Files-Persistent_Changes_semanage_fcontext">5.7.2.
Cambios Persistentes: semanage
fcontext</a></span></dt></dl></dd><dt><span
class="section"><a
href="#sect-Security-Enhanced_Linux-Working_with_SELinux-The_file_t_and_default_t_Types">5.8.
Los tipos file_t y default_t</a></span></dt><dt><span
class="section"><a
href="#sect-Security-Enhanced_Linux-Working_with_SELinux-Mounting_File_Systems">5.9.
Montaje de Sistemas de
Archivos</a></span></dt><dd><dl><dt><span
class="section"><a
href="#sect-Security-Enhanced_Linux-Mounting_File_Systems-Context_Mounts">5.9.1.
Montajes de Contexto</a></span></dt><d
t><span class="section"><a
href="#sect-Security-Enhanced_Linux-Mounting_File_Systems-Changing_the_Default_Context">5.9.2.
Cambio del Contexto Predeterminado</a></span></dt><dt><span
class="section"><a
href="#sect-Security-Enhanced_Linux-Mounting_File_Systems-Mounting_an_NFS_File_System">5.9.3.
Montando un Sistema de Archivos NFS</a></span></dt><dt><span
class="section"><a
href="#sect-Security-Enhanced_Linux-Mounting_File_Systems-Multiple_NFS_Mounts">5.9.4.
Montajes NFS Múltiples</a></span></dt><dt><span
class="section"><a
href="#sect-Security-Enhanced_Linux-Mounting_File_Systems-Making_Context_Mounts_Persistent">5.9.5.
Haciendo Persistente los Contextos de
Montajes</a></span></dt></dl></dd><dt><span
class="section"><a
href="#sect-Security-Enhanced_Linux-Working_with_SELinux-Maintaining_SELinux_Labels_">5.10.
Mantención de las Etiquetas de SELinux
</a></span></dt><dd><dl><dt><span
class="section"><a
href="#sect-Security-Enhanced_Linux-Maintaining_SELinux_Labels_-Copying_Fil
es_and_Directories">5.10.1. Copia de Directorios y
Archivos</a></span></dt><dt><span
class="section"><a
href="#sect-Security-Enhanced_Linux-Maintaining_SELinux_Labels_-Moving_Files_and_Directories">5.10.2.
Movimiento de Archivos y Directorios</a></span></dt><dt><span
class="section"><a
href="#sect-Security-Enhanced_Linux-Maintaining_SELinux_Labels_-Checking_the_Default_SELinux_Context">5.10.3.
Chequeando el Contexto SELinux
Predeterminado</a></span></dt><dt><span
class="section"><a
href="#sect-Security-Enhanced_Linux-Maintaining_SELinux_Labels_-Archiving_Files_with_tar">5.10.4.
Archivando archivos con tar</a></span></dt><dt><span
class="section"><a
href="#sect-Security-Enhanced_Linux-Maintaining_SELinux_Labels_-Archiving_Files_with_star">5.10.5.
Archivando archivos con
tar</a></span></dt></dl></dd></dl></dd><dt><span
class="chapter"><a
href="#chap-Security-Enhanced_Linux-Confining_Users">6. Confinando a los
Usuarios</a></span></dt><dd><dl><dt><span
class="section"><a href="#
sect-Security-Enhanced_Linux-Confining_Users-Linux_and_SELinux_User_Mappings">6.1.
Linux y los Mapeos de Usuarios de
SELinux</a></span></dt><dt><span
class="section"><a
href="#sect-Security-Enhanced_Linux-Confining_Users-Confining_New_Linux_Users_useradd">6.2.
Confinando Usuarios Nuevos de Linux:
useradd</a></span></dt><dt><span
class="section"><a
href="#sect-Security-Enhanced_Linux-Confining_Users-Confining_Existing_Linux_Users_semanage_login">6.3.
Confinando Usuarios Linux Existentes: semanage
login</a></span></dt><dt><span
class="section"><a
href="#sect-Security-Enhanced_Linux-Confining_Users-Changing_the_Default_Mapping">6.4.
Cambiando el Mapeo Predeterminado</a></span></dt><dt><span
class="section"><a
href="#sect-Security-Enhanced_Linux-Confining_Users-xguest_Kiosk_Mode">6.5.
xguest: Modo Kiosk</a></span></dt><dt><span
class="section"><a
href="#sect-Security-Enhanced_Linux-Confining_Users-Booleans_for_Users_Executing_Applications">6.6.
Booleanos para que los Usuarios Ej
ecuten
Aplicaciones</a></span></dt></dl></dd><dt><span
class="chapter"><a
href="#chap-Security-Enhanced_Linux-Troubleshooting">7. Solución a
Problemas</a></span></dt><dd><dl><dt><span
class="section"><a
href="#sect-Security-Enhanced_Linux-Troubleshooting-What_Happens_when_Access_is_Denied">7.1.
Qué pasa cuando el Acceso es Denegado</a></span></dt><dt><span
class="section"><a
href="#sect-Security-Enhanced_Linux-Troubleshooting-Top_Three_Causes_of_Problems">7.2.
Tres Principales Causas de
Problemas</a></span></dt><dd><dl><dt><span
class="section"><a
href="#sect-Security-Enhanced_Linux-Top_Three_Causes_of_Problems-Labeling_Problems">7.2.1.
Problemas de Etiquetados</a></span></dt><dt><span
class="section"><a
href="#sect-Security-Enhanced_Linux-Top_Three_Causes_of_Problems-How_are_Confined_Services_Running">7.2.2.
¿Cómo se Ejecutan los Servicios
Confinados?</a></span></dt><dt><span
class="section"><a
href="#sect-Security-Enhanced_Linux-Top_Three_Causes_of_Problems-Evolving_Ru
les_and_Broken_Applications">7.2.3. Evolucionando las Reglas y las Aplicaciones
Rotas</a></span></dt></dl></dd><dt><span
class="section"><a
href="#sect-Security-Enhanced_Linux-Troubleshooting-Fixing_Problems">7.3.
Corrección de
Problemas</a></span></dt><dd><dl><dt><span
class="section"><a
href="#sect-Security-Enhanced_Linux-Fixing_Problems-Linux_Permissions">7.3.1.
Permisos de Linux</a></span></dt><dt><span
class="section"><a
href="#sect-Security-Enhanced_Linux-Fixing_Problems-Possible_Causes_of_Silent_Denials">7.3.2.
Posibles Causas de las Negaciones
Silenciosas</a></span></dt><dt><span
class="section"><a
href="#sect-Security-Enhanced_Linux-Fixing_Problems-Manual_Pages_for_Services">7.3.3.
Páginas de Manual para Servicios</a></span></dt><dt><span
class="section"><a
href="#sect-Security-Enhanced_Linux-Fixing_Problems-Permissive_Domains">7.3.4.
Dominios Permisivos</a></span></dt><dt><span
class="section"><a
href="#sect-Security-Enhanced_Linux-Fixing_Problems-Searching_For_a
nd_Viewing_Denials">7.3.5. Búsqueda y Revisión de
Negaciones</a></span></dt><dt><span
class="section"><a
href="#sect-Security-Enhanced_Linux-Fixing_Problems-Raw_Audit_Messages">7.3.6.
Mensajes Crudos de Auditoría</a></span></dt><dt><span
class="section"><a
href="#sect-Security-Enhanced_Linux-Fixing_Problems-sealert_Messages">7.3.7.
Mensajes sealert</a></span></dt><dt><span
class="section"><a
href="#sect-Security-Enhanced_Linux-Fixing_Problems-Allowing_Access_audit2allow">7.3.8.
Permitiendo el Acceso:
audit2allow</a></span></dt></dl></dd></dl></dd><dt><span
class="chapter"><a
href="#chap-Security-Enhanced_Linux-Further_Information">8. Información
Adicional</a></span></dt><dd><dl><dt><span
class="section"><a
href="#sect-Security-Enhanced_Linux-Further_Information-Contributors">8.1.
Contributors</a></span></dt><dt><span
class="section"><a
href="#sect-Security-Enhanced_Linux-Further_Information-Other_Resources">8.2.
Other Resources</a></span></dt></dl></dd><dt><span
class="a
ppendix"><a
href="#appe-Security-Enhanced_Linux-Revision_History">A. Revision
History</a></span></dt></dl></div><div
class="preface" lang="es-ES"><div
class="titlepage"><div><div><h1
id="pref-Security-Enhanced_Linux-Preface"
class="title">Prefacio</h1></div></div></div><div
class="para">
La Guía del Usuario de SELinux de Fedora 11 es para gente sin o con mínima experiencia
con SELinux. Aunque la experiencia de administración de sistema no es necesario, el
contenido de esta guía se escribe para tareas de administración del sistema. Esta guía
provee una introducción a los conceptos fundamentales y aplicaciones prácticas de SELinux.
Después de leer esta guía debe tener un entendimiento intermedio de SELinux.
</div><div class="para">
Gracias a todos los que nos alentaron, ofrecieron ayuda y lo probaron - la ayuda es muy
apreciada. Agradecimientos muy especiales a:
</div><div class="itemizedlist"><ul><li><div
class="para">
Dominick Grift, Stephen Smalley y Russell Coker por sus contribuciones, ayuda y
paciencia.
</div></li><li><div class="para">
Karsten Wade por su ayuda, al agregar un componente para esta guía en el <a
href="https://bugzilla.redhat.com/">Bugzilla de Red Hat</a> y resolver
el sitio web en <a
href="http://docs.fedoraproject.org/">http://docs.fedoraproj...;.
</div></li><li><div class="para">
Al <a
href="http://fedoraproject.org/wiki/Infrastructure">Equipo de
Infraestructura de Fedora</a> por proveer el alojamiento.
</div></li><li><div class="para">
Jens-Ulrik Petersen por asegurar que la oficina de Brisbane de Red Hat tenga espejos
de Fedora actualizados.
</div></li></ul></div><div class="section"
lang="es-ES"><div
class="titlepage"><div><div><h2 class="title"
id="d0e158">1. Convenciones del
Documento</h2></div></div></div><div
class="para">
Este manual utiliza varias convenciones para resaltar algunas palabras y frases y llamar
la atención sobre ciertas partes específicas de información.
</div><div class="para">
En ediciones PDF y de papel, este manual utiliza tipos de letra procedentes de <a
href="https://fedorahosted.org/liberation-fonts/">Liberation Fonts</a>.
Liberation Fonts también se utilizan en ediciones de HTML si están instalados en su
sistema. Si no, se muestran tipografías alternativas pero equivalentes. Nota: Red Hat
Enterprise Linux 5 y siguientes incluyen Liberation Fonts predeterminadas.
</div><div class="section" lang="es-ES"><div
class="titlepage"><div><div><h3 class="title"
id="d0e168">1.1. Convenciones
Tipográficas</h3></div></div></div><div
class="para">
Se utilizan cuatro convenciones tipográficas para llamar la atención sobre palabras o
frases específicas. Dichas convenciones y las circunstancias en que se aplican son las
siguientes:
</div><div class="para">
<code class="literal">Negrita monoespaciado</code>
</div><div class="para">
Utilizada para resaltar la entrada del sistema, incluyendo comandos de shell, nombres
de archivo y rutas. También se utiliza para resaltar teclas claves y combinaciones de
teclas.
</div><div class="blockquote"><blockquote
class="blockquote"><div class="para">
Para ver el contenido del archivo <code
class="filename">my_next_bestselling_novel</code> en su directorio
actual de trabajo, escriba el comando <code class="command">cat
my_next_bestselling_novel</code> en el intérprete de comandos de shell y pulse
<span class="keycap"><strong>Enter</strong></span> para
ejecutar el comando.
</div></blockquote></div><div class="para">
Lo anterior incluye un nombre de archivo, un comando de shell y una tecla clave, todo
en negrita-monoespaciado y distinguible gracias al contexto.
</div><div class="para">
Las combinaciones de teclas se pueden distinguir de las teclas claves mediante el guión
que conecta cada parte de una combinación de tecla. Por ejemplo:
</div><div class="blockquote"><blockquote
class="blockquote"><div class="para">
Pulse <span
class="keycap"><strong>Enter</strong></span> para ejecutar
el comando.
</div><div class="para">
Pulse <span
class="keycap"><strong>Control</strong></span>+<span
class="keycap"><strong>Alt</strong></span>+<span
class="keycap"><strong>F1</strong></span> para cambiar a la
primera terminal virtual. Pulse <span
class="keycap"><strong>Control</strong></span>+<span
class="keycap"><strong>Alt</strong></span>+<span
class="keycap"><strong>F7</strong></span> para volver a su
sesión de Ventanas-X.
</div></blockquote></div><div class="para">
La primera oración resalta la tecla clave determinada que se debe pulsar. La segunda
resalta dos conjuntos de tres teclas claves, cada conjunto presionado simultáneamente.
</div><div class="para">
Si el código fuente es discutido, nombres de clase, métodos, funciones, nombres de
variables, y valores de retorno mencionados dentro de un párrafo serán presentados como lo
anterior, en <code class="literal">Negrita-monoespaciado</code>. Por
ejemplo:
</div><div class="blockquote"><blockquote
class="blockquote"><div class="para">
Las clases de archivo relacionadas incluyen <code
class="classname">filename</code> para sistema de archivos, <code
class="classname">file</code> para archivos y <code
class="classname">dir</code> para directorios. Cada clase tiene su
propio conjunto asociado de permisos.
</div></blockquote></div><div class="para">
<span class="application"><strong>Negrita
proporcional</strong></span>
</div><div class="para">
Esta denota palabras o frases encontradas en un sistema, incluyendo nombres de
aplicación; texto de cuadro de diálogo, botones etiquetados, etiquetas de cajilla de
verificación y botón de radio; títulos de menú y títulos del sub-menú. Por ejemplo:
</div><div class="blockquote"><blockquote
class="blockquote"><div class="para">
Seleccionar <span class="guimenu"><strong>Sistema >
Preferencias > Ratón</strong></span> desde la barra del menú principal
para lanzar <span class="application"><strong>Preferencias de
Ratón</strong></span>. En la pestaña de <span
class="guilabel"><strong>Botones</strong></span>, haga clic
en la cajilla <span class="guilabel"><strong>ratón de mano
izquierda</strong></span> y luego haga clic en <span
class="guibutton"><strong>Cerrar</strong></span> para
cambiar el botón principal del ratón de la izquierda a la derecha (adecuando el ratón para
la mano izquierda).
</div><div class="para">
Para insertar un caracter especial en un archivo <span
class="application"><strong>gedit</strong></span>,
seleccione desde la barra del menú principal <span
class="guimenu"><strong>Aplicaciones > Accesorios > Mapa
de caracteres</strong></span>. Luego, desde la barra del menú elija <span
class="guimenu"><strong>Búsqueda >
Hallar…</strong></span> <span
class="application"><strong>mapa de
caracteres</strong></span>, teclee el nombre del caracter en el campo de
<span class="guilabel"><strong>Búsqueda</strong></span>
y haga clic en <span
class="guibutton"><strong>Siguiente</strong></span>. El
caracter buscado se resaltará en la <span
class="guilabel"><strong>Tabla de
caracteres</strong></span>. Haga doble clic en este caracter resaltado para
colocarlo en el campo de <span class="guilabel"><strong>Texto para
copiar</strong></span> y luego haga clic en el botón de <span
class="guibutton"><strong>Copiar</strong></span>. Ahora
regrese a su documento y elija <span
class="guimenu"><strong>Editar >
Pegar</strong></span> desde la barra de menú de <span
class="application"><strong>gedit</strong></span>.
</div></blockquote></div><div class="para">
El texto anterior incluye nombres de aplicación; nombres de menú de todo el sistema y
elementos; nombres de menú de aplicaciones específicas y botones y texto hallados dentro
de una interfaz GUI, todos presentados en negrita proporcional y distinguibles por
contexto.
</div><div class="para">
Observe la <span class="guimenu"><strong>
></strong></span> abreviatura utilizada para indicar recorrido a través
de un menú y sus sub-menúes. Esto es para evitar la dificultad de seguir el método
'Seleccionar <span
class="guimenuitem"><strong>Ratón</strong></span> desde el
sub-menú <span
class="guimenu"><strong>Preferencias</strong></span> en el
menú de <span
class="guimenu"><strong>Sistema</strong></span> de la barra
de menú principal'.
</div><div class="para">
<code class="command"><em
class="replaceable"><code>Itálicas-negrita
monoespaciado</code></em></code> o <span
class="application"><strong><em
class="replaceable"><code>Itálicas-negrita
proporcional</code></em></strong></span>
</div><div class="para">
Negrita monoespaciado o Negrita proporcional, la adición de itálicas indica texto
reemplazable o variable. Las itálicas denotan texto que usted no escribe literalmente o
texto mostrado que cambia dependiendo de la circunstancia. Por ejemplo:
</div><div class="blockquote"><blockquote
class="blockquote"><div class="para">
Para conectar a una máquina remota utilizando ssh, teclee <code
class="command">ssh <em
class="replaceable"><code>nombredeusuario</code></em>@<em
class="replaceable"><code>dominio.nombre</code></em></code>
en un intérprete de comandos de shell. Si la máquina remota es <code
class="filename">example.com</code> y su nombre de usuario en esa
máquina es john, teclee <code class="command">ssh
john(a)example.com</code>.
</div><div class="para">
El comando <code class="command">mount -o remount <em
class="replaceable"><code>file-system</code></em></code>
remonta el sistema de archivo llamado. Por ejemplo, para volver a montar el sistema de
archivo <code class="filename">/home</code>, el comando es <code
class="command">mount -o remount /home</code>.
</div><div class="para">
Para ver la versión de un paquete actualmente instalado, utilice el comando <code
class="command">rpm -q <em
class="replaceable"><code>paquete</code></em></code>.
Éste entregará el resultado siguiente: <code class="command"><em
class="replaceable"><code>paquete-versión-lanzamiento</code></em></code>.
</div></blockquote></div><div class="para">
Observe las palabras en itálicas- negrita sobre — nombre de usuario, domain.name,
sistema de archivo, paquete, versión y lanzamiento. Cada palabra es un marcador de
posición, tanto para el texto que usted escriba al ejecutar un comando como para el texto
mostrado por el sistema.
</div><div class="para">
Aparte del uso estándar para presentar el título de un trabajo, las itálicas denotan el
primer uso de un término nuevo e importante. Por ejemplo:
</div><div class="blockquote"><blockquote
class="blockquote"><div class="para">
cuando el servidor Apache HTTP acepta solicitudes, envía procesos hijos o hilos para
manejarlos. Este grupo de procesos hijos o hilos se conoce como un <em
class="firstterm">server-pool</em>. Bajo el servidor HTTP de Apache
2.0, la responsabilidad para crear o mantener estos server-pool se resume en un grupo de
módulos llamado <em class="firstterm">Módulos de
multi-procesamiento</em> (<em class="firstterm">MPMs</em>). A
diferencia de otros módulos, sólo un módulo del grupo MPM puede ser cargado por el
servidor HTTP de Apache.
</div></blockquote></div></div><div
class="section" lang="es-ES"><div
class="titlepage"><div><div><h3 class="title"
id="d0e384">1.2. Convenciones del
documento</h3></div></div></div><div
class="para">
Dos, usualmente de varias líneas, los tipos de datos se distinguen visualmente del
texto circundante.
</div><div class="para">
Salida enviada a una terminal está establecida en tipo <code
class="computeroutput">romano monoespaciado</code> y presentada así:
</div><pre class="screen">libros Escritorio documentación
borradores mss fotos cosas svn
libros_pruebas Escritorio1 descargas imágenes notas scripts svgs
</pre><div class="para">
Los listados de código fuente también se establecen en <code
class="computeroutput">romano monoespaciado</code>, pero se presentan y
resaltan de la siguiente manera:
</div><pre class="programlisting">package org.jboss.book.jca.ex1;
import javax.naming.InitialContext;
public class ExClient
{
public static void main(String args[])
throws Exception
{
InitialContext iniCtx = new InitialContext();
Object ref = iniCtx.lookup("EchoBean");
EchoHome home = (EchoHome) ref;
Echo echo = home.create();
System.out.println("Created Echo");
System.out.println("Echo.echo('Hello') = " +
echo.echo("Hello"));
}
}
</pre></div><div class="section"
lang="es-ES"><div
class="titlepage"><div><div><h3 class="title"
id="d0e403">1.3. Notas y
Advertencias</h3></div></div></div><div
class="para">
Finalmente, utilizamos tres estilos visuales para llamar la atención sobre la
información que de otro modo se podría pasar por alto.
</div><div class="note"><h2>Nota</h2><div
class="para">
Una nota es una sugerencia, atajo o enfoque alternativo que se tiene a mano para la
tarea. Ignorar una nota no debería tener consecuencias negativas, pero podría perderse de
algunos trucos que pueden facilitarle las cosas.
</div></div><div
class="important"><h2>Importante</h2><div
class="para">
Los cuadros de importante dan detalles de cosas que se pueden pasar por alto
fácilmente: cambios de configuración únicamente aplicables a la sesión actual, o servicios
que necesitan reiniciarse antes de que se aplique una actualización. Ignorar estos cuadros
de importante no ocasionará pérdida de datos, pero puede causar enfado y frustración.
</div></div><div
class="warning"><h2>Advertencia</h2><div
class="para">
Las advertencias no deben ignorarse. Ignorarlas muy probablemente ocasionará pérdida
de datos.
</div></div></div></div><div class="section"
lang="es-ES"><div
class="titlepage"><div><div><h2 class="title"
id="d0e423">2. ¡Necesitamos sus
comentarios!</h2></div></div></div><a id="d0e426"
class="indexterm"/><div class="para">
Si encuentra un error tipográfico en este manual o si sabe de alguna manera de
mejorarlo, nos gustaría escuchar sus sugerencias. Por favor complete un reporte en
Bugzilla: <a
href="http://bugzilla.redhat.com/bugzilla/">http://bugzilla....
usando el producto <span class="application"><strong>Fedora
Documentation</strong></span>.
</div><div class="para">
Cuando envíe un reporte de error no olvide mencionar el identificador del manual: <em
class="citetitle">selinux-user-guide</em>
</div><div class="para">
Si tiene una sugerencia para mejorar la documentación, intente ser tan específico como
sea posible cuando describa su sugerencia. Si ha encontrado un error, por favor incluya el
número de sección y parte del texto que rodea el error para que podamos encontrarlo más
fácilmente.
</div></div></div><div class="chapter"
lang="es-ES"><div
class="titlepage"><div><div><h2 class="title"
id="chap-Security-Enhanced_Linux-Trademark_Information">Capítulo 1.
Información de Marca Comercial</h2></div></div></div><div
class="toc"><dl><dt><span class="section"><a
href="#chap-Security-Enhanced_Linux-Trademark_Information-Source_Code">1.1.
Source Code</a></span></dt></dl></div><div
class="para">
<span class="trademark">Linux</span>® es una marca comercial
registrada de Linus Torvalds en los EEUU y en otros países.
</div><div class="para">
UNIX es una marca comercial registrada de El Grupo Abierto.
</div><div class="para">
Type Enforcement (Obligación de Tipos) es una marca comercial de Secure Computing, LLC,
una subsidiaria de McAfee, Inc., registrada en los EEUU y en otros países. Ni McAfee ni
Secure Computing, LLC, ha consentido el uso o referencia de esta marca comercial para el
autor fuera de esta guía.
</div><div class="para">
Apache es una marca comercial de La Fundación de Software Apache.
</div><div class="para">
MySQL es una marca comercial o marca comercial registrada de MySQL AB en los EEUU y en
otros países.
</div><div class="section" lang="es-ES"><div
class="titlepage"><div><div><h2 class="title"
id="chap-Security-Enhanced_Linux-Trademark_Information-Source_Code">1.1.
Source Code</h2></div></div></div><div
class="para">
The XML source for this guide is available at <a
href="http://svn.fedorahosted.org/svn/selinuxguide/">http://...
</div></div></div><div class="chapter"
lang="es-ES"><div
class="titlepage"><div><div><h2 class="title"
id="chap-Security-Enhanced_Linux-Introduction">Capítulo 2.
Introducción</h2></div></div></div><div
class="toc"><dl><dt><span class="section"><a
href="#sect-Security-Enhanced_Linux-Introduction-Benefits_of_running_SELinux">2.1.
Beneficios de usar SELinux</a></span></dt><dt><span
class="section"><a
href="#sect-Security-Enhanced_Linux-Introduction-Examples">2.2.
Ejemplos</a></span></dt><dt><span
class="section"><a
href="#sect-Security-Enhanced_Linux-Introduction-SELinux_Architecture">2.3.
Arquitectura de SELinux</a></span></dt><dt><span
class="section"><a
href="#sect-Security-Enhanced_Linux-Introduction-SELinux_on_Other_Operating_Systems">2.4.
SELinux en otros Sistemas
Operativos</a></span></dt></dl></div><div
class="para">
Los Archivos, tales como directorios y dispositivos, se llaman objetos. Los procesos,
tal como un comando que ejecuta el usuario o la aplicación <span
class="trademark">Mozilla</span>®<span
class="trademark"> Firefox</span>®, se llaman sujetos. La mayoría de
los sistemas oeprativos usan un sistema de Control de Acceso Discrecional (DAC), que
controla cómo interactuan los sujetos con los objetos, y cómo los sujetos interactuan
entre sí. En sistemas operativos que usan DAC, los usuarios controlan los permisos de
archivos (objetos) de los que son dueños. Por ejemplo, en sistemas operativos <span
class="trademark">Linux</span>®, los usuarios pueden hacer sus
directorios legibles para el resto del mundo, dando a los usuarios y procesos (sujetos)
acceso a información potencialmente sensible.
</div><div class="para">
Los mecanismos DAC son fundamentalmente inadecuados para una fuerte seguridad del
sistema. Las decisiones de acceso DAC son sólo basadas en la identidad del usuario y su
propiedad, ignorando información de seguridad relevante tal como el rol del usuario, la
función y la confiabilidad del programa, y la sensibilidad e integridad de los datos. Cada
usuario tiene completa discreción sobre sus archivos, haciendo imposible aplicar una
política de seguridad a nivel de sistema. Más aún, cada 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 que no se provee una protección contra software malicioso.
Muchos servicios del sistema y programas privilegiados deben ejecutarse con privilegios
más allá de lo que realmente necesitan, por lo que una brecha en cualquiera de estos
programas se puede explotar para obtener acceso completo al sistema.<sup>[<a
id="d0e485" href="#ftn.d0e485" cl
ass="footnote">1</a>]</sup>
</div><div class="para">
El siguiente es un ejemplo de permisos usados en sistemas operativos Linux que no corren
el Linux de Seguridad Mejorada (SELinux). Los permisos en estos ejemplos pueden diferir de
su sistema. Use el comando <code class="command">ls -l</code> para
ver los permisos de archivos:
</div><pre class="screen">$ ls -l archivo1
-rwxrw-r-- 1 usuario1 grupo1 0 2009-04-30 15:42 archivo1
</pre><div class="para">
Los primeros tres bits de permisos, <code
class="computeroutput">rwx</code>, controlan el acceso que el usuario
Linux <code class="computeroutput">usuario1</code> (en este caso, el
dueño) tiene para el <code class="filename">archivo1</code>. Los
siguientes tres bits de permisos, <code
class="computeroutput">rw-</code>, controlan el acceso que el grupo
Linux <code class="computeroutput">grupo1</code> tiene para el
<code class="filename">archivo1</code>. Los últimos tres bits de
permisos, <code class="computeroutput">r--</code>, controlan el
acceso que todo el mundo tiene para el <code
class="filename">archivo1</code>, que incluyen a todos los usuarios y
procesos.
</div><div class="para">
Linux de Seguridad Mejorada (SELinux por Security-Enhanced Linux) agrega Control de
Acceso Obligatorio (MAC en inglés) al kernel de Linux, y se habilita por defecto en
Fedora. Una arquitectura MAC de propósito general necesita la habilidad de aplicar una
política de seguridad puesta administrativamente sobre todos los procesos y archivos del
sistema, basando decisiones en las etiquetas que contienen información variada relevante
para la seguridad. Cuando se implementa apropiadamente, hace que un sistema se
autodefienda adecuadamente y ofrece soporte crítico para la seguridad de aplicaciones
protegiéndolas de la manipulación y sobrepaso. MAC provee una separación fuerte de
aplicaciones que permite la ejecución a salvo de aplicaciones no confiables. Su habilidad
para limitar los privilegios asociados con la ejecución de procesos limita el ámbito del
potencial daño que puede resultar de la explotación de vulnerabilidades en aplicaciones y
servicios del sistema. MA
C hace que la información esté protegida de los usuarios legítimos con autorización
limitada, así como de usuarios autorizados que involuntariamente ejecutaron aplicaciones
maliciosas.<sup>[<a id="d0e527" href="#ftn.d0e527"
class="footnote">2</a>]</sup>
</div><div class="para">
El siguiente es un ejemplo de las etiquetas que contienen información de seguridad
relevante que se usa en los procesos, usuarios Linux y archivos, en sistemas operativos
Linux que corren SELinux. Esta información se llama contexto de SELinux y se visualiza
usando el comando <code class="command">ls -Z</code>:
</div><pre class="screen">$ ls -Z file1
-rwxrw-r-- user1 group1 unconfined_u:object_r:user_home_t:s0 file1
</pre><div class="para">
En este ejemplo, SELinux provee un usuario (<code
class="computeroutput">unconfined_u</code>), un rol (<code
class="computeroutput">object_r</code>), un tipo (<code
class="computeroutput">user_home_t</code>), y un nivel (<code
class="computeroutput">s0</code>). Esta información se usa para tomar
decisiones sobre el control de acceso. Con DAC, el acceso se controla basado sólo en los
IDs de usuarios y grupos de Linux. Las reglas de políticas de SELinux se chequean después
de las reglas DAC. Las reglas de políticas de SELInux no se usan si las reglas DAC niegan
el acceso al principio.
</div><div class="formalpara"><h5 class="formalpara"
id="form-Security-Enhanced_Linux-Introduction-Linux_and_SELinux_Users">Linux
y los Usuarios SELinux</h5>
En sistemas operativos Linux que corren SELinux, hay usuarios Linux así como usuarios
SELinux. Los usuarios SELinux son parte de la política de SELinux. Los usuarios Linux se
mapean a usuarios SELinux. Para evitar confusión, esta guía usa "usuarios Linux"
y "usuarios SELinux" para diferenciar entre ambos.
</div><div class="section" lang="es-ES"><div
class="titlepage"><div><div><h2 class="title"
id="sect-Security-Enhanced_Linux-Introduction-Benefits_of_running_SELinux">2.1.
Beneficios de usar SELinux</h2></div></div></div><div
class="itemizedlist"><ul><li><div class="para">
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í
corriéndolos en sus propios dominios, y las reglas de políticas de SELinux define cómo
interactúan los procesos con los archivos, así como la forma en que interactúan entre sí.
El acceso sólo se permite si existe una regla de política de SELinux que específicamente
lo permita.
</div></li><li><div class="para">
Control de acceso más fino. Yendo un paso más alla de los permisos tradicionales de
<span class="trademark">UNIX</span>® que se controlan a discreción
del usuario y se basa en los IDs de usuario y de grupos de Linux, las decisiones de
accesos de SELinux se basan en toda la información disponible, tales como un usuario
SELinux, el rol, el tipo y, opcionalmente, un nivel.
</div></li><li><div class="para">
La política de SELinux se define administrativamente, obligando a todo el sistema, y
no se pone a discreción del usuario.
</div></li><li><div class="para">
Vulnerabilidad reducida para ataques de escalamiento de privilegios. Un ejemplo: dado
que los procesos corren en dominios, y son por lo tanto separados entresi, y las reglas de
la política de SELinux definen cómo los procesos acceden a los archivos y a otros
procesos, si un proceso queda comprometido, el atacante sólo tiene acceso a las funciones
normales 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 home de los usuarios, a menos que
una regla específica de la política de SELinux haya sido agregada o configurada para
permitir tal acceso.
</div></li><li><div class="para">
Se linux se puede usar para asegurar la confidencialidad e integridad de los datos,
así como proteger los procesos de entradas no confiables.
</div></li></ul></div><div class="para">
SELinux no es:
</div><div class="itemizedlist"><ul><li><div
class="para">
software antivirus.
</div></li><li><div class="para">
un reemplazo para las contraseñas, cortafuegos y otros sistemas de seguridad.
</div></li><li><div class="para">
una solución todo en uno.
</div></li></ul></div><div class="para">
SELinux está diseñado para mejorar las soluciones de seguridad existentes, no
reemplazarlas. Aún cuando corra SELinux, siga las buenas prácticas de seguridad, tales
como mantener el software actualizado, usar contraseñas difíciles de adivinar, cortafuegos
y demás.
</div></div><div class="section"
lang="es-ES"><div
class="titlepage"><div><div><h2 class="title"
id="sect-Security-Enhanced_Linux-Introduction-Examples">2.2.
Ejemplos</h2></div></div></div><div class="para">
Los siguientes ejemplos demuestran cómo SELinux aumenta la seguridad:
</div><div class="itemizedlist"><ul><li><div
class="para">
la acción por defecto es denegar. Si una regla de la política de SELinux no existe
para permitir el acceso, como para que un proceso pueda abrir un archivo, el acceso es
denegado.
</div></li><li><div class="para">
SELinux puede confinar a usuarios Linux. Existe un número de usuarios SELinux
confinados. Los usuarios Linux se pueden mapear a usuarios SELinux para sacar ventaja de
los usuarios SELinux confinados. Por ejemplo, mapear un usario Linux al usuario SELinux
user_u, resulta en un usuario Linux que no puede ejecutar (a menos que se configure de
otra forma) aplicaciones con el ID del usuario (setuid), tales como <code
class="command">sudo</code> y <code
class="command">su</code>, así como previene la ejecución de archivos y
aplicaciones en sus directorios de inicio (home)- si se configura, esto evita que los
usuarios ejecuten archivos maliciosos desde sus directorios de inicio.
</div></li><li><div class="para">
separación de procesos. Los procesos que corren en sus propios dominios, previenen
que estos accedan a archivos usados por otros procesos, así como el acceso a otros
procesos. Por ejemplo, cuando se ejecuta SELinux, a menos que se configure de otra forma,
un atacante no puede comprometer un servidor Samba, y luego usar ese servidor Samba para
leer y escribir archivos usados por otros procesos, tales como las bases de datos usadas
por <span class="trademark">MySQL</span>®.
</div></li><li><div class="para">
ayuda a limitar los daños hechos por errores en la configuración. Los servidores
<a
href="http://en.wikipedia.org/wiki/Domain_Name_System">Sistema de
Nombres de Dominio (DNS)</a> pueden replicar información entre si. Esto se conoce
como transferencia de zona. Los atacantes pueden usar las transferencias de zonas para
actualizar los servidores de DNS con información falsa. Cuando se ejecuta el servidor de
DNS <a
href="https://www.isc.org/software/bind">Berkeley Internet Name
Domain (BIND)</a> en Fedora 11, aún si un administrador se olvida de limitar qué
servidores pueden realizar las transferencias de zona, la política predeterminada de
SELinux evita que los archivos de zonas <sup>[<a id="d0e629"
href="#ftn.d0e629" class="footnote">3</a>]</sup> sean
actualizados por transferencias, por el demonio BIND <code
class="systemitem">named</code> y por otros procesos.
</div></li><li><div class="para">
vaya al artículo de <a
href="http://www.redhatmagazine.com/"><span
class="trademark">Red Hat</span>® Magazine</a>, <a
href="http://www.redhatmagazine.com/2008/02/26/risk-report-three-yea...
de riesgo: Tres años del Linux para Empresas de Red Hat 4</a><sup>[<a
id="d0e646" href="#ftn.d0e646"
class="footnote">4</a>]</sup>, para explotaciones que fueron
restringidas gracias a la política destinada de SELinux en el <span
class="trademark">Linux</span>® para Empresas de <span
class="trademark">Red Hat</span>® 4.
</div></li><li><div class="para">
vaya al artículo en <a
href="http://www.linuxworld.com">LinuxWorld.com</a> article, <a
href="http://www.linuxworld.com/news/2008/022408-selinux.html?page=1...
cinturón de seguridad para software servidor: SELinux bloquea explotaciones del mundo
real</a><sup>[<a id="d0e666" href="#ftn.d0e666"
class="footnote">5</a>]</sup>, para un poco de información sobre
SELinux, y sobre varias explotaciones que SELinux evita.
</div></li><li><div class="para">
vaya al blog de James Morris <a
href="http://james-morris.livejournal.com/25421.html">SELinux mitiga la
vulnerabilidad de root en OpenPegasus</a>, para información acerca de una brecha en
<a
href="http://www.openpegasus.org/">OpenPegasus</a> que fue
mitigada por SELinux tal como fue distribuido con el Linux para Empresas de Red Hat 4 y
5.
</div></li></ul></div><div class="para">
El sitio web de <a
href="http://www.tresys.com/">Tresys
Technology</a> tiene una sección de <a
href="http://www.tresys.com/innovation.php">Noticias de Migración a
SELinux</a> (en la parte derecha), que lista los ataques recientes que fueron
mitigados o prevenidos por SELinux.
</div></div><div class="section"
lang="es-ES"><div
class="titlepage"><div><div><h2 class="title"
id="sect-Security-Enhanced_Linux-Introduction-SELinux_Architecture">2.3.
Arquitectura de SELinux</h2></div></div></div><div
class="para">
SELinux es un módulo de seguridad de Linux que se construye dentro del kernel de Linux.
SELinux se maneja por reglas de políticas cargables. Cuando un acceso de seguridad
relevante se lleva a cabo, tal como un proceso que trata de abrir un archivo, la operación
es interceptada por SELinux en el kernel. Si una regla de política de SELinux permite la
operación, continúa, sino, la operación se bloquea y el proceso recibe un error.
</div><div class="para">
Las decisiones de SELinux, tales como permitir o negar accesos, son cacheadas. Este
caché se conoce como Caché Vector de Acceso (AVC). Las decisiones de cacheado disminuye la
necesidad de que las reglas de políticas de SELinux sean chequeadas muy a menudo, lo que
mejora la performance. Las reglas de políticas de SELinux no tienen efecto si las reglas
DAC niegan el acceso primero.
</div></div><div class="section"
lang="es-ES"><div
class="titlepage"><div><div><h2 class="title"
id="sect-Security-Enhanced_Linux-Introduction-SELinux_on_Other_Operating_Systems">2.4.
SELinux en otros Sistemas Operativos</h2></div></div></div><div
class="para">
Vaya a la siguiente información sobre cómo correr SELinux en sistemas operativos:
</div><div class="itemizedlist"><ul><li><div
class="para">
Gentoo endurecido: <a
href="http://www.gentoo.org/proj/en/hardened/selinux/selinux-handboo...;.
</div></li><li><div class="para">
Debian: <a
href="http://wiki.debian.org/SELinux">http://wiki.debian.org...;.
</div></li><li><div class="para">
Ubuntu: <a
href="https://wiki.ubuntu.com/SELinux">https://wiki.ubuntu.c...
and <a
href="https://help.ubuntu.com/community/SELinux">https://hel...;.
</div></li><li><div class="para">
Linux para Empresas de Red Hat: <a
href="http://www.redhat.com/docs/en-US/Red_Hat_Enterprise_Linux/5.2/...
de Despliegue del Linux para Empresas de Red Hat</a> y la <a
href="http://www.redhat.com/docs/manuals/enterprise/RHEL-4-Manual/se...
de SELinux para el Linux para Empresas de Red Hat</a>.
</div></li><li><div class="para">
Fedora: <a
href="http://fedoraproject.org/wiki/SELinux">http://fedorapr...
y el <a
href="http://docs.fedoraproject.org/selinux-faq-fc5/">FAQ de
SELinux de Fedora Core 5</a>.
</div></li></ul></div></div><div
class="footnotes"><br/><hr width="100"
align="left"/><div
class="footnote"><p><sup>[<a id="ftn.d0e485"
href="#d0e485" class="para">1</a>] </sup>
"Integración del Soporte Flexible para Políticas de Seguridad en el Sistema
Operativo Linux", de Peter Loscocco y Stephen Smalley. Este paper fue preparado
originalmente por la Agencia de Seguridad Nacional y está, consecuentemente, en el dominio
público. Vaya al <a
href="http://www.nsa.gov/research/_files/selinux/papers/freenix01/in...
original</a> para mas detalles y el documento tal como fue lanzado la primera vez.
Cualquier edición y cambio fue hecho por Murray McAllister.
</p></div><div class="footnote"><p><sup>[<a
id="ftn.d0e527" href="#d0e527" class="para">2</a>]
</sup>
"Consiguiendo Objetivos de Seguridad Críticos con Linux de Seguridad
Mejorada", por Peter Loscocco y Stephen Smalley. Este paper fue preparado
originalmente por la Agencia de Seguridad Nacional y está, consecuentemente, en el dominio
público. Vaya al <a
href="http://www.nsa.gov/research/_files/selinux/papers/ottawa01/ind...
original</a> para detalles y por el documento tal como fue lanzado la primera vez.
Cualquier edición y cambio fue hecho por Murray McAllister.
</p></div><div class="footnote"><p><sup>[<a
id="ftn.d0e629" href="#d0e629" class="para">3</a>]
</sup>
Archivos de texto que incluyen información, tal como el mapeo de nombre de equipo a
dirección IP, que usan los servidores de DNS.
</p></div><div
class="footnote"><p><sup>[<a id="ftn.d0e646"
href="#d0e646" class="para">4</a>] </sup>
Cox, Mark. "Informe de riesgo: Tres años del Linux para Empresas de Red Hat
4". Publicado el 26 Febrero 2008. Accedido el 28 Agosto 2008: <a
href="http://www.redhatmagazine.com/2008/02/26/risk-report-three-yea...;.
</p></div><div
class="footnote"><p><sup>[<a id="ftn.d0e666"
href="#d0e666" class="para">5</a>] </sup>
Marti, Don. "Un cinturón de seguridad para software servidor: SELinux bloquea
explotaciones del mundo real". Publicado el 24 Febrero 2008. Accedido el 28 Agosto
2008: <a
href="http://www.linuxworld.com/news/2008/022408-selinux.html?page=1...;.
</p></div></div></div><div class="chapter"
lang="es-ES"><div
class="titlepage"><div><div><h2 class="title"
id="chap-Security-Enhanced_Linux-SELinux_Contexts">Capítulo 3. Contextos de
SELinux</h2></div></div></div><div
class="toc"><dl><dt><span class="section"><a
href="#sect-Security-Enhanced_Linux-SELinux_Contexts-Domain_Transitions">3.1.
Transiciones de Dominios</a></span></dt><dt><span
class="section"><a
href="#sect-Security-Enhanced_Linux-SELinux_Contexts-SELinux_Contexts_for_Processes">3.2.
Contextos de SELinux para los Procesos</a></span></dt><dt><span
class="section"><a
href="#sect-Security-Enhanced_Linux-SELinux_Contexts-SELinux_Contexts_for_Users">3.3.
Contextos de SELinux para los
Usuarios</a></span></dt></dl></div><div
class="para">
Los procesos y archivos se etiquetan con un contexto SELinux que contiene información
adicional, tal como un usuario SELinux, rol, tipo y, opcionalmente, un nivel. Cuando se
ejecuta SELinux, toda esta información se usa para tomar decisiones de control de acceso.
En Fedora 11, SELinux provee una combinación de Control de Acceso Basado en Roles (RBAC en
inglés), <span class="trademark">Obligación de Tipos</span>® (TE en
inglés), y, opcionalmente, Seguridad Multi-nivel (MLS en inglés).
</div><div class="para">
El siguiente es un ejemplo de contexto de SELinux. Los contextos de SELinux se usan en
procesos, usuarios de Linux y archivos, en sistemas operativos Linux que corren SELinux.
Use el comando <code class="command">ls -Z</code> para ver el
contexto SELinux de archivos y directorios:
</div><pre class="screen">$ ls -Z file1
-rwxrw-r-- user1 group1 unconfined_u:object_r:user_home_t:s0 file1
</pre><div class="para">
Los contextos de SELinux siguen la <span
class="emphasis"><em>SELinux
nombre-de-usuario:role:type:level</em></span> sintaxis:
</div><div class="variablelist"><dl><dt><span
class="term"><span class="emphasis"><em>Usuario SELinux
</em></span></span></dt><dd><div
class="para">
La identidad de usuario SELinux es una identidad conocida para la política a la que
se le autoriza un conjunto específico de roles, y un rango específico de MLS. Cada usuario
Linux se mapea a un usuario SELinux vía la política 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 esa sesión, para
agrupar a qué roles y niveles pueden ingresar. Ejecute el comando <code
class="command">semanage login -l</code> como usuario root de Linux
para ver una lista de mapeos entre cuentas de usuarios Linux y SELinux:
</div><pre class="screen"># /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
</pre><div class="para">
La salida puede ser distinta de sistema a sistema. La columna <code
class="computeroutput">Nombre de Ingreso</code> lista los usuarios
Linux, y la columna <code class="computeroutput">Usuario
SELinux</code> lista qué a usuario SELinux es mapeado un usuario Linux. Para
procesos, el usuario SELinux limita qué roles y niveles son accesibles. La última columna,
<code class="computeroutput">Rango MLS/MCS</code>, es el nivel usado
por la Seguridad Multi Nivel (MLS) y por la Seguridad Multi Categoría (MCS). Los niveles
se describen brevemente más adelante.
</div></dd><dt><span class="term"><span
class="emphasis"><em>rol</em></span></span></dt><dd><div
class="para">
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 son autorizados para
ciertos roles y los roles son autorizados para ciertos dominios. Los roles sirven como un
intermediario entre dominios y usarios SELinux. 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 pueden acceder. Esto ayuda a reducir la vulnerabilidad de ataques de
escalada de privilegios.
</div></dd><dt><span class="term"><span
class="emphasis"><em>tipo</em></span></span></dt><dd><div
class="para">
El tipo es un atributo de la Obligación de Tipos. El tipo define un dominio para
procesos y un tipo para los archivos. Las reglas de políticas de SELinux define cómo 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ólo se permiten si existe una regla de política de SELinux que
lo permita.
</div></dd><dt><span class="term"><span
class="emphasis"><em>nivel</em></span></span></dt><dd><div
class="para">
El nivel es un atributo de MLS y la Seguridad Multi Categoría (MCS). Un rango MLS es
un par de niveles, escrito como <span
class="emphasis"><em>bajonivel-altonivel</em></span> si los
niveles sin distintos, o <span
class="emphasis"><em>bajonivel</em></span> si los niveles
son idénticos (<code class="computeroutput">s0-s0</code> es lo mismo
que <code class="computeroutput">s0</code>). Cada nivel es un par
sensible a categorías, donde las categorías son opcionales. Si no hay categorías, el nivel
se escribe como <span
class="emphasis"><em>sensibilidad:conjunto-de-categoría</em></span>.
Si no hay categorías, se escribe como <span
class="emphasis"><em>sensibilidad</em></span>.
</div><div class="para">
Si el conjunto de categoría es una serie contigua, se puede abreviar. Por ejemplo,
<code class="computeroutput">c0.c3</code> es lo mismo que <code
class="computeroutput">c0,c1,c2,c3</code>. El archivo <code
class="filename">/etc/selinux/targeted/setrans.conf</code> mapea los
niveles (<code class="computeroutput">s0:c0</code>) a una forma
legible al humano (<code
class="computeroutput">CompanyConfidential</code>). No edite <code
class="filename">setrans.conf</code> con un editor de texto: use
<code class="command">semanage</code> para hacer cambios. Vaya a la
página de manual de <span class="citerefentry"><span
class="refentrytitle">semanage</span>(8)</span> para más
información. En Fedora 11, la política destinada obglica MCS, y en MCS hay sólo una
sensibilidad, la <code class="computeroutput">s0</code>. MCS en
Fedora 11 soporta 1024 categorías distintas: <code
class="computeroutput">c0</code> a <code
class="computeroutput">c1023</code>. <code
class="computeroutpu
t">s0-s0:c0.c1023</code> es la sensibilidad <code
class="computeroutput">s0</code> y autorizado para todas las
categorías.
</div><div class="para">
MLS aplica el <a
href="http://en.wikipedia.org/wiki/Bell-LaPadula_model">Modelo de Acceso
Obligatorio Bell-LaPadula</a>, y se usa en entornos de Perfil de Protección de
Seguirdad Etiquetada (LSPP en inglés). Para usar las restricciones MLS, instale el paquete
<span class="package">selinux-policy-mls</span>, y configure a MLS
como la política de SELinux predeterminada. La política MLS puesta en Fedora mite muchos
dominios de programa que no eran parte de la configuración evaluada, y por lo tanto, MLS
es inútil en un escritorio (no hay soporte para el Sistema de Ventanas X); sin embargo,
una política MLS se puede incluir desde los <a
href="http://oss.tresys.com/projects/refpolicy">desarrolladores de la
Política de Referencia de SELinux</a> que incluya todos los dominios de programa.
</div></dd></dl></div><div class="section"
lang="es-ES"><div
class="titlepage"><div><div><h2 class="title"
id="sect-Security-Enhanced_Linux-SELinux_Contexts-Domain_Transitions">3.1.
Transiciones de Dominios</h2></div></div></div><div
class="para">
Un proceso transiciona de un dominio a otro ejecutando una aplicación que tiene el tipo
<code class="computeroutput">entrypoint</code> en el nuevo dominio.
Los permisos <code class="computeroutput">entrypoint</code> se usan
en las políticas de SELinux, y controlan qué aplicaciones pueden usarse para ingresar a un
dominio. El siguiente ejemplo muestra una transición de dominio.
</div><div class="orderedlist"><ol><li><div
class="para">
Un usuario desea cambiar su contraseña. Para cambiar sus contraseñas, corren la
aplicación <code class="command">passwd</code>. El ejecutable
<code class="filename">/usr/bin/passwd</code> está etiquetado con el
tipo <code class="computeroutput">passwd_exec_t</code>:
</div><pre class="screen">$ ls -Z /usr/bin/passwd
-rwsr-xr-x root root system_u:object_r:passwd_exec_t:s0 /usr/bin/passwd
</pre><div class="para">
La aplicación <span
class="application"><strong>passwd</strong></span> accede
<code class="filename">/etc/shadow</code>, que está etiquetado con
el tipo <code class="computeroutput">shadow_t</code>:
</div><pre class="screen">$ ls -Z /etc/shadow
-r-------- root root system_u:object_r:shadow_t:s0 /etc/shadow
</pre></li><li><div class="para">
Una regla de política de SELinux dice que los procesos que se ejecutan en el dominio
<code class="computeroutput">passwd_t</code> no pueden leer y
escribir archivos etiquetados con el tipo <code
class="computeroutput">shadow_t</code>. El tipo <code
class="computeroutput">shadow_t</code> sólo se aplica a archivos que
necesitan un cambio de contraseñas. Esto incluye a <code
class="filename">/etc/gshadow</code>, <code
class="filename">/etc/shadow</code>, y sus archivos de respaldo.
</div></li><li><div class="para">
Una regla de política de SELinux fija que el dominio <code
class="computeroutput">passwd_t</code> tiene permiso de <code
class="computeroutput">entrypoint</code> al tipo <code
class="computeroutput">passwd_exec_t</code>.
</div></li><li><div class="para">
Cuando un usuario ejecuta la aplicación <code
class="command">/usr/bin/passwd</code>, el proceso shell del usuario
transiciona al dominio <code class="computeroutput">passwd_t</code>.
Con SELinux, dado que la acción por defecto es negar, y existe una regla que permite
(entre otras cosas) a aplicaciones que corran en el dominio <code
class="computeroutput">passwd_t</code> acceder a archivos etiquetados
con el tipo <code class="computeroutput">shadow_t</code>, se le
permite a <span
class="application"><strong>passwd</strong></span> acceder
a <code class="filename">/etc/shadow</code>, y actualizar la
contraseña del usuario.
</div></li></ol></div><div class="para">
Este ejemplo no es exhaustivo, y se usa como un ejemplo básico para explicar la
transición de dominio. Aunque hay una regla actual que permite a sujetos corriendo en el
dominio <code class="computeroutput">passwd_t</code> accedan objetos
etiquetados con el tipo de archivo <code
class="computeroutput">shadow_t</code>, otras reglas de política de
SELinux se deben cumplir para que el sujeto pueda transicionar a un nuevo dominio. En este
ejemplo, la Obligación de Tipo asegura:
</div><div class="itemizedlist"><ul><li><div
class="para">
el dominio <code class="computeroutput">passwd_t</code> sólo se
puede ingresar ejecutando una aplicación con la etiqueta del tipo <code
class="computeroutput">passwd_exec_t</code>; sólo pueden ejecutar desde
bibliotecas compartidas autorizadas, tales como las del tipo <code
class="computeroutput">lib_t</code>; y no pueden ejecutar ninguna otra
aplicación.
</div></li><li><div class="para">
sólo los dominios autorizados, tales como <code
class="computeroutput">passwd_t</code>, pueden escribir en archivos con
la etiqueta del tipo <code class="computeroutput">shadow_t</code>.
Aún si otros procesos corren con privilegios de superusuario, esos procesos no podrán
escribir archivos etiquetados con el tipo <code
class="computeroutput">shadow_t</code>, porque no están corriendo en el
dominio <code class="computeroutput">passwd_t</code>.
</div></li><li><div class="para">
sólo los dominios autorizados pueden transicionar al dominio <code
class="computeroutput">passwd_t</code>. Por ejemplo, el proceso
<code class="systemitem">sendmail</code> corriendo en el dominio
<code class="computeroutput">sendmail_t</code> no tiene una razón
legítima para ejecutar <code class="command">passwd</code>; por lo
tanto, no puede transicionar nunca al dominio <code
class="computeroutput">passwd_t</code>.
</div></li><li><div class="para">
los procesos que se ejecutan en el dominio <code
class="computeroutput">passwd_t</code> sólo pueden leer y escribir a
tipos autorizados, tales como archivos etiquetados con los tipos <code
class="computeroutput">etc_t</code> o <code
class="computeroutput">shadow_t</code>. Esto impide a la aplicación
<span class="application"><strong>passwd</strong></span>
de ser modificada para leer o escribir en archivos arbitrarios.
</div></li></ul></div></div><div
class="section" lang="es-ES"><div
class="titlepage"><div><div><h2 class="title"
id="sect-Security-Enhanced_Linux-SELinux_Contexts-SELinux_Contexts_for_Processes">3.2.
Contextos de SELinux para los
Procesos</h2></div></div></div><div class="para">
Use el comando <code class="command">ps -eZ</code> para ver los
contextos de SELinux para los procesos. Por ejemplo:
</div><div class="orderedlist"><ol><li><div
class="para">
Abra una terminal, como la de <span
class="guimenu"><strong>Aplicaciones</strong></span> →
<span class="guisubmenu"><strong>Herramientas del
Sistema</strong></span> → <span
class="guimenuitem"><strong>Terminal</strong></span>.
</div></li><li><div class="para">
Ejecute el comando <code
class="command">/usr/bin/passwd</code>. No ingrese una nueva
contraseña.
</div></li><li><div class="para">
Abra una nueva pestaña, u otra terminal, y ejecute el comando <code
class="command">ps -eZ | grep passwd</code>. La salida es similar a la
siguiente:
</div><pre
class="screen">unconfined_u:unconfined_r:passwd_t:s0-s0:c0.c1023 13212 pts/1
00:00:00 passwd
</pre></li><li><div class="para">
En la primer pestaña, presione <strong
class="userinput"><code>Ctrl+C</code></strong> para
cancelar la aplicación <span
class="application"><strong>passwd</strong></span>.
</div></li></ol></div><div class="para">
En este ejemplo, cuando la aplicación <code
class="filename">/usr/bin/passwd</code> (etiquetada con el tipo
<code class="computeroutput">passwd_exec_t</code>) se ejecuta, el
proceso shell del usuario transiciona al dominio <code
class="computeroutput">passwd_t</code>. Recuerde: el tipo define un
dominio para procesos y un tipo para archivos.
</div><div class="para">
Use el comando <code class="command">ps -eZ</code> para ver los
contextos SELinux de los procesos en ejecución. El siguiente es un ejemplo limitado de la
salida, y puede cambiar en su sistema:
</div><pre class="screen">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
</pre><div class="para">
El rol <code class="computeroutput">system_r</code> se usa para
procesos de sistema, como los demonios. El tipo obligatorio los separa luego en dominios.
</div></div><div class="section"
lang="es-ES"><div
class="titlepage"><div><div><h2 class="title"
id="sect-Security-Enhanced_Linux-SELinux_Contexts-SELinux_Contexts_for_Users">3.3.
Contextos de SELinux para los
Usuarios</h2></div></div></div><div class="para">
Use el comando <code class="command">id -Z</code> para ver el
contexto SELinux asociado con su usuario Linux:
</div><pre
class="screen">unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
</pre><div class="para">
En Fedora 11, los usuarios Linux corren no confinados por defecto. Este contexto de
SELinux muestra que el usuario Linux se mapea al usuario SELinux <code
class="computeroutput">unconfined_u</code>, corriendo con el rol
<code class="computeroutput">unconfined_r</code> y en el dominio
<code class="computeroutput">unconfined_t</code>. <code
class="computeroutput">s0-s0</code> es un rango MLS, que en este caso,
es el mismo que <code class="computeroutput">s0</code>. Las
categorías a las que el usuario tiene acceso se definen por <code
class="computeroutput">c0.c1023</code>, que son todas las categorías
(<code class="computeroutput">c0</code> a <code
class="computeroutput">c1023</code>).
</div></div></div><div class="chapter"
lang="es-ES"><div
class="titlepage"><div><div><h2 class="title"
id="chap-Security-Enhanced_Linux-Targeted_Policy">Capítulo 4. Política
Destinado</h2></div></div></div><div
class="toc"><dl><dt><span class="section"><a
href="#sect-Security-Enhanced_Linux-Targeted_Policy-Confined_Processes">4.1.
Procesos Confinados</a></span></dt><dt><span
class="section"><a
href="#sect-Security-Enhanced_Linux-Targeted_Policy-Unconfined_Processes">4.2.
Procesos no Confinados</a></span></dt><dt><span
class="section"><a
href="#sect-Security-Enhanced_Linux-Targeted_Policy-Confined_and_Unconfined_Users">4.3.
Usuarios Confinados y no
Confinados</a></span></dt></dl></div><div
class="para">
La política destinada es la política predeterminada de SELinux usada en Fedora 11.
Cuando la política destinada está en uso, los procesos son destinados a correr en dominios
confinados, y los procesos que no son destinados a correr en un dominio corren en un
dominio no confinado. Por ejemplo, por defecto, los usuarios que ingresaron corren en el
dominio <code class="computeroutput">unconfined_t</code>, y los
procesos del sistema iniciado por init corren en el dominio <code
class="computeroutput">initrc_t</code> - ambos dominios están no
confinados.
</div><div class="para">
Unconfined domains (as well as confined domains) are subject to executable and writeable
memory checks. By default, subjects running in an unconfined domain can not allocate
writeable memory and execute it. This reduces vulnerability to <a
href="http://en.wikipedia.org/wiki/Buffer_overflow">buffer overflow
attacks</a>. These memory checks are disabled by setting Booleans, which allow the
SELinux policy to be modified at runtime. Boolean configuration is discussed later.
</div><div class="section" lang="es-ES"><div
class="titlepage"><div><div><h2 class="title"
id="sect-Security-Enhanced_Linux-Targeted_Policy-Confined_Processes">4.1.
Procesos Confinados</h2></div></div></div><div
class="para">
Casi todos los servicios que escuchan en la red se confinan en Fedora 11. También, la
mayoría de los procesos que corren como usuario root de Linux y realizan tareas para los
usuarios, tales como la aplicación <span
class="application"><strong>passwd</strong></span>, están
confinadas. Cuando un proceso se confina, corre en su propio dominio, tal como el proceso
<code class="systemitem">httpd</code> ejecutándose en el domino
<code class="computeroutput">httpd_t</code>. Si un proceso confinado
es comprometido por un atacante, dependiendo de la configuración de política de SELinux,
el acceso del atacante a recursos y el posible daño que puedan causar es limitado.
</div><div class="para">
El siguiente ejemplo muestra cómo previene SELinux la lectura por parte del Servidor
HTTP Apache (<code class="systemitem">httpd</code>) de archivos que
no se etiquetaron correctamente, tales como archivos a usar con Samba. Este es un ejemplo,
y no se debe usar en producción. Asume que los paquetes <span
class="package">httpd</span>, <span
class="package">wget</span>, <span
class="package">setroubleshoot-server</span> y <span
class="package">audit</span> están instalados, que se usa la política
destinada de SELinux y que SELinux está corriendo en modo obligatorio:
</div><div class="orderedlist"><ol><li><div
class="para">
Ejecute el comando <code class="command">sestatus</code> para
confirmar que SELinux está activado, se ejecuta en modo obligatorio y que la política
destinada se está usando:
</div><pre class="screen">$ /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
</pre><div class="para">
<code class="computeroutput">SELinux status: enabled</code> is
returned when SELinux is enabled. <code class="computeroutput">Current
mode: enforcing</code> is returned when SELinux is running in enforcing mode.
<code class="computeroutput">Policy from config file:
targeted</code> is returned when the SELinux targeted policy is used.
</div></li><li><div class="para">
Como usuario root de Linux, ejecute el comando <code
class="command">touch /var/www/html/prueba</code> para crear un
archivo.
</div></li><li><div class="para">
Ejecute el comando <code class="command">ls -Z
/var/www/html/prueba</code> para ver el contexto SELinux:
</div><pre class="screen">-rw-r--r-- root root
unconfined_u:object_r:httpd_sys_content_t:s0 /var/www/html/prueba
</pre><div class="para">
Por defecto, los usuarios Linux corren no confinados en Fedora 11, razón por la cual
el archivo <code class="filename">prueba</code> se etiqueta con el
usuario SELinux <code class="computeroutput">unconfined_u</code>.
RBAC se usa para procesos, y no para archivos. Los roles no tienen significado para
archivos - el rol <code class="computeroutput">object_r</code> es un
rol genérico usado para archivos (en sistemas de archivos persistentes y de red). Bajo el
directorio <code class="filename">/proc/</code>, los archivos
relacionados con procesos pueden usar el rol <code
class="computeroutput">system_r</code>.<sup>[<a
id="d0e1233" href="#ftn.d0e1233"
class="footnote">6</a>]</sup> El tipo <code
class="computeroutput">httpd_sys_content_t</code> permite al proceso
<code class="systemitem">httpd</code> acceder a este archivo.
</div></li><li><div class="para">
Como usuario root de Linux, ejecute el comando <code
class="command">service httpd start</code> para iniciar el proceso
<code class="systemitem">httpd</code>. La salida escomo sigue si
<code class="systemitem">httpd</code> inicia con éxito:
</div><pre class="screen"># /sbin/service httpd start
Iniciando httpd: [ OK ]
</pre></li><li><div class="para">
Cambie al directorio donde su usuario Linux tenga acceso de escritura y ejecute el
comando <code class="command">wget
http://localhost/prueba</code>. A
menos que hubieran cambios en la configuración predeterminada, este comando tiene éxito:
</div><pre class="screen">--2009-05-06 23:00:01--
http://localhost/prueba
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'
[ <=> ] 0 --.-K/s in 0s
2009-05-06 23:00:01 (0.00 B/s) - `prueba' saved [0/0]
</pre></li><li><div class="para">
El comando <code class="command">chcon</code> reetiqueta
archivos; sin embargo, tales cambios de etiquetas no sobreviven cuando el sistema se
reetiqueta. Para que los cambios sobrevivan un reetiquetado del sistema, use el comando
<code class="command">semanage</code>, que se discute más adelante.
Como usuario root de Linux, corra el siguiente comando para cambiar el tipo a un tipo
usado por Samba:
</div><div class="para">
<code class="command">chcon -t samba_share_t
/var/www/html/prueba</code>
</div><div class="para">
Ejecute el comando <code class="command">ls -Z
/var/www/html/prueba</code> para ver los cambios:
</div><pre class="screen">-rw-r--r-- root root
unconfined_u:object_r:samba_share_t:s0 /var/www/html/prueba
</pre></li><li><div class="para">
Nota: los permisos de DAC actuales permiten al proceso <code
class="systemitem">httpd</code> acceder al <code
class="filename">prueba</code>. Cambie al directorio donde el usuario
Linux tenga permiso de escritura y ejecute el comando <code
class="command">wget
http://localhost/prueba</code>. A menos que hayan
cambios en la configuración predeterminada, este comando fallará:
</div><pre class="screen">--2009-05-06 23:00:54--
http://localhost/prueba
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.
</pre></li><li><div class="para">
Como usuario root de Linux, corra el comando <code class="command">rm
-i /var/www/html/prueba</code> para borrar <code
class="filename">prueba</code>.
</div></li><li><div class="para">
Si no necesita que corra <code class="systemitem">httpd</code>,
como usuario root de Linux corra el comando <code class="command">service
httpd stop</code> para detener a <code
class="systemitem">httpd</code>:
</div><pre class="screen"># /sbin/service httpd stop
Deteniendo httpd: [ OK ]
</pre></li></ol></div><div class="para">
Este ejemplo muestra la seguridad adicional agregada por SELinux. Aunque las reglas de
DAC permitieron al proceso <code class="systemitem">httpd</code>
acceder a <code class="filename">prueba</code> en el paso 7, dado
que estaba etiquetado con un tipo al que el proceso <code
class="systemitem">httpd</code> no tenía acceso, SELinux negó el
acceso. Después del paso 7, un error similar al siguiente se guarda en <code
class="filename">/var/log/messages</code>:
</div><pre class="screen">May 6 23:00:54 localhost setroubleshoot:
SELinux 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
</pre><div class="para">
Archivos log previos pueden usar el formato <code
class="filename">/var/log/messages.<em
class="replaceable"><code>YYYYMMDD</code></em></code>.
Cuando se ejecuta <span
class="application"><strong>syslog-ng</strong></span>, los
archivos log previos pueden usar el formato <code
class="filename">/var/log/messages.<em
class="replaceable"><code>X</code></em></code>. Si
los procesos <code class="systemitem">setroubleshootd</code> y
<code class="systemitem">auditd</code> están ejecutándose, errores
similares a los siguientes se registran en <code
class="filename">/var/log/audit/audit.log</code>:
</div><pre class="screen">type=AVC msg=audit(1220706212.937:70):
avc: denied { getattr } for pid=1904 comm="httpd"
path="/var/www/html/prueba" dev=sda5 ino=247576
scontext=unconfined_u:system_r:httpd_t:s0 tcontext=unconfined_u:object_r:samba_share_t:s0
tclass=file
type=SYSCALL msg=audit(1220706212.937:70): arch=40000003 syscall=196 success=no exit=-13
a0=b9e21da0 a1=bf9581dc a2=555ff4 a3=2008171 items=0 ppid=1902 pid=1904 auid=500 uid=48
gid=48 euid=48 suid=48 fsuid=48 egid=48 sgid=48 fsgid=48 tty=(none) ses=1
comm="httpd" exe="/usr/sbin/httpd"
subj=unconfined_u:system_r:httpd_t:s0 key=(null)
</pre><div class="para">
También, un error similar al siguiente se registra en <code
class="filename">/var/log/httpd/error_log</code>:
</div><pre class="screen">[Wed May 06 23:00:54 2009] [error]
[client <em
class="replaceable"><code>127.0.0.1</code></em>]
(13)Permission denied: access to /prueba denied
</pre><div class="note"><h2>Nota</h2><div
class="para">
En Fedora 11, los paquetes <span
class="package">setroubleshoot-server</span> y <span
class="package">audit</span> se instalan por defecto. Estos paquetes
incluyen los demonios <code
class="systemitem">setroubleshootd</code> y <code
class="systemitem">auditd</code> respectivamente. Estos demonios se
ejecutan por defecto. Detener alguno de ellos provoca un cambio de en dónde se graban las
negaciones de SELinux. Vaya a <a class="xref"
href="#sect-Security-Enhanced_Linux-Working_with_SELinux-Which_Log_File_is_Used"
title="5.2. Qué Archivo Log se usa">Sección 5.2, “Qué Archivo Log se
usa”</a> para más información.
</div></div></div><div class="section"
lang="es-ES"><div
class="titlepage"><div><div><h2 class="title"
id="sect-Security-Enhanced_Linux-Targeted_Policy-Unconfined_Processes">4.2.
Procesos no Confinados</h2></div></div></div><div
class="para">
Los procesos no confinados corren en dominios no confinados, por ejemplo, los programas
init (del arranque) corren en el dominio no confinado <code
class="computeroutput">initrc_t</code>, los procesos no confinados del
kernel corren en el dominio <code
class="computeroutput">kernel_t</code> y los usuarios no confinados
deLInux corren en el dominio <code
class="computeroutput">unconfined_t</code>. Para procesos no
confinados, las reglas de la política de SELinux son aplicadas, pero hay reglas de la
política que permiten que los procesos se ejecuten en dominios no confinados tengan casi
todos los accesos. Los procesos que corren en dominios no confinados terminan usando
exclusivamente las reglas DAC. Si un proceso no confinado 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 todavía se usan. SELinux es una mejora de seguridad sobre las
reglas DAC - no las reemplaza.
</div><div class="para">
El siguiente ejemplo muestra cómo el Servidor HTTP Apache (<code
class="systemitem">httpd</code>) puede acceder datos que se suponen son
para ser usados por Samba, cuando se corre no confinado. Nota: en Fedora 11, el proceso
<code class="systemitem">httpd</code> corre en el dominio confinado
<code class="computeroutput">httpd_t</code> por defecto. Este es un
ejemplo, y no debe usarse en producción. Se asume que los paquetes <span
class="package">httpd</span>, <span
class="package">wget</span>, <span
class="package">setroubleshoot-server</span>, y <span
class="package">audit</span> están instalados, que se usa la política
destinada de SELinux y que SELinux corre en modo obligatorio:
</div><div class="orderedlist"><ol><li><div
class="para">
Ejecute el comando <code class="command">sestatus</code> para
confirmar que SELinux está activado, se ejecuta en modo obligatorio y que la política
destinada se está usando:
</div><pre class="screen">$ /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
</pre><div class="para">
<code class="computeroutput">SELinux status: enabled</code> is
returned when SELinux is enabled. <code class="computeroutput">Current
mode: enforcing</code> is returned when SELinux is running in enforcing mode.
<code class="computeroutput">Policy from config file:
targeted</code> is returned when the SELinux targeted policy is used.
</div></li><li><div class="para">
Como usuario root de Linux, corra el comando <code
class="command">touch /var/www/html/prueba2</code> para crear un
archivo.
</div></li><li><div class="para">
Ejecute el comando <code class="command">ls -Z
/var/www/html/prueba2</code> para ver el contexto SELinux:
</div><pre class="screen">-rw-r--r-- root root
unconfined_u:object_r:httpd_sys_content_t:s0 /var/www/html/prueba2
</pre><div class="para">
Por defecto, los usuarios Linux corren no confinados en Fedora 11, razón por la cual
el archivo <code class="filename">prueba2</code> está etiquetado con
el usuario SELinux <code class="computeroutput">unconfined_u</code>.
RBAC se usa para procesos, no para archivos. Los roles no tienen un significado para
archivos - el rol <code class="computeroutput">object_r</code> es el
rol genérico que se usa para archivos (en almacenamiento persistente y sistemas de
archivos de red). Bajo el directorio <code
class="filename">/proc/</code>, los archivos relacionados con procesos
pueden usar el rol <code
class="computeroutput">system_r</code>.<sup>[<a
id="d0e1483" href="#ftn.d0e1483"
class="footnote">7</a>]</sup> El tipo <code
class="computeroutput">httpd_sys_content_t</code> permite al proceso
<code class="systemitem">httpd</code> acceder a este archivo.
</div></li><li><div class="para">
El comando <code class="command">chcon</code> reetiqueta
archivos; sin embargo, tales cambios de etiquetas no sobreviven cuando el sistema se
reetiqueta. Para que los cambios sobrevivan un reetiquetado del sistema, use el comando
<code class="command">semanage</code>, que se discute más adelante.
Como usuario root de Linux, corra el siguiente comando para cambiar el tipo a un tipo
usado por Samba:
</div><div class="para">
<code class="command">chcon -t samba_share_t
/var/www/html/prueba2</code>
</div><div class="para">
Ejecute el comando <code class="command">ls -Z
/var/www/html/prueba2</code> para ver los cambios:
</div><pre class="screen">-rw-r--r-- root root
unconfined_u:object_r:samba_share_t:s0 /var/www/html/prueba2
</pre></li><li><div class="para">
Corra el comando <code class="command">service httpd
status</code> para confirmar que el proceso <code
class="systemitem">httpd</code> no se está ejecutando:
</div><pre class="screen">$ /sbin/service httpd status
httpd está detenido
</pre><div class="para">
Si la salida difiere, ejecute <code class="command">service httpd
stop</code> como usuario root de Linux para detener el proceso <code
class="systemitem">httpd</code>:
</div><pre class="screen"># /sbin/service httpd stop
Deteniendo httpd: [ OK ]
</pre></li><li><div class="para">
Para hacer que el proceso <code class="systemitem">httpd</code>
corra no confinado, ejecute el siguiente comando como usuario root de Linux para cambiar
el tipo de <code class="filename">/usr/sbin/httpd</code>, a un tipo
que no transicione a un dominio confinado:
</div><div class="para">
<code class="command">chcon -t unconfined_exec_t
/usr/sbin/httpd</code>
</div></li><li><div class="para">
Ejecute el comando <code class="command">ls -Z
/usr/sbin/httpd</code> para confirmar que <code
class="filename">/usr/sbin/httpd</code> está etiquetado con el tipo
<code class="computeroutput">unconfined_exec_t</code>:
</div><pre class="screen">-rwxr-xr-x root root
system_u:object_r:unconfined_exec_t /usr/sbin/httpd
</pre></li><li><div class="para">
Como usuario root de Linux, ejecute el comando <code
class="command">service httpd start</code> para iniciar el proceso
<code class="systemitem">httpd</code>. La salida escomo sigue si
<code class="systemitem">httpd</code> inicia con éxito:
</div><pre class="screen"># /sbin/service httpd start
Iniciando httpd: [ OK ]
</pre></li><li><div class="para">
Ejecute el comando <code class="command">ps -eZ | grep
httpd</code> para ver si <code class="systemitem">httpd</code>
está corriendo en el dominio <code
class="computeroutput">unconfined_t</code>:
</div><pre class="screen">$ ps -eZ | grep httpd
unconfined_u:system_r:unconfined_t <em
class="replaceable"><code>7721</code></em> ? 00:00:00
httpd
unconfined_u:system_r:unconfined_t <em
class="replaceable"><code>7723</code></em> ? 00:00:00
httpd
unconfined_u:system_r:unconfined_t <em
class="replaceable"><code>7724</code></em> ? 00:00:00
httpd
unconfined_u:system_r:unconfined_t <em
class="replaceable"><code>7725</code></em> ? 00:00:00
httpd
unconfined_u:system_r:unconfined_t <em
class="replaceable"><code>7726</code></em> ? 00:00:00
httpd
unconfined_u:system_r:unconfined_t <em
class="replaceable"><code>7727</code></em> ? 00:00:00
httpd
unconfined_u:system_r:unconfined_t <em
class="replaceable"><code>7728</code></em> ? 00:00:00
httpd
unconfined_u:system_r:unconfined_t <em
class="replaceable"><code>7729</code></em> ? 00:00:00
httpd
unconfined_u:system_r:unconfined_t <em
class="replaceable"><code>7730</code></em> ? 00:00:00
httpd
</pre></li><li><div class="para">
Cambie al directorio donde su usuario Linux tenga permiso de escritura y ejecute el
comando <code class="command">wget
http://localhost/prueba2</code>.
A menos que hayan cambios en la configuración predeterminada, este comando debería tener
éxito:
</div><pre class="screen">--2009-05-07 01:41:10--
http://localhost/prueba2
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'
[ <=> ]--.-K/s in 0s
2009-05-07 01:41:10 (0.00 B/s) - `prueba2.1' saved [0/0]
</pre><div class="para">
Aunque el proceso <code class="systemitem">httpd</code> no
tiene acceso a archivos etiquetados con el tipo <code
class="computeroutput">samba_share_t</code>, <code
class="systemitem">httpd</code> se ejecuta en el dominio <code
class="computeroutput">unconfined_t</code>, y termina usando las reglas
DAC, como tal, el comando <code class="command">wget</code> tiene
éxito. Teniendo a <code class="systemitem">httpd</code> ejecutándose
en el dominio <code class="computeroutput">httpd_t</code>, el
comando <code class="command">wget</code> habría fallado.
</div></li><li><div class="para">
El comando <code class="command">restorecon</code> restaura el
contexto SELinux predeterminado de los archivos. Como usuario root de Linux, ejecute el
comando <code class="command">restorecon -v /usr/sbin/httpd</code>
para restaurar el contexto SELinux de <code
class="filename">/usr/sbin/httpd</code>:
</div><pre class="screen"># /sbin/restorecon -v /usr/sbin/httpd
restorecon reset /usr/sbin/httpd context
system_u:object_r:unconfined_notrans_exec_t:s0->system_u:object_r:httpd_exec_t:s0
</pre><div class="para">
Ejecute el comando <code class="command">ls -Z
/usr/sbin/httpd</code> para confirmar que <code
class="filename">/usr/sbin/httpd</code> está etiquetado con el tipo
<code class="computeroutput">httpd_exec_t</code>:
</div><pre class="screen">$ ls -Z /usr/sbin/httpd
-rwxr-xr-x root root system_u:object_r:httpd_exec_t /usr/sbin/httpd
</pre></li><li><div class="para">
Como usuario root de Linux, corra el comando <code
class="command">/sbin/service httpd restart</code> para reiniciar
<code class="systemitem">httpd</code>. Después de reiniciar, ejecute
<code class="command">ps -eZ | grep httpd</code> para confirmar que
<code class="systemitem">httpd</code> se está ejecutando en el
dominio confinado <code class="computeroutput">httpd_t</code>:
</div><pre class="screen"># /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
</pre></li><li><div class="para">
Como usuario root de Linux, corra el comando <code class="command">rm
-i /var/www/html/prueba2</code> para eliminar <code
class="filename">prueba2</code>.
</div></li><li><div class="para">
Si no necesita que corra <code class="systemitem">httpd</code>,
como usuario root de Linux corra el comando <code class="command">service
httpd stop</code> para detener a <code
class="systemitem">httpd</code>:
</div><pre class="screen"># /sbin/service httpd stop
Deteniendo httpd: [ OK ]
</pre></li></ol></div><div class="para">
Los ejemplos en estas secciones muestran cómo proteger los datos desde un proceso
confinado comprometido (protegido por SELinux), así como cuánto más accesible son los
datos para un atacante si el proceso comprometido estaba no confinado (no protegido por
SELinux).
</div></div><div class="section"
lang="es-ES"><div
class="titlepage"><div><div><h2 class="title"
id="sect-Security-Enhanced_Linux-Targeted_Policy-Confined_and_Unconfined_Users">4.3.
Usuarios Confinados y no Confinados</h2></div></div></div><div
class="para">
Cada usuario Linux se mapea a un usuario SELinux vía la política de SELinux. Esto
permite a los usuarios Linux heredar las restricciones sobre los usuarios SELinux. Este
mapeo de usuarios Linux se ve ejecutando el comando <code
class="command">semanage login -l</code> como usuario root de Linux:
</div><pre class="screen"># /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
</pre><div class="para">
En Fedora 11, los usuarios de Linux se mapean por defecto al ingreso <code
class="computeroutput">__default__</code> de SELinux (el cual se mapea
al usuario SELinux <code
class="computeroutput">unconfined_u</code>). Lo siguiente define el
mapeo por defecto:
</div><pre class="screen">__default__ unconfined_u
s0-s0:c0.c1023
</pre><div class="para">
El siguiente ejemplo muestra el agregado de un usuario de Linux nuevo y el mapeo de ese
usuario al usuario SELinux <code
class="computeroutput">unconfined_u</code>. Asume que el usuario root
corre no confinado, como es por defecto en Fedora 11:
</div><div class="orderedlist"><ol><li><div
class="para">
Como usuario root de Linux, ejecute el comando <code
class="command">/usr/sbin/useradd usuarionuevo</code> para crear un
nuevo usuario Linux con nombre usuarionuevo.
</div></li><li><div class="para">
As the Linux root user, run the <code class="command">passwd
newuser</code> command to assign a password to the Linux newuser user:
</div><pre class="screen"># passwd usuarionuevo
Changing password for user usuarionuevo.
New UNIX password: <em class="replaceable"><code>Enter a
password</code></em>
Retype new UNIX password: <em class="replaceable"><code>Enter the
same password again</code></em>
passwd: all authentication tokens updated successfully.
</pre></li><li><div class="para">
Salga de su sesión actual e ingrese como el usuario Linux usuarionuevo. Cuando
ingrese, pam_selinux mapea el usuario Linux a un usuario SELinux (en este caso,
unconfined_u), y configura el contexto SELinux resultante. El shell del usuario Linux es
entonces lanzado en este contexto. Corra el comando <code
class="command">id -Z</code> para ver el contexto de un usuario Linux:
</div><pre class="screen">[usuarionuevo@localhost ~]$ id -Z
unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
</pre></li><li><div class="para">
Salga de la sesión del usuarionuevo de Linux e ingrese con su cuenta. Si no quiere el
usuario usuarionuevo, ejecute el comando <code
class="command">/usr/sbin/userdel -r usuarionuevo</code> como usuario
root de Linux para eliminarlo, junto con su directorio de inicio.
</div></li></ol></div><div class="para">
Los usuarios Linux confinados y no confinados son sujeto a chequeso de memoria
escribible y ejecutable, y también son restringidos por MCS (y MLS, si la política MLS
está siendo usada). Si los usuarios Linux no confinados ejecutan una aplicación que la
política de SELinux define que puede transicionar del dominio <code
class="computeroutput">unconfined_t</code> a su propio dominio
confinado, los usuarios Linux no confinados están sujetos a restricciones de ese dominio
confinado. El beneficio de seguridad de esto es que, aunque un usuario Linux corra no
confinado, la aplicación permanece confinada, y por lo tanto, la explotación de una brecha
en la aplicación está limitada por la política. Nota: esto no protege al sistema del
usuario. En su defecto, el usuario y el sistema están siendo protegidos de posibles daños
causados por una brecha en la aplicación.
</div><div class="para">
Los siguientes usuarios SELinux confinados están disponibles en Fedora 11:
</div><div class="table"
id="tabl-Security-Enhanced_Linux-Confined_and_Unconfined_Users-SELinux_User_Capabilities"><div
class="table-contents"><table summary="Capacidades del Usuario
SELinux"
border="1"><colgroup><col/><col/><col/><col/><col/><col/></colgroup><thead><tr><th>
Usuario
</th><th>
Dominio
</th><th>
Sistema de Ventanas X
</th><th>
su y sudo
</th><th>
Ejecute en el directorio de inicio y /tmp/
</th><th>
Red
</th></tr></thead><tbody><tr><td>
guest_u
</td><td>
guest_t
</td><td align="center">
no
</td><td align="center">
no
</td><td align="center">
opcional
</td><td align="center">
no
</td></tr><tr><td>
xguest_u
</td><td>
xguest_t
</td><td align="center">
si
</td><td align="center">
no
</td><td align="center">
opcional
</td><td align="center">
sólo <span
class="application"><strong>Firefox</strong></span>
</td></tr><tr><td>
user_u
</td><td>
user_t
</td><td align="center">
si
</td><td align="center">
no
</td><td align="center">
opcional
</td><td align="center">
si
</td></tr><tr><td>
staff_u
</td><td>
staff_t
</td><td align="center">
si
</td><td align="center">
sólo <code class="command">sudo</code>
</td><td align="center">
opcional
</td><td align="center">
si
</td></tr></tbody></table></div><h6>Tabla 4.1.
Capacidades del Usuario SELinux</h6></div><br
class="table-break"/><div
class="itemizedlist"><ul><li><div class="para">
Los usuarios Linux en los dominios <code
class="computeroutput">guest_t</code>, <code
class="computeroutput">xguest_t</code> y <code
class="computeroutput">user_t</code> sólo pueden ejecutar aplicaciones
con ID de usuario (setuid) si la política de SELinux lo permite (tal como <code
class="command">passwd</code>). No podrán ejecutar <code
class="command">su</code> y <code
class="command">/usr/bin/sudo</code>
</div></li><li><div class="para">
Los usuarios Linux en el dominio <code
class="computeroutput">guest_t</code> no tienen acceso a la red, y sólo
pueden ingresar vía una terminal (incluyendo <code
class="systemitem">ssh</code>; pueden ingresaro por <code
class="systemitem">ssh</code>, pero no se pueden <code
class="systemitem">ssh</code> conectar a otro sistema).
</div></li><li><div class="para">
El único acceso de red que tienen los usuarios en el dominoi <code
class="computeroutput">xguest_t</code> es con <span
class="application"><strong>Firefox</strong></span>
conectándose a páginas web.
</div></li><li><div class="para">
Los usuarios Linux en los dominios <code
class="computeroutput">xguest_t</code>, <code
class="computeroutput">user_t</code> y <code
class="computeroutput">staff_t</code> pueden ingresar vía el Sistema de
Ventanas X o por una terminal.
</div></li><li><div class="para">
Por defecto, los usuarios Linux en el dominio <code
class="computeroutput">staff_t</code> no tienen permisos para ejecutar
aplicaciones con <code class="command">/usr/bin/sudo</code>. Estos
permisos deben ser configurados por un administrador.
</div></li></ul></div><div class="para">
Por defecto, los usuarios de Linux en los dominios <code
class="computeroutput">guest_t</code> y <code
class="computeroutput">xguest_t</code> no pueden ejecutar aplicaciones
en sus directorios de inicio o en <code
class="filename">/tmp/</code>, previniéndolos de ejecutar aplicaciones
(que hereden los permisos de los usuarios) en directorios a los que tienen acceso de
escritura. Esto ayuda a prevenir que aplicaciones maliciosas modifiquen archivos de los
usuarios.
</div><div class="para">
Por defecto, los usuarios Linux en los dominios <code
class="computeroutput">user_t</code> y <code
class="computeroutput">staff_t</code> pueden ejecutar aplicaciones en
sus directorios de inicio y en <code class="filename">/tmp/</code>.
Vaya a <a class="xref"
href="#sect-Security-Enhanced_Linux-Confining_Users-Booleans_for_Users_Executing_Applications"
title="6.6. Booleanos para que los Usuarios Ejecuten
Aplicaciones">Sección 6.6, “Booleanos para que los Usuarios Ejecuten
Aplicaciones”</a> para información sobre permitir y evitar que los usuarios ejecuten
aplicaciones en sus directorios de inicio y en <code
class="filename">/tmp/</code>.
</div></div><div class="footnotes"><br/><hr
width="100" align="left"/><div
class="footnote"><p><sup>[<a id="ftn.d0e1233"
href="#d0e1233" class="para">6</a>] </sup>
cuando se usan otras políticas, tal como MLS, se pueden usar otros roles, por
ejemplo <code class="computeroutput">secadm_r</code>.
</p></div><div
class="footnote"><p><sup>[<a id="ftn.d0e1483"
href="#d0e1483" class="para">7</a>] </sup>
Cuando se usan otras políticas, tal como la MLS, se pueden usar también otros roles,
por ejemplo el <code class="computeroutput">secadm_r</code>.
</p></div></div></div><div class="chapter"
lang="es-ES"><div
class="titlepage"><div><div><h2 class="title"
id="chap-Security-Enhanced_Linux-Working_with_SELinux">Capítulo 5. Trabajando
con SELinux</h2></div></div></div><div
class="toc"><dl><dt><span class="section"><a
href="#sect-Security-Enhanced_Linux-Working_with_SELinux-SELinux_Packages">5.1.
Paquetes de SELinux</a></span></dt><dt><span
class="section"><a
href="#sect-Security-Enhanced_Linux-Working_with_SELinux-Which_Log_File_is_Used">5.2.
Qué Archivo Log se usa</a></span></dt><dt><span
class="section"><a
href="#sect-Security-Enhanced_Linux-Working_with_SELinux-Main_Configuration_File">5.3.
Archivo de Configuración Principal</a></span></dt><dt><span
class="section"><a
href="#sect-Security-Enhanced_Linux-Working_with_SELinux-Enabling_and_Disabling_SELinux">5.4.
Habilitando y Deshabilitando
SELinux</a></span></dt><dd><dl><dt><span
class="section"><a
href="#sect-Security-Enhanced_Linux-Enabling_and_Disabling_SELinux-
Enabling_SELinux">5.4.1. Habilitando
SELinux</a></span></dt><dt><span
class="section"><a
href="#sect-Security-Enhanced_Linux-Enabling_and_Disabling_SELinux-Disabling_SELinux">5.4.2.
Deshabilitando
SELinux</a></span></dt></dl></dd><dt><span
class="section"><a
href="#sect-Security-Enhanced_Linux-Working_with_SELinux-SELinux_Modes">5.5.
Modos de SELinux</a></span></dt><dt><span
class="section"><a
href="#sect-Security-Enhanced_Linux-Working_with_SELinux-Booleans">5.6.
Booleanos</a></span></dt><dd><dl><dt><span
class="section"><a
href="#sect-Security-Enhanced_Linux-Booleans-Listing_Booleans">5.6.1.
Listando los Booleanos</a></span></dt><dt><span
class="section"><a
href="#sect-Security-Enhanced_Linux-Booleans-Configuring_Booleans">5.6.2.
Configurando los Booleanos</a></span></dt><dt><span
class="section"><a
href="#sect-Security-Enhanced_Linux-Booleans-Booleans_for_NFS_and_CIFS">5.6.3.
Booleanos para NFS y
CIFS</a></span></dt></dl></dd><dt><span
class="section"><a href="#sect-Secur
ity-Enhanced_Linux-Working_with_SELinux-SELinux_Contexts_Labeling_Files">5.7.
Contextos de SELinux - Etiquetado de
Archivos</a></span></dt><dd><dl><dt><span
class="section"><a
href="#sect-Security-Enhanced_Linux-SELinux_Contexts_Labeling_Files-Temporary_Changes_chcon">5.7.1.
Cambios Temporales: chcon</a></span></dt><dt><span
class="section"><a
href="#sect-Security-Enhanced_Linux-SELinux_Contexts_Labeling_Files-Persistent_Changes_semanage_fcontext">5.7.2.
Cambios Persistentes: semanage
fcontext</a></span></dt></dl></dd><dt><span
class="section"><a
href="#sect-Security-Enhanced_Linux-Working_with_SELinux-The_file_t_and_default_t_Types">5.8.
Los tipos file_t y default_t</a></span></dt><dt><span
class="section"><a
href="#sect-Security-Enhanced_Linux-Working_with_SELinux-Mounting_File_Systems">5.9.
Montaje de Sistemas de
Archivos</a></span></dt><dd><dl><dt><span
class="section"><a
href="#sect-Security-Enhanced_Linux-Mounting_File_Systems-Context_Mounts">5.9.1.
Montajes de Context
o</a></span></dt><dt><span class="section"><a
href="#sect-Security-Enhanced_Linux-Mounting_File_Systems-Changing_the_Default_Context">5.9.2.
Cambio del Contexto Predeterminado</a></span></dt><dt><span
class="section"><a
href="#sect-Security-Enhanced_Linux-Mounting_File_Systems-Mounting_an_NFS_File_System">5.9.3.
Montando un Sistema de Archivos NFS</a></span></dt><dt><span
class="section"><a
href="#sect-Security-Enhanced_Linux-Mounting_File_Systems-Multiple_NFS_Mounts">5.9.4.
Montajes NFS Múltiples</a></span></dt><dt><span
class="section"><a
href="#sect-Security-Enhanced_Linux-Mounting_File_Systems-Making_Context_Mounts_Persistent">5.9.5.
Haciendo Persistente los Contextos de
Montajes</a></span></dt></dl></dd><dt><span
class="section"><a
href="#sect-Security-Enhanced_Linux-Working_with_SELinux-Maintaining_SELinux_Labels_">5.10.
Mantención de las Etiquetas de SELinux
</a></span></dt><dd><dl><dt><span
class="section"><a
href="#sect-Security-Enhanced_Linux-Maintaining_SELinux_
Labels_-Copying_Files_and_Directories">5.10.1. Copia de Directorios y
Archivos</a></span></dt><dt><span
class="section"><a
href="#sect-Security-Enhanced_Linux-Maintaining_SELinux_Labels_-Moving_Files_and_Directories">5.10.2.
Movimiento de Archivos y Directorios</a></span></dt><dt><span
class="section"><a
href="#sect-Security-Enhanced_Linux-Maintaining_SELinux_Labels_-Checking_the_Default_SELinux_Context">5.10.3.
Chequeando el Contexto SELinux
Predeterminado</a></span></dt><dt><span
class="section"><a
href="#sect-Security-Enhanced_Linux-Maintaining_SELinux_Labels_-Archiving_Files_with_tar">5.10.4.
Archivando archivos con tar</a></span></dt><dt><span
class="section"><a
href="#sect-Security-Enhanced_Linux-Maintaining_SELinux_Labels_-Archiving_Files_with_star">5.10.5.
Archivando archivos con
tar</a></span></dt></dl></dd></dl></div><div
class="para">
Las siguientes secciones dan un breve repaso de los paquetes de SELinux principales en
Fedora 11; instalación y actualización de paquetes; qué archivos de registro se usan; el
archivo de configuración principal de SELinux; habilitación y deshabilitación de SELinux;
modos de SELinux; configuración de Booleanos; cambios temporales y permanentes de
etiquetas de archivos y directorios; superposición de las etiquetas de sistemas de
archivos con el comando <code class="command">mount</code>; montaje
de sistemas de archivos NFS; y cómo preservar contextos de SELinux cuando se copia y
compacta archivos y directorios.
</div><div class="section" lang="es-ES"><div
class="titlepage"><div><div><h2 class="title"
id="sect-Security-Enhanced_Linux-Working_with_SELinux-SELinux_Packages">5.1.
Paquetes de SELinux</h2></div></div></div><div
class="para">
En Fedora 11, los paquetes SELinux se instalan por defecto, a menos que hayan sido
manualmente excluídos durante la instalación. Por defecto, la política destinada de
SELinux se usa y SELinux corre en modo Obediente. La siguiente es una descripción breve de
los paquetes SELinux principales:
</div><div class="para">
<span class="package">policycoreutils</span>: provee utilitarios,
tales como <code class="command">semanage</code>, <code
class="command">restorecon</code>, <code
class="command">audit2allow</code>, <code
class="command">semodule</code>, <code
class="command">load_policy</code> y <code
class="command">setsebool</code>, para la operación y administración de
SELinux.
</div><div class="para">
<span class="package">policycoreutils-gui</span>: provee <code
class="command">system-config-selinux</code>, una herramienta gráfica
para la administración de SELinux.
</div><div class="para">
<span class="package">selinux-policy</span>: provee una Política
de Referencia de SELinux. La Política de Referencia de SELinux en una política de SELinux
completa, y se usa como base para otras políticas, tales como la política destinada de
SELinux. Vaya a la página <a
href="http://oss.tresys.com/projects/refpolicy">Política de Referencia de
SELinux</a> de Tresys Technology para más información. El paquete <span
class="package">selinux-policy-devel</span> provee herramientas de
desarrollo, tales como<code
class="command">/usr/share/selinux/devel/policygentool</code> y
<code class="command">/usr/share/selinux/devel/policyhelp</code>,
así como archivos de política ejemplos. Este paquete fue mezclado con el paquete <span
class="package">selinux-policy</span>.
</div><div class="para">
<span class="package">selinux-policy-<em
class="replaceable"><code>policy</code></em></span>:
provee las políticas de SELinux. Para la política destinada, instale <span
class="package">selinux-policy-targeted</span>. Para MLS, instale
<span class="package">selinux-policy-mls</span>. En Fedora 8, la
política estricta fue mezclada con la política destinada, permitiendo a los usuarios
confinados y no confinados coexistir en el mismo sistema.
</div><div class="para">
<span class="package">setroubleshoot-server</span>: traduce
mensajes de negaciones, producidos cuando el acceso es denegado por SELinux, en
descripciones detalladas que se ven con <code
class="command">sealert</code> (que se provee en este paquete).
</div><div class="para">
<span class="package">setools</span>, <span
class="package">setools-gui</span> y <span
class="package">setools-console</span>: estos paquetes proveen la <a
href="http://oss.tresys.com/projects/setools">Distribución de SEHerramientas
de Tresys Technology</a>, un número de herramientas y bibliotecas para analizar y
consultar la política, monitorear e informes de auditoría, y administración de contexto de
archivos <sup>[<a id="d0e2064" href="#ftn.d0e2064"
class="footnote">8</a>]</sup>. El paquete <span
class="package">setools</span> es un metapaquete para las
SEHerramientas. El paquete <span class="package">setools-gui</span>
provee las herramientas <code class="command">apol</code>, <code
class="command">seaudit</code> y <code
class="command">sediffx</code>. El paquete <span
class="package">setools-console</span> provee las herramientas de línea
de comando <code class="command">seaudit-report</code>, <code
class="command">sechecker</code>, <code
class="command">sediff<
/code>, <code class="command">seinfo</code>, <code
class="command">sesearch</code>, <code
class="command">findcon</code>, <code
class="command">replcon</code> y <code
class="command">indexcon</code>. Vaya a la página de las <a
href="http://oss.tresys.com/projects/setools">SEHerramientas de Tresys
Technology</a> para información sobre estas herramientas.
</div><div class="para">
<span class="package">libselinux-utils</span>: provee las
herramientas <code class="command">avcstat</code>, <code
class="command">getenforce</code>, <code
class="command">getsebool</code>, <code
class="command">matchpathcon</code>, <code
class="command">selinuxconlist</code>, <code
class="command">selinuxdefcon</code>, <code
class="command">selinuxenabled</code>, <code
class="command">setenforce</code>, <code
class="command">togglesebool</code>.
</div><div class="para">
<span class="package">mcstrans</span>: traduce niveles, tales
como <code class="computeroutput">s0-s0:c0.c1023</code>, a una forma
legible como <code
class="computeroutput">SystemLow-SystemHigh</code>. Este paquete no se
instala por defecto.
</div><div class="para">
Para instalar paquetes en Fedora 11, como usuario root de Linux ejecute el comando
<code class="command">yum install <em
class="replaceable"><code>nombre-de-paquete</code></em></code>.
Por ejemplo, para instalar el paquete <span
class="package">mcstrans</span>, ejecute el comando <code
class="command">yum install mcstrans</code>. Para actualizar todos los
paquetes instalados en Fedora 11, ejecute el comando <code
class="command">yum update</code>.
</div><div class="para">
Vaya a <a
href="http://docs.fedoraproject.org/yum/en/">Administración
de Software con yum</a><sup>[<a id="d0e2176"
href="#ftn.d0e2176" class="footnote">9</a>]</sup> para
más información sobre el uso de <code class="command">yum</code>
para administrar paquetes.
</div><div class="note"><h2>Nota</h2><div
class="para">
En versiones anteriores de Fedora, el paquete <span
class="package">selinux-policy-devel</span> es necesario cuando se crea
un módulo de política local con <code class="command">audit2allow
-M</code>.
</div></div></div><div class="section"
lang="es-ES"><div
class="titlepage"><div><div><h2 class="title"
id="sect-Security-Enhanced_Linux-Working_with_SELinux-Which_Log_File_is_Used">5.2.
Qué Archivo Log se usa</h2></div></div></div><div
class="para">
En Fedora 11, los paquetes <span
class="package">setroubleshoot-server</span> y <span
class="package">audit</span> se instalan si los paquetes no se eliminan
de la selección de paquetes predeterminada. Estos paquetes incluyen a los demonios
<code class="systemitem">setroubleshootd</code> y <code
class="systemitem">auditd</code> respectivamente. Estos demonios se
ejecutan por defecto.
</div><div class="para">
Los mensajes de negación de SELinux, tales como el siguiente, se escriben por defecto
en <code class="filename">/var/log/audit/audit.log</code>:
</div><pre class="screen">type=AVC msg=audit(1223024155.684:49):
avc: denied { getattr } for pid=2000 comm="httpd"
path="/var/www/html/archivo1" dev=dm-0 ino=399185
scontext=unconfined_u:system_r:httpd_t:s0 tcontext=system_u:object_r:samba_share_t:s0
tclass=file
</pre><div class="para">
También, si <code class="systemitem">setroubleshootd</code> está
ejecutándose, lo que es por defecto, los mensajes de negación desde <code
class="filename">/var/log/audit/audit.log</code> se traducen a una
forma más fácil de leer en <code
class="filename">/var/log/messages</code>:
</div><pre class="screen">May 7 18:55:56 localhost
setroubleshoot: SELinux is preventing httpd (httpd_t) "getattr" to
/var/www/html/archivo1 (samba_share_t). For complete SELinux messages. run sealert -l
de7e30d6-5488-466d-a606-92c9f40d316d
</pre><div class="para">
Los mensajes de negación se envían a una ubicación distinta, dependiendo de cuáles
demonios se están ejecutando:
</div><div class="segmentedlist"><table
border="0"><thead><tr
class="segtitle"><th>Daemon</th><th>Log
Location</th></tr></thead><tbody><tr
class="seglistitem"><td class="seg">auditd
on</td><td class="seg"><code
class="filename">/var/log/audit/audit.log</code></td></tr><tr
class="seglistitem"><td class="seg">auditd off; rsyslogd
on</td><td class="seg"><code
class="filename">/var/log/messages</code></td></tr><tr
class="seglistitem"><td class="seg">setroubleshootd,
rsyslogd, and auditd on</td><td class="seg"><code
class="filename">/var/log/audit/audit.log</code>. Easier-to-read denial
messages also sent to <code
class="filename">/var/log/messages</code></td></tr></tbody></table></div><div
class="formalpara"><h5 class="formalpara"
id="form-Security-Enhanced_Linux-Which_Log_File_is_Used-Starting_Daemons_Automatically">Iniciando
Demonios Automáticamente</h5>
Para configurar los demonios <code
class="systemitem">auditd</code>, <code
class="systemitem">rsyslogd</code>, y <code
class="systemitem">setroubleshootd</code> para que inicien
automáticamente al arrancar, corra los siguientes comandos como usuario root de Linux:
</div><pre class="screen">/sbin/chkconfig --levels 2345 auditd
on
</pre><pre class="screen">/sbin/chkconfig --levels 2345 rsyslog on
</pre><pre class="screen">/sbin/chkconfig --levels 345
setroubleshoot on
</pre><div class="para">
Use el comando <code class="command">service <em
class="replaceable"><code>nombre-de-servicio</code></em>
status</code> para chequear si estos servicios se están ejecutando, por ejemplo:
</div><pre class="screen">$ /sbin/service auditd status
auditd (pid <em
class="replaceable"><code>1318</code></em>) is running...
</pre><div class="para">
Si los servicos de arriba no se están ejecutando (<code
class="computeroutput"><em
class="replaceable"><code>nombre-de-servicio</code></em>
está detenido</code>), use el comando <code class="command">service
<em
class="replaceable"><code>nombre-de-servicio</code></em>
start</code> como usuario root de Linux para iniciarlos. Por ejemplo:
</div><pre class="screen"># /sbin/service setroubleshoot start
Starting setroubleshootd: [ OK ]
</pre></div><div class="section"
lang="es-ES"><div
class="titlepage"><div><div><h2 class="title"
id="sect-Security-Enhanced_Linux-Working_with_SELinux-Main_Configuration_File">5.3.
Archivo de Configuración Principal</h2></div></div></div><div
class="para">
El archivo <code class="filename">/etc/selinux/config</code> es
el archivo de configuración principal de SELinux. Controla el modo de SELinux y la
política de SELinux a usar:
</div><pre class="screen"># This file controls the state of
SELinux on the system.
# SELINUX= can take one of these three values:
# enforcing - SELinux security policy is enforced.
# permissive - SELinux prints warnings instead of enforcing.
# disabled - No SELinux policy is loaded.
SELINUX=enforcing
# SELINUXTYPE= can take one of these two values:
# targeted - Targeted processes are protected,
# mls - Multi Level Security protection.
SELINUXTYPE=targeted
</pre><div class="variablelist"><dl><dt><span
class="term"><code
class="computeroutput">SELINUX=enforcing</code></span></dt><dd><div
class="para">
La opción <code class="option">SELINUX</code> pone el modo en
el que corre SELinux. SELinux tiene tres modos: obediente, permisivo y deshabilitado.
Cuando se usa modo obediente, la política de SELinux es aplicada y SELinux niega el acceso
basándose en las reglas de políticas de SELinux. Los mensajes de negación se guardan.
Cuando se usa modo permisivo, la política de SELinux no es obediente. Los mensajes son
guardados. SELinux no niega el acceso, pero se guardan las negaciones de acciones que
hubieran sido negadas si SELinux estaba en modo obediente. Cuando se usa el modo
deshabilitado, SELinux está deshabilitado (el módulo de SELinux no se registra con el
kernel de Linux), y sólo se usan las reglas DAC.
</div></dd><dt><span class="term"><code
class="computeroutput">SELINUXTYPE=targeted</code></span></dt><dd><div
class="para">
La opción <code class="option">SELINUXTYPE</code> pone la
política SELinux a usar. La política Destinada es la predeterminada. Sólo cambie esta
opción si quiere usar la política MLS. Para usar la política MLS, instale el paquete
<span class="package">selinux-policy-mls</span>; configure <code
class="option">SELINUXTYPE=mls</code> en <code
class="filename">/etc/selinux/config</code>; y reinicie su sistema.
</div></dd></dl></div><div
class="important"><h2>Importante</h2><div
class="para">
Cuando los sistemas corren con SELinux en modo permisivo o deshabilitado, los usuarios
tiene permiso para etiquetar los archivos incorrectamente. También, los archivos creados
con SELinux deshabilitado no son etiquetados. Esto causa problemas cuando se cambia a modo
obediente. Para prevenir el etiquetado incorrecto o la falta de etiquetado, los sistemas
de archivos son automáticamente reetiquetados cuando se cambie desde el modo deshabilitado
al modo permisivo u obediente.
</div></div></div><div class="section"
lang="es-ES"><div
class="titlepage"><div><div><h2 class="title"
id="sect-Security-Enhanced_Linux-Working_with_SELinux-Enabling_and_Disabling_SELinux">5.4.
Habilitando y Deshabilitando SELinux</h2></div></div></div><div
class="para">
Use los comandos <code
class="command">/usr/sbin/getenforce</code> o <code
class="command">/usr/sbin/sestatus</code> para chequear el estado de
SELinux. El comando <code class="command">getenforce</code> devuelve
<code class="computeroutput">Obediente</code>, <code
class="computeroutput">Permisivo</code>, o <code
class="computeroutput">Deshabilitado</code>. El comando <code
class="command">getenforce</code> devuelve <code
class="computeroutput">Obediente</code> cuando SELinux está habilitado
(las reglas de la política de SELinux son aplicadas):
</div><pre class="screen">$ /usr/sbin/getenforce
Enforcing
</pre><div class="para">
El comando <code class="command">getenforce</code> devuelve
<code class="computeroutput">Permissive</code> cuando SELinux está
activado, pero las reglas de políticas de SELinux no están en obligatorio, y sólo se usan
las reglas DAC. El comando <code class="command">getenforce</code>
devuelve <code class="computeroutput">Disabled</code> si SELinux
está deshabilitado.
</div><div class="para">
El comando <code class="command">sestatus</code> devuelve el
estado de SELinux y la política de SELinux que se está usando:
</div><pre class="screen">$ /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
</pre><div class="para">
<code class="computeroutput">SELinux status: enabled</code> is
returned when SELinux is enabled. <code class="computeroutput">Current
mode: enforcing</code> is returned when SELinux is running in enforcing mode.
<code class="computeroutput">Policy from config file:
targeted</code> is returned when the SELinux targeted policy is used.
</div><div class="section" lang="es-ES"><div
class="titlepage"><div><div><h3 class="title"
id="sect-Security-Enhanced_Linux-Enabling_and_Disabling_SELinux-Enabling_SELinux">5.4.1.
Habilitando SELinux</h3></div></div></div><div
class="para">
En sistemas con SELinux deshabilitado, la opción <code
class="computeroutput">SELINUX=disabled</code> se configura en <code
class="filename">/etc/selinux/config</code>:
</div><pre class="screen"># This file controls the state of
SELinux on the system.
# SELINUX= can take one of these three values:
# enforcing - SELinux security policy is enforced.
# permissive - SELinux prints warnings instead of enforcing.
# disabled - No SELinux policy is loaded.
SELINUX=disabled
# SELINUXTYPE= can take one of these two values:
# targeted - Targeted processes are protected,
# mls - Multi Level Security protection.
SELINUXTYPE=targeted
</pre><div class="para">
También, el comando <code class="command">getenforce</code>
devuelve <code class="computeroutput">Disabled</code>:
</div><pre class="screen">$ /usr/sbin/getenforce
Disabled
</pre><div class="para">
Para habilitar SELinux:
</div><div class="orderedlist"><ol><li><div
class="para">
Use los comandos <code class="command">rpm -qa | grep
selinux</code>, <code class="command">rpm -q
policycoreutils</code> y <code class="command">rpm -qa | grep
setroubleshoot</code> para confirmar que los paquetes de SELinux están instalados.
esta guía asume que los siguientes paquetes están instalados: <span
class="package">selinux-policy-targeted</span>, <span
class="package">selinux-policy</span>, <span
class="package">libselinux</span>, <span
class="package">libselinux-python</span>, <span
class="package">libselinux-utils</span>, <span
class="package">policycoreutils</span>, <span
class="package">setroubleshoot</span>, <span
class="package">setroubleshoot-server</span>, <span
class="package">setroubleshoot-plugins</span>. Si estos paquetes no
están instalados, como usuario root de Linux, debe instalarlos con el comando <code
class="command">yum install <em
class="replaceable"><code>nombre-de-paquete</code></em></code>.
Los siguientes paquetes son opcionales: <s
pan class="package">policycoreutils-gui</span>, <span
class="package">setroubleshoot</span>, <span
class="package">selinux-policy-devel</span> y <span
class="package">mcstrans</span>.
</div><div class="para">
Después de instalar el paquete <span
class="package">setroubleshoot-server</span>, use el comando <code
class="command">/sbin/chkconfig --list setroubleshoot</code> para
confirmar que <code class="systemitem">setroubleshootd</code> se
inicia cuando el sistema corre en el nivel de ejecución <sup>[<a
id="d0e2504" href="#ftn.d0e2504"
class="footnote">10</a>]</sup> 3, 4, y 5:
</div><pre class="screen">$ /sbin/chkconfig --list
setroubleshoot
setroubleshoot 0:off 1:off 2:off 3:on 4:on 5:on 6:off
</pre><div class="para">
Si la salida difiere, como usuario root de Linux ejecute el comando <code
class="command">/sbin/chkconfig --levels 345 setroubleshoot on</code>.
Esto hace que <code class="systemitem">setroubleshootd</code> se
inicie automáticamente cuando el sistema esté en los niveles de ejecución 3, 4 y 5.
</div></li><li><div class="para">
Antes de activar SELinux, cada archivo en el sistema de archivo debe ser etiquetado
con un contexto de SELinux. Antes que esto ocurra, los dominios confinados pueden tener el
acceso denegado, impidiendo de que su sistema se inicie correctamente. Para prevenir esto,
configure <code class="computeroutput">SELINUX=permissive</code> en
<code class="filename">/etc/selinux/config</code>:
</div><pre class="screen"># This file controls the state of
SELinux on the system.
# SELINUX= can take one of these three values:
# enforcing - SELinux security policy is enforced.
# permissive - SELinux prints warnings instead of enforcing.
# disabled - No SELinux policy is loaded.
SELINUX=permissive
# SELINUXTYPE= can take one of these two values:
# targeted - Targeted processes are protected,
# mls - Multi Level Security protection.
SELINUXTYPE=targeted
</pre></li><li><div class="para">
Como usuario root de Linux, corra el comando <code
class="command">reboot</code> para reiniciar el sistema. Durante el
siguiente arranque, los sistemas de archivo son etiquetados. El proceso etiqueta todos los
archivos con un contexto de SELinux:
</div><pre class="screen">*** Warning -- SELinux targeted
policy relabel is required.
*** Relabeling could take a very long time, depending on file
*** system size and speed of hard drives.
****
</pre><div class="para">
Cada carácter <code class="computeroutput">*</code> en la
línea de abajo representa 1000 archivos que han sido etiquetados. En el ejemplo de arriba,
cuatro caracteres <code class="computeroutput">*</code> representan
4000 archivos etiquetados. El tiempo que toma reetiquetar todos los archivos depende del
número de archivos del sistema, y la velocidad de los discos rígidos. En sistemas
modernos, este proceso puede tomar 10 minutos.
</div></li><li><div class="para">
En modo permisivo, la política de SELinux no es aplicada, pero las negaciones se
guardan para las acciones que hubieran sido negadas si estaba corriendo en modo obediente.
Antes de cambiar a modo obediente, como usuario root de Linux, ejecute el comando <code
class="command">grep "SELinux está negando"
/var/log/messages</code> como usuario root de Linux para confirmar que SELinux no
negó acciones durante la última reiniciada. Si SELinux no negó acciones durante el último
arranque, este comando no devuelve nada. Vaya a <a class="xref"
href="#chap-Security-Enhanced_Linux-Troubleshooting" title="Capítulo 7.
Solución a Problemas">Capítulo 7, <i>Solución a
Problemas</i></a> para información para resolver problemas si SELinux negó el
acceso durante el arranque.
</div></li><li><div class="para">
Si no hay mensajes de negación en <code
class="filename">/var/log/messages</code>, configure <code
class="computeroutput">SELINUX=enforcing</code> en <code
class="filename">/etc/selinux/config</code>:
</div><pre class="screen"># This file controls the state of
SELinux on the system.
# SELINUX= can take one of these three values:
# enforcing - SELinux security policy is enforced.
# permissive - SELinux prints warnings instead of enforcing.
# disabled - No SELinux policy is loaded.
SELINUX=enforcing
# SELINUXTYPE= can take one of these two values:
# targeted - Targeted processes are protected,
# mls - Multi Level Security protection.
SELINUXTYPE=targeted
</pre></li><li><div class="para">
Reinicie su sistema. Después de reiniciar, confirme que <code
class="command">getenforce</code> devuelve <code
class="computeroutput">Enforcing</code>:
</div><pre class="screen">$ /usr/sbin/getenforce
Enforcing
</pre></li><li><div class="para">
Como usuario root de Linux, corra el comando <code
class="command">/usr/sbin/semanage login -l</code> para ver el mapeo
entre usuarios de SELinux y de Linux. La salida debe ser como la siguiente:
</div><pre class="screen">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
</pre></li></ol></div><div class="para">
Si éste no es el caso, ejecute los siguientes comandos como usuario root de Linux para
corregir los mapeos de usuario. Es seguro ignorar los mensajes <code
class="computeroutput">El usuario SELinux <em
class="replaceable"><code>nombre-de-usuario</code></em> ya
está definido</code> si es que aparecen, donde <em
class="replaceable"><code>nombre-de-usuario</code></em>
puede ser <code class="computeroutput">unconfined_u</code>, <code
class="computeroutput">guest_u</code>, o <code
class="computeroutput">xguest_u</code>:
</div><div class="orderedlist"><ol><li><div
class="para">
<pre class="screen">/usr/sbin/semanage usuario -a -S targeted -P usuario
-R "unconfined_r system_r" -r s0-s0:c0.c1023 unconfined_u
</pre>
</div></li><li><div class="para">
<pre class="screen">/usr/sbin/semanage login -m -S targeted -s
"unconfined_u" -r s0-s0:c0.c1023 __default__
</pre>
</div></li><li><div class="para">
<pre class="screen">/usr/sbin/semanage login -m -S targeted -s
"unconfined_u" -r s0-s0:c0.c1023 root
</pre>
</div></li><li><div class="para">
<pre class="screen">/usr/sbin/semanage usuario -a -S targeted -P usuario
-R guest_r guest_u
</pre>
</div></li><li><div class="para">
<pre class="screen">/usr/sbin/semanage usuario -a -S targeted -P usuario
-R xguest_r xguest_u
</pre>
</div></li></ol></div><div
class="important"><h2>Importante</h2><div
class="para">
Cuando los sistemas corren con SELinux en modo permisivo o deshabilitado, los
usuarios tiene permiso para etiquetar los archivos incorrectamente. También, los archivos
creados con SELinux deshabilitado no son etiquetados. Esto causa problemas cuando se
cambia a modo obediente. Para prevenir el etiquetado incorrecto o la falta de etiquetado,
los sistemas de archivos son automáticamente reetiquetados cuando se cambie desde el modo
deshabilitado al modo permisivo u obediente.
</div></div></div><div class="section"
lang="es-ES"><div
class="titlepage"><div><div><h3 class="title"
id="sect-Security-Enhanced_Linux-Enabling_and_Disabling_SELinux-Disabling_SELinux">5.4.2.
Deshabilitando SELinux</h3></div></div></div><div
class="para">
Para deshabilitar SELinux, configure <code
class="option">SELINUX=disabled</code> en <code
class="filename">/etc/selinux/config</code>:
</div><pre class="screen"># This file controls the state of
SELinux on the system.
# SELINUX= can take one of these three values:
# enforcing - SELinux security policy is enforced.
# permissive - SELinux prints warnings instead of enforcing.
# disabled - No SELinux policy is loaded.
SELINUX=disabled
# SELINUXTYPE= can take one of these two values:
# targeted - Targeted processes are protected,
# mls - Multi Level Security protection.
SELINUXTYPE=targeted
</pre><div class="para">
Reinicie su sistema. Después de reiniciar, confirme que <code
class="command">getenforce</code> devuelve <code
class="computeroutput">Disabled</code>:
</div><pre class="screen">$ /usr/sbin/getenforce
Disabled
</pre></div></div><div class="section"
lang="es-ES"><div
class="titlepage"><div><div><h2 class="title"
id="sect-Security-Enhanced_Linux-Working_with_SELinux-SELinux_Modes">5.5.
Modos de SELinux</h2></div></div></div><div
class="para">
SELinux tiene tres modos:
</div><div class="itemizedlist"><ul><li><div
class="para">
Obligatorio: la política de SELinux es obligatoria. SELinux niega el acceso basado en
las reglas de políticas de SELinux.
</div></li><li><div class="para">
Permisivo: la política de SELinux no es obligatoria. SELinux no niega el acceso, pero
se guardan las negaciones para acciones que hubieran sido negadas si el modo obligatorio
estaba activado.
</div></li><li><div class="para">
Deshabilitado: SELinux está deshabilitado. Sólo se usan las reglas DAC.
</div></li></ul></div><div class="para">
Use el comando <code class="command">/usr/sbin/setenforce</code>
para cambiar entre los modos obediente y permisivo. Los cambios hechos con <code
class="command">/usr/sbin/setenforce</code> no sobreviven a una
reiniciada. Para cambiar a modo obediente, como usuario root de Linux, ejecute el comando
<code class="command">/usr/sbin/setenforce 1</code>. Para cambiar a
modo permisivo, ejecute el comando <code
class="command">/usr/sbin/setenforce 0</code>. Use el comando <code
class="command">/usr/sbin/getenforce</code> para ver el modo de SELinux
actual.
</div><div class="para">
Los cambios de modo persistentes se cubren en <a class="xref"
href="#sect-Security-Enhanced_Linux-Working_with_SELinux-Enabling_and_Disabling_SELinux"
title="5.4. Habilitando y Deshabilitando SELinux">Sección 5.4, “Habilitando y
Deshabilitando SELinux”</a>.
</div></div><div class="section"
lang="es-ES"><div
class="titlepage"><div><div><h2 class="title"
id="sect-Security-Enhanced_Linux-Working_with_SELinux-Booleans">5.6.
Booleanos</h2></div></div></div><div
class="para">
Los booleanos permiten cambiar partes de la política de SELinux en tiempo de ejecución,
sin ningún conocimiento sobre la escritura de políticas de SELinux. Esto permite cambios,
como permitir el acceso de servicios a sistemas de archivo NFS, sin recargar o recompilar
la política de SELinux.
</div><div class="section" lang="es-ES"><div
class="titlepage"><div><div><h3 class="title"
id="sect-Security-Enhanced_Linux-Booleans-Listing_Booleans">5.6.1. Listando
los Booleanos</h3></div></div></div><div
class="para">
Para una lista de los Booleanos, una explicación de lo que son y de si están activos o
inactivos, ejecute el comando <code class="command">semanage boolean
-l</code> como usuario root de Linux. El siguiente ejemplo no lista todos los
Booleanos:
</div><pre class="screen"># /usr/sbin/semanage boolean -l
SELinux boolean Description
ftp_home_dir -> off Allow ftp to read and write files in the
user home directories
xen_use_nfs -> off Allow xen to manage nfs files
xguest_connect_network -> on Allow xguest to configure Network Manager
</pre><div class="para">
La columna <code class="computeroutput">SELinux boolean</code>
lista los nombres de Booleanos. La columna <code
class="computeroutput">Description</code> lista si el booleano está
activo (on) o inactivo (off) y lo que hacen.
</div><div class="para">
En el siguiente ejemplo, el Booleano <code
class="computeroutput">ftp_home_dir</code> está apagado, impidiendo al
demonio FTP (<code class="systemitem">vsftpd</code>) la lectura y
escritura de archivos en los directorios de inicio de los usuarios:
</div><pre class="screen">ftp_home_dir
-> off Permite a ftp leer y escribir al directorio de inicio de los usuarios
</pre><div class="para">
El comando <code class="command">getsebool -a</code> lista los
Booleanos, ya sea que estén activos o inactivos, pero no da una descripción de cada uno.
El siguiente ejemplo no lista todos los booleanos:
</div><pre class="screen">$ /usr/sbin/getsebool -a
allow_console_login --> off
allow_cvs_read_shadow --> off
allow_daemons_dump_core --> on
</pre><div class="para">
Ejecute el comando <code class="command">getsebool <em
class="replaceable"><code>nombre-de-booleano</code></em></code>
para listar solamente el estado del booleano <em
class="replaceable"><code>nombre-de-booleano</code></em>:
</div><pre class="screen">$ /usr/sbin/getsebool
allow_console_login
allow_console_login --> off
</pre><div class="para">
Una lista separada por espacio para listar los Booleanos múltiples:
</div><pre class="screen">$ getsebool allow_console_login
allow_cvs_read_shadow allow_daemons_dump_core
allow_console_login --> off
allow_cvs_read_shadow --> off
allow_daemons_dump_core --> on
</pre></div><div class="section"
lang="es-ES"><div
class="titlepage"><div><div><h3 class="title"
id="sect-Security-Enhanced_Linux-Booleans-Configuring_Booleans">5.6.2.
Configurando los Booleanos</h3></div></div></div><div
class="para">
El comando <code class="command">setsebool <em
class="replaceable"><code>nombre-de-booleano</code></em>
<em class="replaceable"><code>x</code></em></code>
activa o desactiva Booleanos, donde <em
class="replaceable"><code>nombre-de-booleano</code></em> es
un nombre de Booleano, y <em
class="replaceable"><code>x</code></em> es <code
class="option">on</code> para activar, u <code
class="option">off</code> para desactivar.
</div><div class="para">
El siguiente ejemplo muestra la configuración de Booleano <code
class="computeroutput">httpd_can_network_connect_db</code>:
</div><div class="orderedlist"><ol><li><div
class="para">
Por defecto, el booleano <code
class="computeroutput">httpd_can_network_connect_db</code> está
apagado, impidiendo a los scripts y módulos del Servidor HTTP Apache conectarse a
servidores de bases de datos:
</div><pre class="screen">$ /usr/sbin/getsebool
httpd_can_network_connect_db
httpd_can_network_connect_db --> off
</pre></li><li><div class="para">
Para permitir temporalmente a los scripts y módulos del Servidor HTTP Apache
conectarse a servidores de bases de datos, ejecute el comando <code
class="command">setsebool httpd_can_network_connect_db on</code> como
usuario root de Linux.
</div></li><li><div class="para">
Use el comando <code class="command">getsebool
httpd_can_network_connect_db</code> para verificar que el Booleano está activado:
</div><pre class="screen">$ /usr/sbin/getsebool
httpd_can_network_connect_db
httpd_can_network_connect_db --> on
</pre><div class="para">
Esto permite a los scripts y módulos del Servidor HTTP Apache conectarse a
servidores de bases de datos.
</div></li><li><div class="para">
Este cambio no es persistente entre reinicios. Para hacer los cambios persistentes,
corra el comando <code class="command">setsebool -P <em
class="replaceable"><code>boolean-name</code></em>
on</code> como usuario root de Linux:
</div><pre class="screen"># /usr/sbin/setsebool -P
httpd_can_network_connect_db on
</pre></li><li><div class="para">
Para revertir temporalmente el comportamiento por defecto, como usuario root de
Linux, corra el comando <code class="command">setsebool
httpd_can_network_connect_db off</code>. Para que los cambios sean persistentes
entre reiniciadas, ejecute el comando <code class="command">setsebool -P
httpd_can_network_connect_db off</code>.
</div></li></ol></div></div><div
class="section" lang="es-ES"><div
class="titlepage"><div><div><h3 class="title"
id="sect-Security-Enhanced_Linux-Booleans-Booleans_for_NFS_and_CIFS">5.6.3.
Booleanos para NFS y CIFS</h3></div></div></div><div
class="para">
Por defecto, los montajes NFS en el lado del cliente se etiquetan con el contexto
predeterminado definido por la política para sistemas de archivos NFS. En políticas
comúnes, este contexto predeterminado usa el tipo <code
class="computeroutput">nfs_t</code>. También, por defecto, los
compartidos de Samba en el lado del cliente se etiquetan con el contexto predeterminado
definido por la política. En políticas comúnes, este contexto predeterminado usa el tipo
<code class="computeroutput">cifs_t</code>.
</div><div class="para">
Dependiendo en la configuración de la política, los servicios pueden tener bloqueado
la lectura a archivos con la etiqueta de los tipos <code
class="computeroutput">nfs_t</code> o <code
class="computeroutput">cifs_t</code>. Esto puede prevenir que los
sistemas de archivo etiquetados con estas etiquetas se monten y sean leídos o exportados
por otros servicios. Hay Booleanos que se pueden poner en 1 o 0 para controlar qué
servicios pueden acceder los tipos <code
class="computeroutput">nfs_t</code> y <code
class="computeroutput">cifs_t</code>.
</div><div class="para">
Los comandos <code class="command">setsebool</code> y <code
class="command">semanage</code> se deben ejecutar como usuario root de
Linux. El comando <code class="command">setsebool -P</code> hace
persistentes a los cambios. No use la opción <code
class="option">-P</code> si no quiere que los cambios persistan entre
reiniciadas:
</div><div class="formalpara"><h5 class="formalpara"
id="form-Security-Enhanced_Linux-Booleans_for_NFS_and_CIFS-Apache_HTTP_Server">Servidor
HTTP Apache</h5>
Para permitir el acceso a sistemas de archivo NFS (archivos etiquetados con el tipo
<code class="computeroutput">nfs_t</code>):
</div><div class="para">
<code class="command">/usr/sbin/setsebool -P httpd_use_nfs
on</code>
</div><div class="para">
Para permitir el acceso a sistemas de archivos SAMBA (archivos etiquetados con el tipo
<code class="computeroutput">cifs_t</code>):
</div><div class="para">
<code class="command">/usr/sbin/setsebool -P httpd_use_cifs
on</code>
</div><div class="formalpara"><h5 class="formalpara"
id="form-Security-Enhanced_Linux-Booleans_for_NFS_and_CIFS-Samba">Samba</h5>
Para exportar sistemas de archivo NFS:
</div><div class="para">
<code class="command">/usr/sbin/setsebool -P samba_share_nfs
on</code>
</div><div class="formalpara"><h5 class="formalpara"
id="form-Security-Enhanced_Linux-Booleans_for_NFS_and_CIFS-FTP_vsftpd">FTP
(<code class="systemitem">vsftpd</code>)</h5>
Para permitir el acceso a sistemas de archivo NFS:
</div><div class="para">
<code class="command">/usr/sbin/setsebool -P allow_ftpd_use_nfs
on</code>
</div><div class="para">
Para permitir el acceso a sistemas de archivo Samba:
</div><div class="para">
<code class="command">/usr/sbin/setsebool -P allow_ftpd_use_cifs
on</code>
</div><div class="formalpara"><h5 class="formalpara"
id="form-Security-Enhanced_Linux-Booleans_for_NFS_and_CIFS-Other_Services">Otros
Servicios</h5>
Para una lista de los Booleanos relacionados con NFS para otros servicios:
</div><div class="para">
<code class="command">/usr/sbin/semanage boolean -l | grep
nfs</code>
</div><div class="para">
Para una lista de los Booleanos relacionados con SAMBA para otros servicios:
</div><div class="para">
<code class="command">/usr/sbin/semanage boolean -l | grep
cifs</code>
</div><div class="note"><h2>Nota</h2><div
class="para">
Estos Booleanos existen en la política de SELinux tal cual fueron puestos en Fedora
11. No pu eden existir en la política puesta en otras versiones de Fedora o de otros
sistemas operativos.
</div></div></div></div><div class="section"
lang="es-ES"><div
class="titlepage"><div><div><h2 class="title"
id="sect-Security-Enhanced_Linux-Working_with_SELinux-SELinux_Contexts_Labeling_Files">5.7.
Contextos de SELinux - Etiquetado de
Archivos</h2></div></div></div><div class="para">
En sistemas que corren SELinux, todos los procesos y archivos son etiquetados con una
etiqueta que contiene información de seguridad relevante. Esta información se llama
contexto de SELinux. Para archivos, esto se ve usando el comando <code
class="command">ls -Z</code>:
</div><pre class="screen">$ ls -Z archivo1
-rw-rw-r-- usuario1 grupo1 unconfined_u:object_r:user_home_t:s0 archivo1
</pre><div class="para">
En este ejemplo, SELinux provee un usuario (<code
class="computeroutput">unconfined_u</code>), un rol (<code
class="computeroutput">object_r</code>), un tipo (<code
class="computeroutput">user_home_t</code>) y un nivel (<code
class="computeroutput">s0</code>). Esta información se usa para tomar
decisiones sobre el control de acceso. En sistemas DAC, el control de acceso se basa en
los IDs de usuario y grupo de Linux. Las reglas de la política de SELinux se chequean
después de las reglas DAC. Las reglas de la política de SELinux no se usan si las reglas
DAC niegan el acceso antes.
</div><div class="para">
Hay muchos comandos para la administración del contexto de archivos de SELinux, como
por ejemplo <code class="command">chcon</code>, <code
class="command">semanage fcontext</code>, y <code
class="command">restorecon</code>.
</div><div class="section" lang="es-ES"><div
class="titlepage"><div><div><h3 class="title"
id="sect-Security-Enhanced_Linux-SELinux_Contexts_Labeling_Files-Temporary_Changes_chcon">5.7.1.
Cambios Temporales: chcon</h3></div></div></div><div
class="para">
El comando <code class="command">chcon</code> cambia el contexto
SELinux de los archivos. Estos cambios no sobreviven un reetiquetado del sistema de
archivo, o el comando <code class="command">/sbin/restorecon</code>.
La política de SELinux controla si los usuarios pueden modificar el contexto SELinux de
algún archivo. Cuando se usa <code class="command">chcon</code>, los
usuarios proveen toda o parte del contexto SELinux a cambiar. Un tipo de archivo
incorrecto es una causa común de negación de acceso de SELinux.
</div><div class="formalpara"><h5 class="formalpara"
id="form-Security-Enhanced_Linux-Temporary_Changes_chcon-Quick_Reference">Referencia
Rápida</h5>
<div class="itemizedlist"><ul><li><div
class="para">
Ejecute el comando <code class="command">chcon -t <em
class="replaceable"><code>tipo</code></em> <em
class="replaceable"><code>nombre-de-archivo</code></em></code>
para cambiar el tipo de archivo, donde <em
class="replaceable"><code>tipo</code></em> es el tipo, por
ejemplo <code class="computeroutput">httpd_sys_content_t</code>, y
<em
class="replaceable"><code>nombre-de-archivo</code></em> es
un nombre de archivo o de directorio.
</div></li><li><div class="para">
Ejecute el comando <code class="command">chcon -R -t <em
class="replaceable"><code>tipo</code></em> <em
class="replaceable"><code>nombre-de-directorio</code></em></code>
para cambiar el tipo de un directorio y su contenido, donde <em
class="replaceable"><code>tipo</code></em> es el tipo, por
ejemplo <code class="computeroutput">httpd_sys_content_t</code>, y
<em
class="replaceable"><code>nombre-de-directorio</code></em>
es un nombre de directorio.
</div></li></ul></div>
</div><div class="formalpara"><h5
class="formalpara"
id="form-Security-Enhanced_Linux-Temporary_Changes_chcon-Changing_a_Files_or_Directorys_Type">Cambiando
el Tipo de un Archivo o de un Directorio</h5>
El siguiente ejemplo muestra el cambio de tipo solamente en el contexto de SELinux:
</div><div class="orderedlist"><ol><li><div
class="para">
Ejecute el comando <code class="command">cd</code> sin
argumentos para cambiar a su directorio de inicio.
</div></li><li><div class="para">
Ejecute el comando <code class="command">touch archivo1</code>
para crear un archivo nuevo. Use el comando <code class="command">ls -Z
archivo1</code> para ver el contexto de SELinux del <code
class="filename">archivo1</code>:
</div><pre class="screen">$ ls -Z archivo1
-rw-rw-r-- usuario1 grupo1 unconfined_u:object_r:user_home_t:s0 archivo1
</pre><div class="para">
En este ejemplo, el contexto SELinux del <code
class="filename">archivo1</code> incluye el usuario <code
class="computeroutput">unconfined_u</code>, el rol <code
class="computeroutput">object_r</code>, el tipo <code
class="computeroutput">user_home_t</code>, y el nivel <code
class="computeroutput">s0</code>. Para una descripción de cada parte
del contexto SELinux, vaya a <a class="xref"
href="#chap-Security-Enhanced_Linux-SELinux_Contexts" title="Capítulo 3.
Contextos de SELinux">Capítulo 3, <i>Contextos de
SELinux</i></a>.
</div></li><li><div class="para">
EJecute el comando <code class="command">chcon -t samba_share_t
archivo1</code> para cambiar el tipo a <code
class="computeroutput">samba_share_t</code>. La opción <code
class="option">-t</code> sólo cambia el tipo. Vea el cambio con
<code class="command">ls -Z archivo1</code>:
</div><pre class="screen">$ ls -Z archivo1
-rw-rw-r-- usuario1 grupo1 unconfined_u:object_r:samba_share_t:s0 archivo1
</pre></li><li><div class="para">
Use el comando <code class="command">/sbin/restorecon -v
archivo1</code> para restaurar el contexto de SELinux del <code
class="filename">archivo1</code>. Use la opción <code
class="option">-v</code> para ver qué cambia:
</div><pre class="screen">$ /sbin/restorecon -v archivo1
restorecon reset archivo1 context
unconfined_u:object_r:samba_share_t:s0->system_u:object_r:user_home_t:s0
</pre><div class="para">
En este ejemplo, el tipo previo <code
class="computeroutput">samba_share_t</code>, se restaura al tipo
correcto <code class="computeroutput">user_home_t</code>. Cuando se
usa la política destinada (la política SELinux predeterminada en Fedora 11), el comando
<code class="command">/sbin/restorecon</code> lee los archivos en el
directorio <code
class="filename">/etc/selinux/targeted/contexts/files/</code> para ver
qué contexto de SELinux deben tener los archivos.
</div></li></ol></div><div class="para">
El ejemplo en esta sección funciona igual para directorios, por ejemplo, si <code
class="filename">archivo1</code> fuera un directorio.
</div><div class="formalpara"><h5 class="formalpara"
id="form-Security-Enhanced_Linux-Temporary_Changes_chcon-Changing_a_Directory_and_its_Contents_Types">Cambio
de un Directorio y sus Tipos de Contenidos</h5>
El siguiente ejemplo muestra la creación 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ón en este ejemplo se usa si quiere que el Servidor HTTP Apache use una raíz
de documento distinta (en vez de <code
class="filename">/var/www/html/</code>):
</div><div class="orderedlist"><ol><li><div
class="para">
Como usuario root de Linux, ejecute el comando <code
class="command">mkdir /web</code> para crear un directorio nuevo, y
luego el comando <code class="command">touch
/web/archivo{1,2,3}</code> para crear 3 archivos vacíos (<code
class="filename">archivo1</code>, <code
class="filename">archivo2</code> y <code
class="filename">archivo3</code>). El directorio <code
class="filename">/web/</code> y los archivos en él son etiquetados con
el tipo <code class="computeroutput">default_t</code>:
</div><pre class="screen"># 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
</pre></li><li><div class="para">
Como usuario root de Linux, corra el comando <code
class="command">chcon -R -t httpd_sys_content_t /web/</code> para
cambiar el tipo del directorio <code class="filename">/web/</code>
(y su contenido) a <code
class="computeroutput">httpd_sys_content_t</code>:
</div><pre class="screen"># 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
</pre></li><li><div class="para">
Como usuario root de Linux, corra el comando <code
class="command">/sbin/restorecon -R -v /web/</code> para restaurar los
contextos de SELinux predeterminados:
</div><pre class="screen"># /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_content_t:s0->system_u:object_r:default_t:s0
restorecon reset /web/archivo3 context
unconfined_u:object_r:httpd_sys_content_t:s0->system_u:object_r:default_t:s0
restorecon reset /web/archivo1 context
unconfined_u:object_r:httpd_sys_content_t:s0->system_u:object_r:default_t:s0
</pre></li></ol></div><div class="para">
Vaya a la página del manual de <span class="citerefentry"><span
class="refentrytitle">chcon</span>(1)</span> para más información
sobre <code class="command">chcon</code>.
</div><div class="note"><h2>Nota</h2><div
class="para">
La Obligación de Tipo es el control de permisos principal usado en la política
destinada de SELinux. Para la mayor parte, los usuarios y roles de SELinux se pueden
ignorar.
</div></div></div><div class="section"
lang="es-ES"><div
class="titlepage"><div><div><h3 class="title"
id="sect-Security-Enhanced_Linux-SELinux_Contexts_Labeling_Files-Persistent_Changes_semanage_fcontext">5.7.2.
Cambios Persistentes: semanage
fcontext</h3></div></div></div><div class="para">
El comando <code class="command">/usr/sbin/semanage
fcontext</code> cambia el contexto SELinux de los archivos. Cuando se usa la
política destinada, los cambios hechos con este comando se agregan al archivo <code
class="filename">/etc/selinux/targeted/contexts/files/file_contexts</code>
si los cambios so para archivos que están en <code
class="filename">file_contexts</code>, se agregan a <code
class="filename">file_contexts.local</code> para archivos nuevos y
directorios, como sería al crear un directorio <code
class="filename">/web/</code> nuevo. <code
class="command">setfiles</code>, que se usa cuando el sistema de
archivo es reetiquetado, y <code
class="command">/sbin/restorecon</code>, que restaura los contextos de
SELinux predeterminados, leen estos archivos, Lo que significa que los cambios hechos por
<code class="command">/usr/sbin/semanage fcontext</code> son
persistentes, aún si el sistema de archivo es reetiquetado. La política de SELinux
controla si los us
uarios pueden modificar el contexto de SELinux para cualquier archivo dado.
</div><div class="formalpara"><h5 class="formalpara"
id="form-Security-Enhanced_Linux-Persistent_Changes_semanage_fcontext-Quick_Reference">Referencia
Rápida</h5>
Para hacer que los cambios de contexto de SELinux sobrevivan un reetiquetado del
sistema de archivo:
</div><div class="orderedlist"><ol><li><div
class="para">
Ejecute el comando <code class="command">/usr/sbin/semanage fcontext
-a <em class="replaceable"><code>opciones</code></em>
<em
class="replaceable"><code>nombre-de-archivo</code></em>|<em
class="replaceable"><code>nombre-de-directorio</code></em></code>,
recuerde usar la dirección completa del archivo o del directorio.
</div></li><li><div class="para">
Ejecute el comando <code class="command">/sbin/restorecon -v <em
class="replaceable"><code>nombre-de-archivo</code></em>|<em
class="replaceable"><code>nombre-de-directorio</code></em></code>
para aplicar los cambios de contexto.
</div></li></ol></div><div
class="formalpara"><h5 class="formalpara"
id="form-Security-Enhanced_Linux-Persistent_Changes_semanage_fcontext-Changing_a_Files_Type">Cambiando
un Tipo de archivo</h5>
El siguiente ejemplo muestra el cambio de tipo de un archivo, sin tocar otros
atributos del contexto de SELinux:
</div><div class="orderedlist"><ol><li><div
class="para">
Como usuario root de Linux, ejecute el comando <code
class="command">touch /etc/archivo1</code> para crear un archivo nuevo.
Por defecto, los archivos recién creados en el directorio <code
class="filename">/etc/</code> se etiquetan con el tipo <code
class="computeroutput">etc_t</code>:
</div><pre class="screen"># ls -Z /etc/archivo1
-rw-r--r-- root root unconfined_u:object_r:etc_t:s0 /etc/archivo1
</pre></li><li><div class="para">
Como usuario root de Linux, ejecute el comando <code
class="command">/usr/sbin/semanage fcontext -a -t samba_share_t
/etc/archivo1</code> para cambiar el tipo del <code
class="filename">archivo1</code> a <code
class="computeroutput">samba_share_t</code>. La opción <code
class="option">-a</code> agrega un registro nuevo, y la opción <code
class="option">-t</code> define un tipo (<code
class="computeroutput">samba_share_t</code>). Nota: al ejecutar este
comando no se cambia directamente el tipo - el <code
class="filename">archivo1</code> todavía es del tipo <code
class="computeroutput">etc_t</code>:
</div><pre class="screen"># /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
</pre><div class="para">
El comando <code class="command">/usr/sbin/semanage fcontext -a -t
samba_share_t /etc/archivo1</code> agrega la siguiente entrada a <code
class="filename">/etc/selinux/targeted/contexts/files/file_contexts.local</code>:
</div><pre class="screen">/etc/archivo1
unconfined_u:object_r:samba_share_t:s0
</pre></li><li><div class="para">
Como usuario root de Linux, ejecute el comando <code
class="command">/sbin/restorecon -v /etc/archivo1</code> para cambiar
el tipo. Dado que el comando <code class="command">semanage</code>
agregó una entrada a <code
class="filename">file.contexts.local</code> para <code
class="filename">/etc/archivo1</code>, el comando <code
class="command">/sbin/restorecon</code> cambia el tipo a <code
class="computeroutput">samba_share_t</code>:
</div><pre class="screen"># /sbin/restorecon -v /etc/archivo1
restorecon reset /etc/archivo1 context
unconfined_u:object_r:etc_t:s0->system_u:object_r:samba_share_t:s0
</pre></li><li><div class="para">
Como usuario root de Linux, ejecute el comando <code
class="command">rm -i /etc/archivo1</code> para borrar el <code
class="filename">archivo1</code>.
</div></li><li><div class="para">
Como usuario root de Linux, ejecute el comando <code
class="command">/usr/sbin/semanage fcontext -d /etc/archivo1</code>
para eliminar el contexto agregado para <code
class="filename">/etc/archivo1</code>. Cuando el contexto se elimina,
ejecutando <code class="command">restorecon</code> cambia el tipo a
<code class="computeroutput">etc_t</code>, en vez de <code
class="computeroutput">samba_share_t</code>.
</div></li></ol></div><div
class="formalpara"><h5 class="formalpara"
id="form-Security-Enhanced_Linux-Persistent_Changes_semanage_fcontext-Changing_a_Directorys_Type">Cambiando
un Tipo de Directorio</h5>
El siguiente ejemplo muestra la creación de un directorio nuevo y el cambio del tipo
de archivo del directorio a un tipo usado por el Servidor HTTP Apache:
</div><div class="orderedlist"><ol><li><div
class="para">
Como usuario root de LInux, ejecute el comando <code
class="command">mkdir /web</code> para crear un directorio nuevo. Este
directorio se etiqueta con el tipo <code
class="computeroutput">default_t</code>:
</div><pre class="screen"># ls -dZ /web
drwxr-xr-x root root unconfined_u:object_r:default_t:s0 /web
</pre><div class="para">
La opción <code class="option">-d</code> de <code
class="command">ls</code> hace que <code
class="command">ls</code> liste la información de un directorio, en vez
de su contenido, y la opción <code class="option">-Z</code> hace que
<code class="command">ls</code> muestre el contexto de SELinux (en
este ejemplo, <code
class="computeroutput">unconfined_u:object_r:default_t:s0</code>).
</div></li><li><div class="para">
Como usuario root de Linux, ejecute el comando <code
class="command">/usr/sbin/semanage fcontext -a -t httpd_sys_content_t
/web</code> para cambiar el tipo de <code
class="filename">/web/</code> a <code
class="computeroutput">httpd_sys_content_t</code>. La opción <code
class="option">-a</code> agrega un nuevo registro, y la opción <code
class="option">-t</code> define un tipo (<code
class="computeroutput">httpd_sys_content_t</code>). Nota: la ejecución
de este comando no cambia el tipo directamente - <code
class="filename">/web/</code> todavía tiene la etiqueta de tipo
<code class="computeroutput">default_t</code>:
</div><pre class="screen"># /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
</pre><div class="para">
El comando <code class="command">/usr/sbin/semanage fcontext -a -t
httpd_sys_content_t /web</code> agrega la siguiente entrada a <code
class="command">/etc/selinux/targeted/contexts/files/file_contexts.local</code>:
</div><pre class="screen">/web
unconfined_u:object_r:httpd_sys_content_t:s0
</pre></li><li><div class="para">
Como usuario root de Linux, ejecute el comando <code
class="command">/sbin/restorecon -v /web</code> para cambiar el tipo.
Como el comando <code class="command">semanage</code> agregó una
entrada a <code class="filename">file.contexts.local</code> para
<code class="filename">/web</code>, el comando <code
class="command">/sbin/restorecon</code> cambia el tipo a <code
class="computeroutput">httpd_sys_content_t</code>:
</div><pre class="screen"># /sbin/restorecon -v /web
restorecon reset /web context
unconfined_u:object_r:default_t:s0->system_u:object_r:httpd_sys_content_t:s0
</pre><div class="para">
Por defecto, los archivos y directorios recién creados heredan el tipo SELinux de
sus carpetas padres. Cuando se usó este ejemplo, y antes de eliminar el contexto SELinux
agregado para <code class="filename">/web/</code>, los archivos y
directorios creados en el directorio <code
class="filename">/web/</code> fueron etiquetados con el tipo <code
class="computeroutput">httpd_sys_content_t</code>.
</div></li><li><div class="para">
Como usuario root de Linux, ejecute el comando <code
class="command">/usr/sbin/semanage fcontext -d /web</code> para borrar
el contexto agregado para <code class="filename">/web/</code>.
</div></li><li><div class="para">
Como usuario root de Linux, ejecute el comando <code
class="command">/sbin/restorecon -v /web</code> para restaurar el
contexto predeterminado de SELinux.
</div></li></ol></div><div
class="formalpara"><h5 class="formalpara"
id="form-Security-Enhanced_Linux-Persistent_Changes_semanage_fcontext-Changing_a_Directory_and_its_Contents_Types">Cambio
de un Directorio y sus Tipos de Contenidos</h5>
El siguiente ejemplo muestra la creación 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ón en este ejemplo se usa si quiere que el Servidor HTTP Apache use una raíz
de documento distinta (en vez de <code
class="filename">/var/www/html/</code>):
</div><div class="orderedlist"><ol><li><div
class="para">
Como usuario root de Linux, ejecute el comando <code
class="command">mkdir /web</code> para crear un directorio nuevo, y
luego el comando <code class="command">touch
/web/archivo{1,2,3}</code> para crear 3 archivos vacíos (<code
class="filename">archivo1</code>, <code
class="filename">archivo2</code> y <code
class="filename">archivo3</code>). El directorio <code
class="filename">/web/</code> y los archivos en él son etiquetados con
el tipo <code class="computeroutput">default_t</code>:
</div><pre class="screen"># 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
</pre></li><li><div class="para">
Como usuario root de Linux, ejecute el comando <code
class="command">/usr/sbin/semanage fcontext -a -t httpd_sys_content_t
"/web(/.*)?"</code> para cambiar el tipo del directorio <code
class="filename">/web/</code> junto con los archivos dentro de él, a
<code class="computeroutput">httpd_sys_content_t</code>. La opción
<code class="option">-a</code> agrega un registro nuevo, y la opción
<code class="option">-t</code> define un tipo(httpd_sys_content_t).
La expresión regular <code
class="computeroutput">"/web(/.*)?"</code> hace que el
comando <code class="command">semanage</code> aplique los cambios al
directorio <code class="filename">/web/</code>, así como a los
archivos dentro de él. Nota: la ejecución de este comando no cambia el tipo directamente -
<code class="filename">/web/</code> y los archivos dentro de él
todavía tienen la etiqueta del tipo <code
class="computeroutput">default_t</code>:
</div><pre class="screen"># 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
</pre><div class="para">
El comando <code class="command">/usr/sbin/semanage fcontext -a -t
httpd_sys_content_t "/web(/.*)?"</code> agrega una entrada a <code
class="filename">/etc/selinux/targeted/contexts/files/file_contexts.local</code>:
</div><pre class="screen">/web(/.*)?
system_u:object_r:httpd_sys_content_t:s0
</pre></li><li><div class="para">
Como usuario root de LInux, ejecute el comando <code
class="command">/sbin/restorecon -R -v /web</code> para cambiar elt ipo
del directorio <code class="filename">/web/</code>, junto con los
archivos dentro de él. La opción <code class="option">-R</code>
significa recursivo, es decir, todos los archivos y directorios dentro del directorio
<code class="filename">/web/</code> se etiquetarán con el tipo
<code class="computeroutput">httpd_sys_content_t</code>. Dado que el
comando <code class="command">semanage</code> agregó una entrada en
<code class="filename">file.contexts.local</code> para <code
class="computeroutput">/web(/.*)?</code>, el comando <code
class="command">/sbin/restorecon</code> los tipos a <code
class="computeroutput">httpd_sys_content_t</code>:
</div><pre class="screen"># /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->system_u:object_r:httpd_sys_content_t:s0
restorecon reset /web/archivo3 context
unconfined_u:object_r:default_t:s0->system_u:object_r:httpd_sys_content_t:s0
restorecon reset /web/archivo1 context
unconfined_u:object_r:default_t:s0->system_u:object_r:httpd_sys_content_t:s0
</pre><div class="para">
Por defecto, los archivos y directorios recién creados heredan el tipo SELinux de
sus padres. En este ejemplo, los archivos y directorios creado en el directorio <code
class="filename">/web/</code> se etiquetarán con el tipo <code
class="computeroutput">httpd_sys_content_t</code>.
</div></li><li><div class="para">
Como usuario root de Linux, ejecute el comando <code
class="command">/usr/sbin/semanage fcontext -d
"/web(/.*)?"</code> para eliminar el contexto agregado para <code
class="computeroutput">"/web(/.*)?"</code>.
</div></li><li><div class="para">
Como usuario root de Linux, ejecute el comando <code
class="command">/sbin/restorecon -R -v /web</code> para restaurar el
contexto predeterminado de SELinux.
</div></li></ol></div><div
class="formalpara"><h5 class="formalpara"
id="form-Security-Enhanced_Linux-Persistent_Changes_semanage_fcontext-Deleting_an_added_Context">Borrado
de un Contexto agregado</h5>
El siguiente ejemplo muestra el agregado y su eliminación del contexto de SELinux:
</div><div class="orderedlist"><ol><li><div
class="para">
Como usuario root de Linux, ejecute el comando <code
class="command">/usr/sbin/semanage fcontext -a -t httpd_sys_content_t
/prueba</code>. El directorio <code
class="filename">/prueba/</code> no tiene que existir. Este comando
agrega el siguiente contexto a <code
class="filename">/etc/selinux/targeted/contexts/files/file_contexts.local</code>:
</div><pre class="screen">/prueba
system_u:object_r:httpd_sys_content_t:s0
</pre></li><li><div class="para">
Para eliminar el contexto, como usuario root de Linux, ejecute el comando <code
class="command">/usr/sbin/semanage fcontext -d <em
class="replaceable"><code>nombre-de-archivo</code></em>|<em
class="replaceable"><code>nombre-de-directorio</code></em></code>,
donde <em
class="replaceable"><code>nombre-de-archivo</code></em>|<em
class="replaceable"><code>nombre-de-directorio</code></em>
es la primera parte en <code
class="filename">file_contexts.local</code>. El siguiente es un ejemplo
de un contexto en <code
class="filename">file_contexts.local</code>:
</div><pre class="screen">/prueba
system_u:object_r:httpd_sys_content_t:s0
</pre><div class="para">
Siendo la primera parte <code
class="computeroutput">/prueba</code>. Para evitar que el directorio
<code class="filename">/prueba/</code> se etiquete con <code
class="computeroutput">httpd_sys_content_t</code> después de ejecutar
<code class="command">/sbin/restorecon</code>, o después de un
reetiquetado del sistema, ejecute el siguiente comando como usuario root de Linux para
eliminar el contexto de <code
class="filename">file_contexts.local</code>:
</div><div class="para">
<code class="command">/usr/sbin/semanage fcontext -d
/prueba</code>
</div></li></ol></div><div class="para">
Si el contexto es parte de una expresión regular, por ejemplo <code
class="computeroutput">/web(/.*)?</code>, use las comillas para
encerrar la expresión regular:
</div><div class="para">
<code class="command">/usr/sbin/semanage fcontext -d
"/web(/.*)?"</code>
</div><div class="para">
Vaya a la página de manual de <span class="citerefentry"><span
class="refentrytitle">semanage</span>(8)</span> para información
adicional sobre <code class="command">/usr/sbin/semanage</code>.
</div><div
class="important"><h2>Importante</h2><div
class="para">
Cuando se cambia el contexto de SELinux con <code
class="command">/usr/sbin/semanage fcontext -a</code>, use la dirección
completa del archivo o directorio para evitar etiquetar mal los archivos después de un
reetiquetado del sistema de archivo, o después ejecutar el comando <code
class="command">/sbin/restorecon</code>.
</div></div></div></div><div class="section"
lang="es-ES"><div
class="titlepage"><div><div><h2 class="title"
id="sect-Security-Enhanced_Linux-Working_with_SELinux-The_file_t_and_default_t_Types">5.8.
Los tipos file_t y default_t</h2></div></div></div><div
class="para">
En sistemas de archivo que soportan atributos extendidos, cuando se accede a un archivo
en disco al que le falta el contexto de SELinux, se trata como si tuviera un contexto
predeterminado tal como fue definido en la política de SELinux. En políticas comunes, este
conexto por defecto usa el tipo <code
class="computeroutput">file_t</code>. Este debería ser el único uso de
este tipo, por lo que los archivos sin un contexto en el disco se podrían distinguir en la
política, y generalmente mantenerse inaccesibles a dominios confinados. El tipo <code
class="computeroutput">file_t</code> no debería existir en sistemas de
archivo correctamente etiquetados, porque todos los archivos dado que todos los archivos
en un sistema corriendo SELinux deberían tener un contexto de SELinux, y el tipo <code
class="computeroutput">file_t</code> no sebería usarse en la
configuración de contexto de archivos <sup>[<a id="d0e3749"
href="#ftn.d0e3749" class="footnote">11</a>]</sup>.
</div><div class="para">
El tipo <code class="computeroutput">default_t</code> se usa en
archivos que no coinciden con ningún otro patrón en la configuración de contexto de
archivo, por lo que tales archivos se pueden distinguir de aquellos que no tienen un
contexto en el disco, y generalmente mantenerse inaccesibles a los dominios confinados. Si
crea un directorio de alto nivel, tal como <code
class="filename">/midir/</code>, este directorio puede ser etiquetado
con el tipo <code class="computeroutput">default_t</code>. Si los
servicios necesitan acceder a tal directorio, actualice la configuración de contextos de
archivo para esta ubicación. Vaya a <a class="xref"
href="#sect-Security-Enhanced_Linux-SELinux_Contexts_Labeling_Files-Persistent_Changes_semanage_fcontext"
title="5.7.2. Cambios Persistentes: semanage fcontext">Sección 5.7.2,
“Cambios Persistentes: semanage fcontext”</a> para más detalles sobre agragado de un
contexto para la configuración de contexto de archivos.
</div></div><div class="section"
lang="es-ES"><div
class="titlepage"><div><div><h2 class="title"
id="sect-Security-Enhanced_Linux-Working_with_SELinux-Mounting_File_Systems">5.9.
Montaje de Sistemas de Archivos</h2></div></div></div><div
class="para">
Por defecto, cuando un sistema de archivo que soporta atributos extendidos se monta, el
contexto de seguridad para cada archivo se obtiene de atributo extendido <span
class="emphasis"><em>security.selinux</em></span> del
archivo. A los archivos en sistemas de archivo que no dan soporte a atributos extendidos
se les asigna un único contexto de seguridad predeterminado desde la configuración de la
política, basada en el tipo de sistema de archivo.
</div><div class="para">
Use el comando <code class="command">mount -o context</code> para
superponer los atributos extendidos actuales, o para especificar uno distinto y por
defecto para sistemas de archivo que no dan soporte a atributos extendidos. Esto es útil
si no confía en que un sistema de archivo provea los atributos correctos, por ejemplo,
medios removibles en sistemas múltiples. El comando <code
class="command">mount -o context</code> también se puede ussar para dar
soporte al etiquetado de sistemas de archivos que no soportan atributos extendidos, tales
como la Tabla de Ubicación de Archivos (FAT) o los sistemas de archivo NFS. El contexto
especificado con la opción <code class="option">context</code> no se
escribe al disco: los contextos originales son preservados, y se ven cuando se lo monta
sin la opción <code class="option">context</code> (si el sistema de
archivo ya tenía sopoorte para atributos extendidos).
</div><div class="para">
Para más información sobre el etiquetado de sistemas de archivo, vaya al artículo de
James Morris "Etiquetado del Sistema de Archivo en SELinux": <a
href="http://www.linuxjournal.com/article/7426">http://www.l...;.
</div><div class="section" lang="es-ES"><div
class="titlepage"><div><div><h3 class="title"
id="sect-Security-Enhanced_Linux-Mounting_File_Systems-Context_Mounts">5.9.1.
Montajes de Contexto</h3></div></div></div><div
class="para">
Para montar un sistema de archivo con el contexto especificado, superponiendo los
contextos existentes si existieran, o para especificar uno predeterminado distinto para un
sistema de archivo que no da soporte para atributos extendidos, como usuario root de
Linux, use el comando <code class="command">mount -o context=<em
class="replaceable"><code>SELinux_user:role:type:level</code></em></code>
cuando monte el sistema de archivo deseado. Los cambios de contexto no se graban en el
disco. Por defecto, los montajes NFS en el lado del cliente se etiquetan con un contexto
distinto definido por una política para sistemas de archivo NFS. En políticas comunes,
este contexto predeterminado usa el tipo <code
class="computeroutput">nfs_t</code>. Sin las opciones de montaje
adicionales, esto podría evitar el que sistemas de archivo NFS sean compartidos vía otros
servicios, como el Servidor HTTP Apache. El siguiente ejemplo monta un sistema de archivo
NFS para que se pueda acceder
a través del Servidor HTTP Apache:
</div><div class="para">
<pre class="screen"># mount servidor:/export /local/mount/point -o\
context="system_u:object_r:httpd_sys_content_t:s0"
</pre>
</div><div class="para">
Los archivos y directorios recién creados en este sistema de archivo parecen tener un
contexto SELinux especificado con <code class="option">-o
contexto</code>; sin embargo, dado que los cambios del contexto no se escriben en el
disco en estas situaciones, el contexto especificado por la opción <code
class="option">-o contexto</code> sólo se mantiene si se usa la misma
opción en la siguiente montada, y si además se especifica el mismo contexto.
</div><div class="para">
La Obligación de Tipo es el control de permiso principal en la política 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 <code
class="option">-o context</code>, use el usuario SELinux <code
class="computeroutput">system_u</code> y el rol <code
class="computeroutput">object_r</code>, y concéntrese en el tipo. Si no
está usando la política MLS o seguridad multi-categoría, use el nivel <code
class="computeroutput">s0</code>.
</div><div class="note"><h2>Nota</h2><div
class="para">
Cuando se monta un sistema de archivo con la opción <code
class="option">context</code>, los cambios de contexto (por usuarios y
procesos) son prohibidos. Por ejemplo, ejecutando <code
class="command">chcon</code> en un sistema de archivo montado con la
opción <code class="option">context</code> resulta en un error de
<code class="computeroutput">Operación no soportada</code>.
</div></div></div><div class="section"
lang="es-ES"><div
class="titlepage"><div><div><h3 class="title"
id="sect-Security-Enhanced_Linux-Mounting_File_Systems-Changing_the_Default_Context">5.9.2.
Cambio del Contexto Predeterminado</h3></div></div></div><div
class="para">
Como se mencionó en <a class="xref"
href="#sect-Security-Enhanced_Linux-Working_with_SELinux-The_file_t_and_default_t_Types"
title="5.8. Los tipos file_t y default_t">Sección 5.8, “Los tipos file_t y
default_t”</a>, en sistemas de archivo que soportan atributos extendidos, cuando se
accede a un archivo en disco que le falta el contexto SELinux, se trata como si hubiera
tenido el contexto predeterminado tal como se define en la política SELinux. En políticas
comúnes, este contexto predeterminados usa el tipo <code
class="computeroutput">file_t</code>. Si se desea usar un contexto
predeterminado diferente, monte el sistema de archivo con la opción<code
class="option">defcontext</code>.
</div><div class="para">
El siguiente ejemplo monta un sistema de archivo recién creado (en <code
class="filename">/dev/sda2</code>) en el directorio recién creado
<code class="filename">/prueba/</code>. Asume que no hay reglas en
<code class="filename">/etc/selinux/targeted/contexts/files/</code>
que definan el contexto del directorio <code
class="filename">/prueba/</code>:
</div><pre class="screen"># mount /dev/sda2 /prueba/ -o
defcontext="system_u:object_r:samba_share_t:s0"
</pre><div class="para">
En este ejemplo:
</div><div class="itemizedlist"><ul><li><div
class="para">
la opción <code class="option">defcontext</code> define que
<code
class="computeroutput">system_u:object_r:samba_share_t:s0</code> es
"el contexto de seguridad predeterminado para archivos no
etiquetados"<sup>[<a id="d0e3897" href="#ftn.d0e3897"
class="footnote">12</a>]</sup>.
</div></li><li><div class="para">
cuando sea montado, el directorio raíz (<code
class="filename">/prueba/</code>) del sistema de archivo se trata como
si estuviera etiquetado con el contexto especificado por <code
class="option">defcontext</code> (esta etiqueta no se guarda en el
disco). Esto afecta el etiquetado de archvios creados en <code
class="filename">/prueba/</code>: los archivos nuevos heredan el tipo
<code class="computeroutput">samba_share_t</code>, y estas etiquetas
se guardan en el disco.
</div></li><li><div class="para">
los archivos creados bajo <code
class="filename">/prueba/</code> mientras el sistema de archivo estaba
montado con la opción <code class="option">defcontext</code>
retendrán sus etiquetas.
</div></li></ul></div></div><div
class="section" lang="es-ES"><div
class="titlepage"><div><div><h3 class="title"
id="sect-Security-Enhanced_Linux-Mounting_File_Systems-Mounting_an_NFS_File_System">5.9.3.
Montando un Sistema de Archivos NFS</h3></div></div></div><div
class="para">
Por defecto, los montajes NFS en el lado del cliente son etiquetados con un contexto
predeterminado por la política para los sistemas de archivo NFS. En políticas comunes,
este contexto predeterminado usa el tipo <code
class="computeroutput">nfs_t</code>. Dependiendo de la configuración de
la política, los servicios, como el Servidor HTTP Apache y MySQL, pueden no poder leer
archivos etiquetados con el tipo <code
class="computeroutput">nfs_t</code>. Esto puede prevenir que los
sistemas de archivos etiquetados con este tipo se monten y sean leídos o exportados por
otros servicios.
</div><div class="para">
Si desea montar un sistema de archivo NFS y leer o exportar ese sistema de archivo con
otro servicio, use la opción <code class="option">contexto</code>
cuando monte para anular el tipo <code
class="computeroutput">nfs_t</code>. Use la siguiente opción de
contexto para montar sistemas de archivo NFS para que puedan compartirse vía el Servidor
HTTP Apache:
</div><pre class="screen">mount servidor:/export
/local/punto/de/montaje -o\
context="system_u:object_r:httpd_sys_content_t:s0"
</pre><div class="para">
Dado que los cambios de contexto no se escriben al disco para estas situaciones, el
contexto especificado con la opción <code
class="option">context</code> sólo se retiene si la opción <code
class="option">context</code> se usa en el siguiente montaje, y si el
mismo contexto se especifica.
</div><div class="para">
Como una alternativa a montar sistemas de archivo con la opción <code
class="option">contexto</code>, los Booleanos se pueden activar para
permitir a los servicios acceder sistemas de archivos etiquetados con el tipo <code
class="computeroutput">nfs_t</code>. Vaya a <a
class="xref"
href="#sect-Security-Enhanced_Linux-Booleans-Booleans_for_NFS_and_CIFS"
title="5.6.3. Booleanos para NFS y CIFS">Sección 5.6.3, “Booleanos para NFS y
CIFS”</a> para instrucciones sobre configuración de Booleanos para permitir a
servicios acceder al tipo <code
class="computeroutput">nfs_t</code>.
</div></div><div class="section"
lang="es-ES"><div
class="titlepage"><div><div><h3 class="title"
id="sect-Security-Enhanced_Linux-Mounting_File_Systems-Multiple_NFS_Mounts">5.9.4.
Montajes NFS Múltiples</h3></div></div></div><div
class="para">
Cuando se monten múltiples montajes desde el mismo NFS exportado, el intento de
sobreescribir el contexto de SELinux e cada montaje con un contexto diferente, resulta en
fallos de los comandos de montaje subsecuentes. En el siguiente ejemplo, el servidor NFS
tiene un exportado único, <code class="filename">/export</code>, que
tiene dos subdirectorios, <code class="filename">web/</code> and
<code class="filename">database/</code>. El siguiente comando
intenta dos montajes desde un único export NFS e intenta sobreescribir el contexto para
cada uno:
</div><pre class="screen"># mount servidor:/export/web /local/web
-o\
context="system_u:object_r:httpd_sys_content_t:s0"
# mount servidor:/export/database /local/database -o\
context="system_u:object_r:mysqld_db_t:s0"
</pre><div class="para">
El segundo comando mount falla, y se graba lo siguiente en <code
class="filename">/var/log/messages</code>:
</div><pre class="screen">kernel: SELinux: montaje inválido.
Similar superblock, configuración de seguridad diferente para (dev 0:15, tipo nfs)
</pre><div class="para">
Para montar montajes múltiples de un exportado NFS único, con cada montaje teniendo un
contexto diferente, use las opciones <code class="option">-o
nosharecache,context</code>. El siguiente ejemplo monta montajes múltiples de un
único export de NSF, con un contexto diferente para cada montaje (permitiendo un único
acceso de servicio a cada uno):
</div><pre class="screen"># mount servidor:/export/web /local/web
-o\
nosharecache,context="system_u:object_r:httpd_sys_content_t:s0"
# mount servidor:/export/database /local/database -o\
nosharecache,context="system_u:object_r:mysqld_db_t:s0"
</pre><div class="para">
En este ejemplo, <code
class="computeroutput">server:/export/web</code> se monta localmente en
<code class="filename">/local/web/</code>, con todos los archivos
etiquetados con el tipo <code
class="computeroutput">httpd_sys_content_t</code>, lo que permite el
acceso al Servidor HTTP Apache. <code
class="computeroutput">server:/export/database</code> está montado
localmente en <code class="filename">/local/database</code>, con los
archivos etiquetados con el tipo <code
class="computeroutput">mysqld_db_t</code>, lo que permite a MySQL el
acceso. Estos cambios de tipo no se escriben en el disco.
</div><div
class="important"><h2>Importante</h2><div
class="para">
Las opciones <code class="option">nosharecache</code> le
permiten montar el mismo subdirectorio de un exportado varias veces con distintos
contextos (por ejemplo, montar <code
class="filename">/export/web</code> varias veces). No monte el mismo
directorio de un exportado varias veces con distintos contextos, dado que esto crea un
montado solapado, donde los archivos se pueden acceder con dos contextos diferentes.
</div></div></div><div class="section"
lang="es-ES"><div
class="titlepage"><div><div><h3 class="title"
id="sect-Security-Enhanced_Linux-Mounting_File_Systems-Making_Context_Mounts_Persistent">5.9.5.
Haciendo Persistente los Contextos de
Montajes</h3></div></div></div><div class="para">
Para hacer que los contextos de montajes persistentes entre remontadas y reiniciadas,
agregue las entradas de los sistemas de archivos en <code
class="filename">/etc/fstab</code> o un mapa de automontador, y use el
contexto deseado como una opción de montaje. El siguiente ejemplo agrega una entrada en
<code class="filename">/etc/fstab</code> para un montaje de contexto
NFS:
</div><pre class="screen">servidor:/export /local/montaje/ nfs
context="system_u:object_r:httpd_sys_content_t:s0" 0 0
</pre><div class="para">
Vaya a la <a
href="http://www.redhat.com/docs/en-US/Red_Hat_Enterprise_Linux/5.2/...
de Despliegue del Linux para Empresas de Red Hat 5, Sección 19.2. "Configuración de
Cliente NFS"</a> para información adicional sobre montaje de sistemas de
archivo NFS.
</div></div></div><div class="section"
lang="es-ES"><div
class="titlepage"><div><div><h2 class="title"
id="sect-Security-Enhanced_Linux-Working_with_SELinux-Maintaining_SELinux_Labels_">5.10.
Mantención de las Etiquetas de SELinux
</h2></div></div></div><div class="para">
Estas secciones describen qué les pasa a los contextos SELinux cuando se copia, mueve y
compacta archivos y directorios. También explica cómo preservar los contextos cuando se
copia o se compacta.
</div><div class="section" lang="es-ES"><div
class="titlepage"><div><div><h3 class="title"
id="sect-Security-Enhanced_Linux-Maintaining_SELinux_Labels_-Copying_Files_and_Directories">5.10.1.
Copia de Directorios y Archivos</h3></div></div></div><div
class="para">
Cuando se copia un archivo o directorio, se crea uno si no existía. El contexto de ese
archivo o directorio nuevo está basado en las reglas de etiquetados predeterminada, y no
el contexto original del archivo o directorio (a menos que se usen opciones para preservar
el contexto original). Por ejemplo, los archivos creados en los directorios home de los
usuarios se etiquetan con el tipo <code
class="computeroutput">user_home_t</code>:
</div><pre class="screen">$ touch archivo1
$ ls -Z archivo1
-rw-rw-r-- usuario1 grupo1 unconfined_u:object_r:user_home_t:s0 archivo1
</pre><div class="para">
Si un archivo se copia a otro directorio, tal como <code
class="filename">/etc/</code>, el archivo nuevo se crea de acuerdo a
las reglas de etiquetado predeterminado del directorio <code
class="filename">/etc/</code>. El copiado de un archivo (sin opciones
adicionales) puede no preservar el contexto original:
</div><pre class="screen">$ 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
</pre><div class="para">
Cuando el <code class="filename">archivo1</code> se copia a
<code class="filename">/etc/</code>, si <code
class="filename">/etc/archivo1</code> no existe, <code
class="filename">/etc/archivo1</code> se crea como un archivo nuevo.
Como se muestra en el ejemplo de arriba, <code
class="filename">/etc/archivo1</code> se etiqueta con el tipo <code
class="computeroutput">etc_t</code>, de acuerdo con las reglas de
etiquetado predeterminadas.
</div><div class="para">
Cuando un archivo se copia sobre otro existente, el contexto del archivo existente se
preserva, a menos que el usuario especifique opciones de <code
class="command">cp</code> para preservar el contexto del archivo
original, tal como <code class="option">--preserve=context</code>.
La política de SELinux puede prevenir que se preserver los contextos al copiar.
</div><div class="formalpara"><h5 class="formalpara"
id="form-Security-Enhanced_Linux-Copying_Files_and_Directories-Copying_Without_Preserving_SELinux_Contexts">Copia
sin Preservar los Contextos de SELinux</h5>
Cuando se copia un archivo con el comando <code
class="command">cp</code>, si no se dan opciones, el tipo se hereda
desde el directorio padre destino:
</div><pre class="screen">$ 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/html/
# 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
</pre><div class="para">
En este ejemplo, <code class="filename">archivo1</code> se crea
en el directorio de inicio del usuario, y se etiqueta con el tipo <code
class="computeroutput">user_home_t</code>. El directorio <code
class="filename">/var/www/html/</code> está etiquetado con el tipo
<code class="computeroutput">httpd_sys_content_t</code>, como se
muestra con el comando <code class="command">ls -dZ
/var/www/html/</code>. Cuando el <code
class="filename">archivo1</code> se copia a <code
class="filename">/var/www/html/</code>, hereda el tipo <code
class="computeroutput">httpd_sys_content_t</code>, como se muestra con
el comando<code class="command">ls -Z
/var/www/html/archivo1</code>.
</div><div class="formalpara"><h5 class="formalpara"
id="form-Security-Enhanced_Linux-Copying_Files_and_Directories-Preserving_SELinux_Contexts_When_Copying">Preservación
de los Contextos de SELinux cuando se copia</h5>
Use el comando <code class="command">cp
--preserve=context</code> para preservar los contextos cuando se copia:
</div><pre class="screen">$ 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/html/
# cp --preserve=context 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/archivo1
</pre><div class="para">
En este ejemplo, el <code class="filename">archivo1</code> se
crea en el directorio de inicio del usuario, y se etiqueta con el tipo <code
class="computeroutput">user_home_t</code>. El directorio <code
class="filename">/var/www/html/</code> está etiquetado con el tipo
<code class="computeroutput">httpd_sys_content_t</code>, como se
muestra con el comando <code class="command">ls -dZ
/var/www/html/</code>. Usando la opción <code
class="option">--preserve=context</code> se mantienen los contextos de
SELinux durante operaciones de copia. Como se muestra con el comando <code
class="command">ls -Z /var/www/html/archivo1</code>, el tipo <code
class="computeroutput">user_home_t</code> del <code
class="filename">archivo1</code> fue preservado cuando el archivo se
copió a <code class="filename">/var/www/html/</code>.
</div><div class="formalpara"><h5 class="formalpara"
id="form-Security-Enhanced_Linux-Copying_Files_and_Directories-Copying_and_Changing_the_Context">Copiado
y Cambio del Contexto</h5>
Use el comando <code class="command">cp -Z</code> para cambiar
el contexto destino de copia. El siguiente ejemplo se realizó en el directorio de inicio
del usuario:
</div><pre class="screen">$ 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
</pre><div class="para">
En este ejemplo, el contexto se define en la opción <code
class="option">-Z</code>. Sin la opción <code
class="option">-Z</code>, <code
class="filename">archivo2</code> se etiquetaría con el contexto
<code
class="computeroutput">unconfined_u:object_r:user_home_t</code>.
</div><div class="formalpara"><h5 class="formalpara"
id="form-Security-Enhanced_Linux-Copying_Files_and_Directories-Copying_a_File_Over_an_Existing_File">Copia
de un Archivos sobre un otro existente</h5>
Cuando un archivo se copia sobre otro existente, el contexto del archivo existente se
preserva (a menos que se use una opción para preservar los contextos). Por ejemplo:
</div><pre class="screen"># 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
</pre><div class="para">
En este ejemplo, se crean dos archivos: <code
class="filename">/etc/archivo1</code>, etiquetado con el tipo <code
class="computeroutput">etc_t</code>, y <code
class="filename">/tmp/archivo2</code>, etiquetado con el tipo <code
class="computeroutput">user_tmp_t</code>. Ell comando <code
class="command">cp /tmp/archivo2 /etc/archivo1</code> sobreescribe
<code class="filename">archivo1</code> con <code
class="filename">archivo2</code>. Después de copiar, el comando
<code class="command">ls -Z /etc/archivo1</code> muestra a <code
class="filename">archivo1</code> etiquetado con el tipo <code
class="computeroutput">etc_t</code>, en vez del <code
class="computeroutput">user_tmp_t</code> de <code
class="filename">/tmp/archivo2</code> que reemplazó a <code
class="filename">/etc/archivo1</code>.
</div><div
class="important"><h2>Importante</h2><div
class="para">
Copie archivos y directorios, en vez de moverlos. Esto ayuda a asegurar que se
etiquetan con los contextos de SELinux correctos. Los contextos SELinux incorrectos pueden
hacer que los procesos no puedan acceder a esos archivos y directorios.
</div></div></div><div class="section"
lang="es-ES"><div
class="titlepage"><div><div><h3 class="title"
id="sect-Security-Enhanced_Linux-Maintaining_SELinux_Labels_-Moving_Files_and_Directories">5.10.2.
Movimiento de Archivos y Directorios</h3></div></div></div><div
class="para">
Los archivos y directorios mantienen su contexto SELinux actual cuando se mueven. En
muchos casos, esto es incorrecto para la ubicación nueva a donde se los mueve. El
siguiente ejemplo muestra la movida de un archivo desde el directorio de inicio del
usuario a <code class="filename">/var/www/html/</code>, que es usado
por el Servidor HTTP Apache. Dado que el archivo es movido, no hereda el contexto SELinux
correcto:
</div><div class="orderedlist"><ol><li><div
class="para">
Ejecute el comando <code class="command">cd</code> sin ningún
argumento para cambiar a su directorio de inicio. Una vez ahí, ejecute el comando <code
class="command">touch archivo1</code> para crear un archivo. Este
archivo se etiqueta con el tipo <code
class="computeroutput">user_home_t</code>:
</div><pre class="screen">$ ls -Z archivo1
-rw-rw-r-- usuario1 grupo1 unconfined_u:object_r:user_home_t:s0 archivo1
</pre></li><li><div class="para">
Ejecute el comando <code class="command">ls -dZ
/var/www/html/</code> para ver el contexto de SELinux del directorio <code
class="filename">/var/www/html/</code>:
</div><pre class="screen">$ ls -dZ /var/www/html/
drwxr-xr-x root root system_u:object_r:httpd_sys_content_t:s0 /var/www/html/
</pre><div class="para">
Por defecto, el directorio <code
class="filename">/var/www/html/</code> se etiqueta con el tipo <code
class="computeroutput">httpd_sys_content_t</code>. Los archivos y
directorios creados bajo el directorio <code
class="filename">/var/www/html/</code> heredan este tipo, y como tal,
son etiquetados con este tipo.
</div></li><li><div class="para">
Como usuario root de Linux, ejecute el comando <code
class="command">mv archivo1 /var/www/html/</code> para mover el
<code class="filename">archivo1</code> al directorio <code
class="filename">/var/www/html/</code>. Dado que el archivo es movido,
mantiene su tipo <code class="computeroutput">user_home_t</code>
actual:
</div><pre class="screen"># 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/html/archivo1
</pre></li></ol></div><div class="para">
Por defecto, el Servidor HTTP Apache no puede leer archivos etiquetados con el tipo
<code class="computeroutput">user_home_t</code>. Si todos los
archivos de una página web se etiquetaron con <code
class="computeroutput">user_home_t</code>, u otro tipo al que el
Servidor HTTP Apache no puede leer, el permiso es negado cuando intente accederlo vía
Firefox o algún otro navegador web basado en texto.
</div><div
class="important"><h2>Importante</h2><div
class="para">
Mover archivos y directorios con el comando <code
class="command">mv</code> 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.
</div></div></div><div class="section"
lang="es-ES"><div
class="titlepage"><div><div><h3 class="title"
id="sect-Security-Enhanced_Linux-Maintaining_SELinux_Labels_-Checking_the_Default_SELinux_Context">5.10.3.
Chequeando el Contexto SELinux
Predeterminado</h3></div></div></div><div
class="para">
Use el comando <code
class="command">/usr/sbin/matchpathcon</code> para chequear si los
archivos y directorios tienen el contexto SELinux correcto. De la página de manual de
<span class="citerefentry"><span
class="refentrytitle">matchpathcon</span>(8)</span>:
"<code class="command">matchpathcon</code> consulta la política
del sistema y muestra el contexto de seguridad predeterminado asociado con una dirección
de archivo."<sup>[<a id="d0e4348" href="#ftn.d0e4348"
class="footnote">13</a>]</sup>. El siguiente ejemplo muestra el
uso del comando <code class="command">/usr/sbin/matchpathcon</code>
para verificar que los archivos dentro del directorio <code
class="filename">/var/www/html/</code> están etiquetados
correctamente:
</div><div class="orderedlist"><ol><li><div
class="para">
Como usuario root de Linux, ejecute el comando <code
class="command">touch /var/www/html/archivo{1,2,3}</code> para crear
tres archivos (<code class="filename">archivo1</code>, <code
class="filename">archivo2</code> y <code
class="filename">archivo3</code>). Estos heredan el tipo <code
class="computeroutput">httpd_sys_content_t</code> del directorio
<code class="filename">/var/www/html/</code>:
</div><pre class="screen"># 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
</pre></li><li><div class="para">
Como usuario root de Linux, ejecute el comando <code
class="command">chcon -t samba_share_t /var/www/html/archivo1</code>
para cambiar el tipo del <code class="filename">archivo1</code> a
<code class="computeroutput">samba_share_t</code>. Nota: El Servidor
HTTP Apache no puede leer archivos o directorios etiquetados con el tipo <code
class="computeroutput">samba_share_t</code>.
</div></li><li><div class="para">
La opción <code class="command">/usr/sbin/matchpathcon</code>
<code class="option">-V</code> compara el contexto SELinux actual
con el contexto predeterminado correcto dado por la política de SELinux. Ejecute el
comando <code class="command">/usr/sbin/matchpathcon -V
/var/www/html/*</code> para chequear todos los archivos del directorio <code
class="filename">/var/www/html/</code>:
</div><pre class="screen">$ /usr/sbin/matchpathcon -V
/var/www/html/*
/var/www/html/archivo1 tiene el contexto unconfined_u:object_r:samba_share_t:s0, debería
ser system_u:object_r:httpd_sys_content_t:s0
/var/www/html/archivo2 verified.
/var/www/html/archivo3 verified.
</pre></li></ol></div><div class="para">
La siguiente salida del comando <code
class="command">/usr/sbin/matchpathcon</code> explica que el <code
class="filename">archivo1</code> está etiquetado con el tipo <code
class="computeroutput">samba_share_t</code>, pero debería estar
etiquetado con el tipo <code
class="computeroutput">httpd_sys_content_t</code>:
</div><pre class="screen">/var/www/html/archivo1 tiene el
contexto unconfined_u:object_r:samba_share_t:s0, debería tener
system_u:object_r:httpd_sys_content_t:s0
</pre><div class="para">
Para resolver el problema de etiqueta y permitir al Servidor HTTP Apache acceder a
<code class="filename">archivo1</code>, como usuario root de Linux
corra el comando <code class="command">/sbin/restorecon -v
/var/www/html/archivo1</code>:
</div><pre class="screen"># /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
</pre></div><div class="section"
lang="es-ES"><div
class="titlepage"><div><div><h3 class="title"
id="sect-Security-Enhanced_Linux-Maintaining_SELinux_Labels_-Archiving_Files_with_tar">5.10.4.
Archivando archivos con tar</h3></div></div></div><div
class="para">
<code class="command">tar</code> 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 compactan archivos. Use <code
class="command">tar --selinux</code> para crear archivos que retengan
los contextos. Si un archivo Tar contiene archivos sin los atributos extendidos, o si
quiere que los atributos extendidos coincidan con los predeterminados del sistema, ejecute
el archivado a través de <code
class="command">/sbin/restorecon</code>:
</div><pre class="screen">$ tar -xvf <em
class="replaceable"><code>archivo.tar</code></em> |
/sbin/restorecon -f -
</pre><div class="para">
Nota: dependiendo del directorio, puede necesitar ser el usuario root de Linux para
ejecutar el comando <code class="command">/sbin/restorecon</code>.
</div><div class="para">
El siguiente ejemplo muestra la creación de un archivo Tar que mantiene sus contextos
SELinux:
</div><div class="orderedlist"><ol><li><div
class="para">
Como usuario root de Linux, ejecute el comando <code
class="command">touch /var/www/html/archivo{1,2,3}</code> para crear
tres archivos (<code class="filename">archivo1</code>, <code
class="filename">archivo2</code> y <code
class="filename">archivo3</code>). Estos heredan el tipo <code
class="computeroutput">httpd_sys_content_t</code> del directorio
<code class="filename">/var/www/html/</code>:
</div><pre class="screen"># 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
</pre></li><li><div class="para">
Ejecute el comando <code class="command">cd
/var/www/html/</code> para cambiar al directorio <code
class="filename">/var/www/html/</code>. Una vez en este directorio,
como usuario root de Linux ejecute el comando <code class="command">tar
--selinux -cf prueba.tar archivo{1,2,3}</code> para crear un archivo Tar con nombre
<code class="filename">prueba.tar</code>.
</div></li><li><div class="para">
Como usuario root de Linux, corra el comando <code
class="command">mkdir /prueba</code> para crear un directorio nuevo, y
luego ejecute el comando <code class="command">chmod 777
/prueba/</code> para permitir a los usuarios acceso total al directorio <code
class="filename">/prueba/</code>.
</div></li><li><div class="para">
Ejecute el comando <code class="command">cp /var/www/html/prueba.tar
/prueba/</code> para copiar el archivo <code
class="filename">prueba.tar</code> en el directorio <code
class="filename">/prueba/</code>.
</div></li><li><div class="para">
Ejecute el comando <code class="command">cd /prueba/</code>
para cambiar al directorio <code class="filename">/test/</code>. Una
vez ahí, ejecute el comando <code class="command">tar -xvf
prueba.tar</code> para extraer el archivo Tar.
</div></li><li><div class="para">
Ejecute el comando <code class="command">ls -lZ
/prueba/</code> para ver los contextos SELinux. El tipo <code
class="computeroutput">httpd_sys_content_t</code> fue retenido, en vez
de haberse cambiado al <code
class="computeroutput">default_t</code>, lo que hubiera pasado si la
opción <code class="option">--selinux</code> no se hubiera usado:
</div><pre class="screen">$ ls -lZ /prueba/
-rw-r--r-- usuario1 grupo1 unconfined_u:object_r:httpd_sys_content_t:s0 archivo1
-rw-r--r-- usuario1 grupo1 unconfined_u:object_r:httpd_sys_content_t:s0 archivo2
-rw-r--r-- usuario1 grupo1 unconfined_u:object_r:httpd_sys_content_t:s0 archivo3
-rw-r--r-- usuario1 grupo1 unconfined_u:object_r:default_t:s0 prueba.tar
</pre></li><li><div class="para">
Si el directorio <code class="filename">/prueba/</code> no se
necesita más, como usuario root de Linux ejecute el comando <code
class="command"> rm -ri /prueba/</code> para eliminarlo, así como todos
los archivos en él.
</div></li></ol></div><div class="para">
Vaya a la página man de <span class="citerefentry"><span
class="refentrytitle">tar</span>(1)</span> para información
adicional de <code class="command">tar</code>, tal como la opción
<code class="option">--xattrs</code> para retener todos los
atributos extendidos.
</div></div><div class="section"
lang="es-ES"><div
class="titlepage"><div><div><h3 class="title"
id="sect-Security-Enhanced_Linux-Maintaining_SELinux_Labels_-Archiving_Files_with_star">5.10.5.
Archivando archivos con tar</h3></div></div></div><div
class="para">
<code class="command">star</code> 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. Use <code
class="command">star -xattr -H=exustar</code> para crear archivos que
retengan los contextos. El paquete <span class="package">star</span>
no se instala por defecto. Para instalar <code
class="command">star</code>, ejecute el comando <code
class="command">yum install star</code> como usuario root de Linux.
</div><div class="para">
El siguiente ejemplo muestra la creación de un archivo Star que retiene los contextos
SELinux:
</div><div class="orderedlist"><ol><li><div
class="para">
Como usuario root de Linux, ejecute el comando <code
class="command">touch /var/www/html/archivo{1,2,3}</code> para crear
tres archivos (<code class="filename">archivo1</code>, <code
class="filename">archivo2</code> y <code
class="filename">archivo3</code>). Estos heredan el tipo <code
class="computeroutput">httpd_sys_content_t</code> del directorio
<code class="filename">/var/www/html/</code>:
</div><pre class="screen"># 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
</pre></li><li><div class="para">
Ejecute el comando <code class="command">cd
/var/www/html/</code> para cambiar al directorio <code
class="filename">/var/www/html/</code>. Una vez en este directorio,
como usuario root de Linux ejecute el comando <code class="command">star
-xattr -H=exustar -c -f=prueba.star archivo{1,2,3}</code> para crear un archivo Star
llamado <code class="filename">prueba.star</code>:
</div><pre class="screen"># star -xattr -H=exustar -c
-f=prueba.star archivo{1,2,3}
star: 1 blocks + 0 bytes (total of 10240 bytes = 10.00k).
</pre></li><li><div class="para">
Como usuario root de Linux, corra el comando <code
class="command">mkdir /prueba</code> para crear un directorio nuevo, y
luego ejecute el comando <code class="command">chmod 777
/prueba/</code> para permitir a los usuarios acceso total al directorio <code
class="filename">/prueba/</code>.
</div></li><li><div class="para">
Ejecute el comando <code class="command">cp
/var/www/html/prueba.star /prueba/</code> para copiar el archivo <code
class="filename">prueba.star</code> al directorio <code
class="filename">/prueba/</code>.
</div></li><li><div class="para">
Ejecute el comando <code class="command">cd /prueba/</code>
para cambiar al directorio <code class="filename">/prueba/</code>.
Una vez ahí, ejecute el comando <code class="command">star -x
-f=prueba.star</code> para extraer el archivo Star:
</div><pre class="screen">$ star -x -f=prueba.star
star: 1 blocks + 0 bytes (total of 10240 bytes = 10.00k).
</pre></li><li><div class="para">
Ejecute el comando <code class="command">ls -lZ
/prueba/</code> para ver los contextos SELinux. El tipo <code
class="computeroutput">httpd_sys_content_t</code> fue retenido, en vez
de haberse cambiado al <code
class="computeroutput">default_t</code>, lo que hubiera pasado si la
opción <code class="option">--selinux</code> no se hubiera usado:
</div><pre class="screen">$ ls -lZ /prueba/
-rw-r--r-- usuario1 grupo1 unconfined_u:object_r:httpd_sys_content_t:s0 archivo1
-rw-r--r-- usuario1 grupo1 unconfined_u:object_r:httpd_sys_content_t:s0 archivo2
-rw-r--r-- usuario1 grupo1 unconfined_u:object_r:httpd_sys_content_t:s0 archivo3
-rw-r--r-- usuario1 grupo1 unconfined_u:object_r:default_t:s0 prueba.star
</pre></li><li><div class="para">
Si el directorio <code class="filename">/prueba/</code> no se
necesita más, como usuario root de Linux ejecute el comando <code
class="command"> rm -ri /prueba/</code> para eliminarlo, así como todos
los archivos en él.
</div></li><li><div class="para">
Si <code class="command">star</code> ya no se necesita, como
usuario root de Linux, ejecute el comando <code class="command">yum remove
star</code> para eliminar el paquete.
</div></li></ol></div><div class="para">
Vaya a la página man de <span class="citerefentry"><span
class="refentrytitle">star</span>(1)</span> para más información
acerca de <code class="command">star</code>.
</div></div></div><div
class="footnotes"><br/><hr width="100"
align="left"/><div
class="footnote"><p><sup>[<a id="ftn.d0e2064"
href="#d0e2064" class="para">8</a>] </sup>
Brindle, Joshua. "Re: blurb for fedora setools packages" Email para Murray
McAllister. 1 Noviembre 2008. Cualquier edición o cambio en esta versión fue hecha por
Murray McAllister.
</p></div><div class="footnote"><p><sup>[<a
id="ftn.d0e2176" href="#d0e2176"
class="para">9</a>] </sup>
Administración de Software con yum, escrito por Stuart Ellis, editado por Paul W.
Frields, Rodrigo Menezes y Hugo Cisneiros.
</p></div><div class="footnote"><p><sup>[<a
id="ftn.d0e2504" href="#d0e2504"
class="para">10</a>] </sup>
Vaya a <a
href="http://en.wikipedia.org/wiki/Runlevel">http://en.wikip...
para información sobre los niveles de ejecución.
</p></div><div
class="footnote"><p><sup>[<a id="ftn.d0e3749"
href="#d0e3749" class="para">11</a>] </sup>
Los archivos en <code
class="filename">/etc/selinux/targeted/contexts/files/</code> definen
los contextos de los archivos y directorios. Los archivos en este directorio son accedidos
por <code class="command">restorecon</code> y por <code
class="command">setfiles</code> para restaurar al valor predeterminado
los contextos de los archivos y directorios.
</p></div><div class="footnote"><p><sup>[<a
id="ftn.d0e3897" href="#d0e3897"
class="para">12</a>] </sup>
Morris, James. "Etiquetado de Sistemas de Archivos en SELinux". Publicado
el 1 Octubre 2004. Accedido el 14 Octubre 2008: <a
href="http://www.linuxjournal.com/article/7426">http://www.l...;.
</p></div><div
class="footnote"><p><sup>[<a id="ftn.d0e4348"
href="#d0e4348" class="para">13</a>] </sup>
La página de manual <span class="citerefentry"><span
class="refentrytitle">matchpathcon</span>(8)</span>, tal como se
incluyó en el paquete <span class="package">libselinux-utils</span>
en Fedora, fue escrita por Daniel Walsh. Cualquier edición o cambio en esta versión fue
hecha por Murray McAllister.
</p></div></div></div><div class="chapter"
lang="es-ES"><div
class="titlepage"><div><div><h2 class="title"
id="chap-Security-Enhanced_Linux-Confining_Users">Capítulo 6. Confinando a
los Usuarios</h2></div></div></div><div
class="toc"><dl><dt><span class="section"><a
href="#sect-Security-Enhanced_Linux-Confining_Users-Linux_and_SELinux_User_Mappings">6.1.
Linux y los Mapeos de Usuarios de
SELinux</a></span></dt><dt><span
class="section"><a
href="#sect-Security-Enhanced_Linux-Confining_Users-Confining_New_Linux_Users_useradd">6.2.
Confinando Usuarios Nuevos de Linux:
useradd</a></span></dt><dt><span
class="section"><a
href="#sect-Security-Enhanced_Linux-Confining_Users-Confining_Existing_Linux_Users_semanage_login">6.3.
Confinando Usuarios Linux Existentes: semanage
login</a></span></dt><dt><span
class="section"><a
href="#sect-Security-Enhanced_Linux-Confining_Users-Changing_the_Default_Mapping">6.4.
Cambiando el Mapeo Predeterminado</a></span></dt><dt><span
class="section
"><a
href="#sect-Security-Enhanced_Linux-Confining_Users-xguest_Kiosk_Mode">6.5.
xguest: Modo Kiosk</a></span></dt><dt><span
class="section"><a
href="#sect-Security-Enhanced_Linux-Confining_Users-Booleans_for_Users_Executing_Applications">6.6.
Booleanos para que los Usuarios Ejecuten
Aplicaciones</a></span></dt></dl></div><div
class="para">
Un número de usuarios confinados SELinux están disponibles en Fedora 11. Cada usuario
Linux se mapea aun usuario SELinux vía la política de SELinux, permitiendo a los usuarios
Linux heredar las restricciones sobre los usuarios SELinux, por ejemplo (dependiendo del
usuairo), no poder: ejecutar el sistema de ventanas X; usar la red; ejecutar aplicaciones
setuid (a menos que la política de SELinux lo permita); o ejecutar comandos <code
class="command">su</code> y <code
class="command">sudo</code> para volverse el usuario root de Linux.
Esto ayuda a proteger el sistema del usuario. Vaya a <a class="xref"
href="#sect-Security-Enhanced_Linux-Targeted_Policy-Confined_and_Unconfined_Users"
title="4.3. Usuarios Confinados y no Confinados">Sección 4.3, “Usuarios
Confinados y no Confinados”</a> para información adicional sobre usuarios confinados
en Fedora 11.
</div><div class="section" lang="es-ES"><div
class="titlepage"><div><div><h2 class="title"
id="sect-Security-Enhanced_Linux-Confining_Users-Linux_and_SELinux_User_Mappings">6.1.
Linux y los Mapeos de Usuarios de
SELinux</h2></div></div></div><div class="para">
Como usuario root de Linux, corra el comando <code
class="command">semanage login -l</code> para ver el mapeo entre los
usuarios de Linux y los usuarios de SELinux:
</div><pre class="screen"># /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
</pre><div class="para">
En Fedora 11, los usuarios Linux se mapean al ingreso SELinux <code
class="computeroutput">__default__</code> por defecto (que se mapea al
usuario SELinux <code class="computeroutput">unconfined_u</code>).
Cuando se crea un usuario Linux con el comando <code
class="command">useradd</code>, si no se especifica ninguna opcion, son
mapeados al usuario SELinux <code
class="computeroutput">unconfined_u</code>. Lo siguiente define el
mapeo por defecto:
</div><pre class="screen">__default__ unconfined_u
s0-s0:c0.c1023
</pre></div><div class="section"
lang="es-ES"><div
class="titlepage"><div><div><h2 class="title"
id="sect-Security-Enhanced_Linux-Confining_Users-Confining_New_Linux_Users_useradd">6.2.
Confinando Usuarios Nuevos de Linux:
useradd</h2></div></div></div><div class="para">
Los usuarios Linux mapeados al usuario SELinux <code
class="computeroutput">unconfined_u</code> corren en el dominio
<code class="computeroutput">unconfined_t</code>. Esto se ve
ejecutando el comando <code class="command">id -Z</code> luego de
haber ingresado como el usuario Linux que se mapea a <code
class="computeroutput">unconfined_u</code>:
</div><pre class="screen">$ id -Z
unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
</pre><div class="para">
Cuando los usuarios linux ejecuten en el dominio <code
class="computeroutput">unconfined_t</code>, se aplican las reglas de la
política de SELinux, pero las reglas de políticas que existen para usuarios Linux que
corren en el dominio <code
class="computeroutput">unconfined_t</code> permiten casi todos los
accesos. Si los usuarios Linux no confinados ejecutan una aplicación que la política de
SELinux define pueden transicionar desde el dominio <code
class="computeroutput">unconfined_t</code> a su propio dominio
confinado, los usuarios Linux no confinados todaví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 confinado, la aplicación permanece confinada, y por lo tanto, la explotación
de una brecha en la aplicación se puede limitar por la política. Nota: esto no protege al
sistema del usuario. En su lugar, el usuario y el sistema están siendo protegido de
posibles daño
s causados en alguna debilidad en la aplicación.
</div><div class="para">
Cuando se crean usuarios LInux con <code
class="command">useradd</code>, use la opción <code
class="option">-Z</code> para especificar a qué usuario SELinux se debe
mapear. El siguiente ejemplo crea un usuario Linux nuevo, useruuser, y mapea ese usuario
al usuario SELinux <code class="computeroutput">user_u</code>. Los
usuarios Linux mapeados al usuario SELinux <code
class="computeroutput">user_u</code> corren en el dominio <code
class="computeroutput">user_t</code>. En este dominio, los usuarios
Linux no pueden correr aplicaciones setuid a menos que la política de SELinux lo permita
(tal como <code class="command">passwd</code>), y tampoco pueden
correr <code class="command">su</code> o <code
class="command">sudo</code>, lo que evita que se puedan volver usuarios
root de Linux con estos comandos.
</div><div class="orderedlist"><ol><li><div
class="para">
Como usuario root de Linux, corra el comando <code
class="command">/usr/sbin/useradd -Z user_u useruuser</code> para crear
el usuario Linux nuevo (useruuser) que se mapeará al usuario SELinux <code
class="computeroutput">user_u</code>.
</div></li><li><div class="para">
Como usuario root de Linux, corra el comando <code
class="command">semanage login -l</code> para ver el mapeo entre el
usuario Linux <code class="computeroutput">useruuser</code> y
<code class="computeroutput">user_u</code>:
</div><pre class="screen"># /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
</pre></li><li><div class="para">
Como usuario root de Linux, corra el comando <code
class="command">passwd useruuser</code> para asignar una contraseña
para el usuario useruuser de Linux:
</div><pre class="screen"># passwd useruuser
Cambiando la contraseña del usuario useruuser.
Nueva contraseña de UNIX: <em class="replaceable"><code>Ingrese una
contraseña</code></em>
Reingrese la nueva contraseña de UNIX: <em
class="replaceable"><code>Ingrese la misma contraseña de
nuevo</code></em>
passwd: todos los tokens actualizados exitosamente.
</pre></li><li><div class="para">
Salga de su sesión actual, e ingrese como el usuario useruuser de Linux. Cuando
ingrese, pam_selinux mapea el usuario Linux a un usuario SELinux (en este caso, <code
class="computeroutput">user_u</code>), y configura el contexto SELinux
resultante. El shell del usuario Linux es luego lanzado con este contexto. Corra el
comando <code class="command">id -Z</code> para ver el contexto de
un usuario Linux:
</div><pre class="screen">[useruuser@localhost ~]$ id -Z
user_u:user_r:user_t:s0
</pre></li><li><div class="para">
Salga de la sesión useruuser de Linux, y vuelva a ingresar en su cuenta. Si no quiere
el usuario useruuser, ejecute el comando <code
class="command">/usr/sbin/userdel -r useruuser</code> como usuario root
de Linux para borrarlo junto con su directorio de inicio.
</div></li></ol></div></div><div
class="section" lang="es-ES"><div
class="titlepage"><div><div><h2 class="title"
id="sect-Security-Enhanced_Linux-Confining_Users-Confining_Existing_Linux_Users_semanage_login">6.3.
Confinando Usuarios Linux Existentes: semanage
login</h2></div></div></div><div class="para">
Si un usuario Linux se mapea al usuario <code
class="computeroutput">unconfined_u</code> (el comportamiento
predeterminado), y desea cambiar le usuario SELinux al que se mapea, use el comando
<code class="command">semanage login</code>. El siguiente ejemplo
crea un usuario de Linux nuevo llamado usuarionuevo, luego lo mapea al usuario SELinux
<code class="computeroutput">user_u</code>:
</div><div class="orderedlist"><ol><li><div
class="para">
Como usuario root de Linux, ejecute el comando <code
class="command">/usr/sbin/useradd usuarionuevo</code> para crear un
nuevo usuario (usuarionuevo). Dado que este usuario usa el mapeo por defecto, no aparece
en la salida de <code class="command">/usr/sbin/semanage login
-l</code>:
</div><pre class="screen"># /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
</pre></li><li><div class="para">
Para mapear un usuario usuarionuevo de Linux al usuario <code
class="computeroutput">user_u</code> de SELinux, corra el siguiente
comando como usuario root de Linux:
</div><div class="para">
<code class="command">/usr/sbin/semanage login -a -s user_u
usuarionuevo</code>
</div><div class="para">
La opción <code class="option">-a</code> agrega un registro
nuevo y la opción <code class="option">-s</code> especifica el
usuario SELinux al que mapea el usuario Linux. El último argumento <code
class="computeroutput">usuarionuevo</code>, es el usuario Linux al que
quiere que se mapee el usuario SELinux especificado.
</div></li><li><div class="para">
Para ver el mapeo entre el usuario usarionuevo de Linux y <code
class="computeroutput">user_u</code>, corra el comando <code
class="command">semanage login -l</code> como usuario root de Linux:
</div><pre class="screen"># /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
</pre></li><li><div class="para">
As the Linux root user, run the <code class="command">passwd
newuser</code> command to assign a password to the Linux newuser user:
</div><pre class="screen"># passwd usuarionuevo
Cambiando la contraseña del usuario usuarionuevo.
Nueva contraseña de UNIX: <em class="replaceable"><code>Ingrese una
contraseña</code></em>
Reingrese la nueva contraseña de UNIX: <em
class="replaceable"><code>Ingrese la misma contraseña de
nuevo</code></em>
passwd: todos los tokens de autenticación se actualizaron exitosamente.
</pre></li><li><div class="para">
Salga de su sesión actual e ingrese como el usuario de Linux usuarionuevo. Corra el
comando <code class="command">id -Z</code> para ver el contexto
SELinux de usuarionuevo:
</div><pre class="screen">[usuarionuevo@localhost ~]$ id -Z
user_u:user_r:user_t:s0
</pre></li><li><div class="para">
Salga de la sesión de Linux del usuarionuevo y vuelva a ingresar en su cuenta. Si no
quiere el usuarionuevo de Linux, corra el comando <code
class="command">userdel -r usuarionuevo</code> como usuario root de
Linux, junto con su directorio de inicio. También, el mapeo del usuario Linux usuarionuevo
y <code class="computeroutput">user_u</code> se elimina:
</div><pre class="screen"># /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
</pre></li></ol></div></div><div
class="section" lang="es-ES"><div
class="titlepage"><div><div><h2 class="title"
id="sect-Security-Enhanced_Linux-Confining_Users-Changing_the_Default_Mapping">6.4.
Cambiando el Mapeo Predeterminado</h2></div></div></div><div
class="para">
En Fedora 11, los usuarios Linux se mapean al ingreso SELinux <code
class="computeroutput">__default__</code> por defecto (que se mapea al
usuario SELinux <code class="computeroutput">unconfined_u</code>).
Si quiere que los usuarios nuevos de Linux y los usuarios Linux no mapeados
específicamente a un usuario SELinux sean confinados por defecto, cambie el mapeo
predeterminado con el comando <code class="command">semanage
login</code>.
</div><div class="para">
Por ejemplo, corra el siguiente comando como usuario root de Linux para cambiar el
mapeo predeterminado de <code
class="computeroutput">unconfined_u</code> a <code
class="computeroutput">user_u</code>:
</div><div class="para">
<code class="command">/usr/sbin/semanage login -m -S targeted -s
"user_u" -r s0 __default__</code>
</div><div class="para">
Corra el comando <code class="command">semanage login -l</code>
como usuario root de Linux para verificar que el ingreso <code
class="computeroutput">__default__</code> se mapea a <code
class="computeroutput">user_u</code>:
</div><pre class="screen"># /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
</pre><div class="para">
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ífica de la salida de
<code class="command">semanage login -l</code>, se mapean a <code
class="computeroutput">user_u</code>, según el ingreso <code
class="computeroutput">__default__</code>.
</div><div class="para">
Para volver al comportamiento predeterminado, corra el siguiente comando como usuario
root de Linux para mapear el ingreso <code
class="computeroutput">__default__</code> al usuario SELinux <code
class="computeroutput">unconfined_u</code>:
</div><div class="para">
<pre class="screen">/usr/sbin/semanage login -m -S targeted -s
"unconfined_u" -r\
s0-s0:c0.c1023 __default__
</pre>
</div></div><div class="section"
lang="es-ES"><div
class="titlepage"><div><div><h2 class="title"
id="sect-Security-Enhanced_Linux-Confining_Users-xguest_Kiosk_Mode">6.5.
xguest: Modo Kiosk</h2></div></div></div><div
class="para">
El paquete <span class="package">xguest</span> provee una cuenta
de usuario kiosk. Esta cuenta se usa para asegurar máquinas a las que ingresan personas y
las usan, como las de las bibliotecas, bancos, aeropuertos, quioscos de información y
cyber cafés. La cuenta de usuario kiosk está muy bloqueada: escencialmente, s´olo permite
a los usuarios ingresar y usar <span
class="application"><strong>Firefox</strong></span> para
navegar sitios de Internet. Cualquier cambio hecho mientras se ingresó con esa cuenta, tal
como la creación y cambio de la configuración, se pierde cuando se sale.
</div><div class="para">
Para configurar la cuenta kiosk:
</div><div class="orderedlist"><ol><li><div
class="para">
Como usuario root de Linux, corra el comando <code
class="command">yum install xguest</code> para instalar el paquete
<span class="package">xguest</span>. Instale las dependencias
requeridas.
</div></li><li><div class="para">
Para permitir a la cuenta kiosk usarse para una variedad de personas, la cuenta no se
protege con contraseña, y como tal, la cuenta sólo se puede proteger si SELinux está
funcionando en modo obediente. Antes de ingresar con esta cuenta, use el comando <code
class="command">getenforce</code> para confirmar que SELinux está
funcionando en modo obediente:
</div><pre class="screen">$ /usr/sbin/getenforce
Enforcing
</pre><div class="para">
Si no es éste el caso, vaya a <a class="xref"
href="#sect-Security-Enhanced_Linux-Working_with_SELinux-SELinux_Modes"
title="5.5. Modos de SELinux">Sección 5.5, “Modos de SELinux”</a> para
información acerca del cambio de modo de obligatorio. No es posible ingresar con esta
cuenta si SELinux está en modo permisivo o deshabilitado.
</div></li><li><div class="para">
Solamente puede ingresar a esta cuenta a través del Administración de Pantalla de
GNOME (GDM). Una vez que el paquete <span
class="package">xguest</span> se instala, se agrega una cuenta <code
class="computeroutput">Invitado</code> a GDM. Para ingresar, haga clic
en la cuenta <code class="computeroutput">Invitado</code>:
</div><div class="mediaobject"><img
src="./images/xguest.png"/></div></li></ol></div></div><div
class="section" lang="es-ES"><div
class="titlepage"><div><div><h2 class="title"
id="sect-Security-Enhanced_Linux-Confining_Users-Booleans_for_Users_Executing_Applications">6.6.
Booleanos para que los Usuarios Ejecuten
Aplicaciones</h2></div></div></div><div
class="para">
No permitir que los usuarios Linux ejecuten aplicaciones (que heredan los permisos del
usuario) en sus directorios de inicio (home) y <code
class="filename">/tmp/</code>, a los que tienen acceso de escritura, lo
que ayuda a evitar que aplicaciones con brechas o maliciosas puedan modificar archivos del
usuario. En Fedora 11, por defecto, los usuarios Linux en los dominios <code
class="computeroutput">guest_t</code> y <code
class="computeroutput">xguest_t</code> no pueden ejecutar aplicaciones
en los directorios de inicio o en <code
class="filename">/tmp/</code>; however, por defecto, los usuarios Linux
en los dominios <code class="computeroutput">user_t</code> and
<code class="computeroutput">staff_t</code> si pueden.
</div><div class="para">
Hay booleanos disponibles para cambiar este comportamiento, y se configuran con el
comando <code class="command">setsebool</code>. El comando <code
class="command">setsebool</code> se debe usar con el usuario root de
Linux. El comando <code class="command">setsebool -P</code> hace los
cambios persistentes. No use la opción <code
class="option">-P</code> si no quiere que los cambios persistan entre
reiniciadas:
</div><div class="formalpara"><h5 class="formalpara"
id="form-Security-Enhanced_Linux-Booleans_for_Users_Executing_Applications-guest_t">guest_t</h5>
Para <span class="emphasis"><em>permitir</em></span>
a los usuarios Linux en el dominio <code
class="computeroutput">guest_t</code> que ejecuten aplicaciones en sus
directorios de inicio y en <code class="filename">/tmp/</code>:
</div><div class="para">
<code class="command">/usr/sbin/setsebool -P allow_guest_exec_content
on</code>
</div><div class="formalpara"><h5 class="formalpara"
id="form-Security-Enhanced_Linux-Booleans_for_Users_Executing_Applications-xguest_t">xguest_t</h5>
Para <span class="emphasis"><em>permitir</em></span>
a los usuarios Linux en el dominio <code
class="computeroutput">xguest_t</code> ejecutar aplicaciones en sus
directorios inicios y <code class="filename">/tmp/</code>:
</div><div class="para">
<code class="command">/usr/sbin/setsebool -P allow_xguest_exec_content
on</code>
</div><div class="formalpara"><h5 class="formalpara"
id="form-Security-Enhanced_Linux-Booleans_for_Users_Executing_Applications-user_t">user_t</h5>
Para <span class="emphasis"><em>impedir</em></span>
que los usuarios Linux en el dominio <code
class="computeroutput">user_t</code> ejecuten aplicaciones en sus
directorios de inicio y <code class="filename">/tmp/</code>:
</div><div class="para">
<code class="command">/usr/sbin/setsebool -P allow_user_exec_content
off</code>
</div><div class="formalpara"><h5 class="formalpara"
id="form-Security-Enhanced_Linux-Booleans_for_Users_Executing_Applications-staff_t">staff_t</h5>
Para <span class="emphasis"><em>impedir</em></span>
que los usuarios Linux en el dominio <code
class="computeroutput">staff_t</code> ejecuten aplicaciones en sus
directorios de inicio y en <code class="filename">/tmp/</code>:
</div><div class="para">
<code class="command">/usr/sbin/setsebool -P allow_staff_exec_content
off</code>
</div></div></div><div class="chapter"
lang="es-ES"><div
class="titlepage"><div><div><h2 class="title"
id="chap-Security-Enhanced_Linux-Troubleshooting">Capítulo 7. Solución a
Problemas</h2></div></div></div><div
class="toc"><dl><dt><span class="section"><a
href="#sect-Security-Enhanced_Linux-Troubleshooting-What_Happens_when_Access_is_Denied">7.1.
Qué pasa cuando el Acceso es Denegado</a></span></dt><dt><span
class="section"><a
href="#sect-Security-Enhanced_Linux-Troubleshooting-Top_Three_Causes_of_Problems">7.2.
Tres Principales Causas de
Problemas</a></span></dt><dd><dl><dt><span
class="section"><a
href="#sect-Security-Enhanced_Linux-Top_Three_Causes_of_Problems-Labeling_Problems">7.2.1.
Problemas de Etiquetados</a></span></dt><dt><span
class="section"><a
href="#sect-Security-Enhanced_Linux-Top_Three_Causes_of_Problems-How_are_Confined_Services_Running">7.2.2.
¿Cómo se Ejecutan los Servicios
Confinados?</a></span></dt><dt><span
class="section"><a href="#sect-Securit
y-Enhanced_Linux-Top_Three_Causes_of_Problems-Evolving_Rules_and_Broken_Applications">7.2.3.
Evolucionando las Reglas y las Aplicaciones
Rotas</a></span></dt></dl></dd><dt><span
class="section"><a
href="#sect-Security-Enhanced_Linux-Troubleshooting-Fixing_Problems">7.3.
Corrección de
Problemas</a></span></dt><dd><dl><dt><span
class="section"><a
href="#sect-Security-Enhanced_Linux-Fixing_Problems-Linux_Permissions">7.3.1.
Permisos de Linux</a></span></dt><dt><span
class="section"><a
href="#sect-Security-Enhanced_Linux-Fixing_Problems-Possible_Causes_of_Silent_Denials">7.3.2.
Posibles Causas de las Negaciones
Silenciosas</a></span></dt><dt><span
class="section"><a
href="#sect-Security-Enhanced_Linux-Fixing_Problems-Manual_Pages_for_Services">7.3.3.
Páginas de Manual para Servicios</a></span></dt><dt><span
class="section"><a
href="#sect-Security-Enhanced_Linux-Fixing_Problems-Permissive_Domains">7.3.4.
Dominios Permisivos</a></span></dt><dt><span
class="section"><a href="#sec
t-Security-Enhanced_Linux-Fixing_Problems-Searching_For_and_Viewing_Denials">7.3.5.
Búsqueda y Revisión de Negaciones</a></span></dt><dt><span
class="section"><a
href="#sect-Security-Enhanced_Linux-Fixing_Problems-Raw_Audit_Messages">7.3.6.
Mensajes Crudos de Auditoría</a></span></dt><dt><span
class="section"><a
href="#sect-Security-Enhanced_Linux-Fixing_Problems-sealert_Messages">7.3.7.
Mensajes sealert</a></span></dt><dt><span
class="section"><a
href="#sect-Security-Enhanced_Linux-Fixing_Problems-Allowing_Access_audit2allow">7.3.8.
Permitiendo el Acceso:
audit2allow</a></span></dt></dl></dd></dl></div><div
class="para">
El siguiente capítulo describe qué pasa cuando SELinux niega el acceso; las principales
tres causas de problemas; dónde encontrar información acerca del correcto etiquetado;
análisis de las negaciones de SELinux; y creación de módulos de políticas personalizados
con <code class="command">audit2allow</code>.
</div><div class="section" lang="es-ES"><div
class="titlepage"><div><div><h2 class="title"
id="sect-Security-Enhanced_Linux-Troubleshooting-What_Happens_when_Access_is_Denied">7.1.
Qué pasa cuando el Acceso es
Denegado</h2></div></div></div><div class="para">
Las decisiones de SELinux, tales como permitir o negar el acceso, son cacheadas. Este
cache se conoce como Caché Vector de Acceso (AVC). Los mensajes de negación se registran
cuando SELinux niega el acceso. Estas negaciones se conocen también como "negaciones
AVC", y se guardan en una ubicación distinta, dependiendo de los demonios que se
ejecutan:
</div><div class="segmentedlist"><table
border="0"><thead><tr
class="segtitle"><th>Daemon</th><th>Log
Location</th></tr></thead><tbody><tr
class="seglistitem"><td class="seg">auditd
on</td><td class="seg"><code
class="filename">/var/log/audit/audit.log</code></td></tr><tr
class="seglistitem"><td class="seg">auditd off; rsyslogd
on</td><td class="seg"><code
class="filename">/var/log/messages</code></td></tr><tr
class="seglistitem"><td class="seg">setroubleshootd,
rsyslogd, and auditd on</td><td class="seg"><code
class="filename">/var/log/audit/audit.log</code>. Easier-to-read denial
messages also sent to <code
class="filename">/var/log/messages</code></td></tr></tbody></table></div><div
class="para">
Si está corriendo el Sistema de Ventanas X, ya tienen los paquetes <span
class="package">setroubleshoot</span> y <span
class="package">setroubleshoot-server</span> instalados, y los demonios
<code class="systemitem">setroubleshootd</code> y <code
class="systemitem">auditd</code> están ejecutándose, se muestra una
estrella amarilla y una advertencia cuando SELinux deniega el acceso:
</div><div class="mediaobject"><img
src="./images/setroubleshoot_denial.png"/></div><div
class="para">
Haciendo clic en las estrelas se presenta un análisis detallado de por qué SELinux negó
el acceso, y una posible solución para permitir el acceso. Si no está corriendo el Sistema
de Ventanas X, es menos obvio cuando un acceso es negado por SELinux. Por ejemplo, los
usuarios navegando su sitio web pueden recibir un error similar al siguiente:
</div><pre class="screen">Prohibido
No tiene permiso para acceder el <em
class="replaceable"><code>archivo xx</code></em> en este
servidor
</pre><div class="para">
Para estas situaciones, si las reglas DAC (los permisos estándares de Linux) permiten
el acceso, busque en <code class="filename">/var/log/messages</code>
y <code class="filename">/var/log/audit/audit.log</code> la cadena
de los errores <code class="computeroutput">"SELinux está
negando"</code> y <code
class="computeroutput">"negado"</code> respectivamente. Esto
se puede hacer con los siguientes comandos como usuario root de Linux:
</div><div class="para">
<code class="command">grep "SELinux está previniendo"
/var/log/messages</code>
</div><div class="para">
<code class="command">grep "denegado"
/var/log/audit/audit.log</code>
</div></div><div class="section"
lang="es-ES"><div
class="titlepage"><div><div><h2 class="title"
id="sect-Security-Enhanced_Linux-Troubleshooting-Top_Three_Causes_of_Problems">7.2.
Tres Principales Causas de Problemas</h2></div></div></div><div
class="para">
Las siguientes secciones describen las tres principales causas de problemas: problemas
de etiquetados, configuración de Booleanos y puertos para servicios, y la evolución de las
reglas SELinux.
</div><div class="section" lang="es-ES"><div
class="titlepage"><div><div><h3 class="title"
id="sect-Security-Enhanced_Linux-Top_Three_Causes_of_Problems-Labeling_Problems">7.2.1.
Problemas de Etiquetados</h3></div></div></div><div
class="para">
En sistemas que corren SELinux, todos los procesosy archivos se etiquetan con una
etiqueta que contiene información de seguridad relevante. Esta información se llama
contexto de SELinux. Si estas etiquetas están mal, el acceso puede ser negado. Si una
aplicación se etiqueta incorrectamente, el proceso al que transiciona puede no tener la
etiqueta correcta, causando negaciones de acceso de SELinux, y los procesos pueden crear
archivo con las etiquetas incorrectas.
</div><div class="para">
Una causa común de problemas de etiquetados es cuando un directorio no estandar se usa
para un servicio. Por ejemplo, en vez de usar <code
class="filename">/var/www/html/</code> para un sitio web, un
administrador prefiere usar <code
class="filename">/srv/miweb/</code>. En Fedora 11, el directorio
<code class="filename">/srv/</code> se etiqueta con el tipo <code
class="computeroutput">var_t</code>. Los archivos y directorios creados
en <code class="filename">/srv/</code> heredan este tipo. También,
los directorios de alto nivel recién creados (como <code
class="filename">/miservidor/</code>) puede ser etiquetado con el tipo
<code class="computeroutput">default_t</code>. SELinux impide al
Servidor HTTP Apache (<code class="systemitem">httpd</code>) el
acceso a estos dos tipos. Para permitirle el acceso, SELinux debe saber qué archivos en
<code class="filename">/srv/miweb/</code> son accesibles a <code
class="systemitem">httpd</code>:
</div><pre class="screen"># /usr/sbin/semanage fcontext -a -t
httpd_sys_content_t \
"/srv/myweb(/.*)?"
</pre><div class="para">
Este comando <code class="command">semanage</code> agrega el
contexto para el directorio <code
class="filename">/srv/miweb/</code> (y todos los archivos dentro de él)
a la configuración de contexto de archivos de SELinux <sup>[<a
id="d0e5345" href="#ftn.d0e5345"
class="footnote">14</a>]</sup>. El comando <code
class="command">semanage</code> no cambia el contexto. Como usuario
root de Linux, ejecute el comando <code
class="command">restorecon</code> para aplicar los cambios:
</div><pre class="screen"># /sbin/restorecon -R -v /srv/myweb
</pre><div class="para">
Vaya a <a class="xref"
href="#sect-Security-Enhanced_Linux-SELinux_Contexts_Labeling_Files-Persistent_Changes_semanage_fcontext"
title="5.7.2. Cambios Persistentes: semanage fcontext">Sección 5.7.2,
“Cambios Persistentes: semanage fcontext”</a> para más información sobre agregado de
contextos a la configuración de contexto de archivo.
</div><div class="section" lang="es-ES"><div
class="titlepage"><div><div><h4 class="title"
id="sect-Security-Enhanced_Linux-Labeling_Problems-What_is_the_Correct_Context">7.2.1.1.
¿Cuál es el contexto correcto?</h4></div></div></div><div
class="para">
El comando <code class="command">matchpathcon</code> chequea el
contexto de un nombre completo de archivo y lo compara con la etiqueta por defecto para
esa dirección. El siguiente ejemplo muestra el uso de <code
class="command">matchpathcon</code> en un directorio con archivos
etiquetados incorrectamente:
</div><pre class="screen">$ /usr/sbin/matchpathcon -V
/var/www/html/*
/var/www/html/index.html tiene el contexto unconfined_u:object_r:user_home_t:s0, debería
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ía
ser system_u:object_r:httpd_sys_content_t:s0
</pre><div class="para">
En este ejemplo, los archivos <code
class="filename">index.html</code> and <code
class="filename">pagina1.html</code> se etiquetan con el tipo <code
class="computeroutput">user_home_t</code>. Este tipo se usa para
archivos en los directorios de inicio de los usuarios. Usando el comando <code
class="command">mv</code> para mover archivos puede resultar en
archivos etiquetados con el tipo <code
class="computeroutput">user_home_t</code>. Este tipo no debería existir
fuera de los directorios home. Use el comando <code
class="command">restorecon</code> para restaurar tales archivos a su
tipo correcto:
</div><pre class="screen"># /sbin/restorecon -v
/var/www/html/index.html
restorecon reset /var/www/html/index.html context
unconfined_u:object_r:user_home_t:s0->system_u:object_r:httpd_sys_content_t:s0
</pre><div class="para">
Para restaurar el contexto de todos los archivos bajo un directorio, use la opción
<code class="option">-R</code>:
</div><pre class="screen"># /sbin/restorecon -R -v
/var/www/html/
restorecon reset /var/www/html/page1.html context
unconfined_u:object_r:samba_share_t:s0->system_u:object_r:httpd_sys_content_t:s0
restorecon reset /var/www/html/index.html context
unconfined_u:object_r:samba_share_t:s0->system_u:object_r:httpd_sys_content_t:s0
</pre><div class="para">
Vaya a <a class="xref"
href="#sect-Security-Enhanced_Linux-Maintaining_SELinux_Labels_-Checking_the_Default_SELinux_Context"
title="5.10.3. Chequeando el Contexto SELinux Predeterminado">Sección 5.10.3,
“Chequeando el Contexto SELinux Predeterminado”</a> para un ejemplo más detallado de
<code class="command">matchpathcon</code>.
</div></div></div><div class="section"
lang="es-ES"><div
class="titlepage"><div><div><h3 class="title"
id="sect-Security-Enhanced_Linux-Top_Three_Causes_of_Problems-How_are_Confined_Services_Running">7.2.2.
¿Cómo se Ejecutan los Servicios
Confinados?</h3></div></div></div><div
class="para">
Los servicios se pueden ejecutar en una variedad de formas. Para cambiar esto, debe
decirle a SELinux cómo correrá los servicios. Esto se puede conseguir vía los Booleanos
que permiten que parte de las políticas de SELinux se cambien en tiempo de ejecución, sin
ningún conocimiento sobre la escritura de políticas de SELinux. Esto permite cambios,
tales como permitir a servicios que accedan a sistemas de archivo NFS, sin recargar o
recompilar una política SELinux. También, correr servicios en números de puerto no
predeterminados requiere que la configuración de la política se actualice vía el comando
<code class="command">semanage</code>.
</div><div class="para">
Por ejemplo, para permitir al Servidor HTTP Apache comunicarse con MySQL, active el
Booleano <code
class="computeroutput">httpd_can_network_connect_db</code>:
</div><pre class="screen"># /usr/sbin/setsebool -P
httpd_can_network_connect_db on
</pre><div class="para">
Si el acceso es denegado para un servicio particular, use los comandos <code
class="command">getsebool</code> y <code
class="command">grep</code> para ver si algún Booleano está disponible
para permitir el acceso. Por ejemplo, use el comando <code
class="command">getsebool -a | grep ftp</code> para buscar un Booleano
relacionado con FTP:
</div><pre class="screen">$ /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
</pre><div class="para">
Para una lista de los Booleanos y de si están activos o inactivos, corra el comando
<code class="command">/usr/sbin/getsebool -a</code>. Para una lista
de los Booleanos y una explicación de lo que son, y de si están activos o no, ejecute el
comando <code class="command">/usr/sbin/semanage boolean -l</code>
como usuario root de Linux. vaya a <a class="xref"
href="#sect-Security-Enhanced_Linux-Working_with_SELinux-Booleans"
title="5.6. Booleanos">Sección 5.6, “Booleanos”</a> para información
sobre listado y configuración de Booleanos.
</div><div class="formalpara"><h5 class="formalpara"
id="form-Security-Enhanced_Linux-How_are_Confined_Services_Running-Port_Numbers">Números
de Puertos</h5>
Dependiendo de la configuración de la política, los servicios pueden tener permitido
correr sobre ciertos números de puerto. Intentar cambiar el puerto en el que corre un
servicio sin cambiar la política puede resultar en un fallo al iniciar el servicio. Por
ejemplo, ejecute el comando <code class="command">semanage port -l | grep
http</code> como usuario root de Linux para listar los puertos relacionados con
<code class="systemitem">http</code>:
</div><pre class="screen"># /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
</pre><div class="para">
El tipo de puerto <code
class="computeroutput">http_port_t</code> define los puertos en los que
el Servidor HTTP Apache puede escuchar, que en este caso son los puertos TCP 80, 443, 488,
8008, 8009, y 8443. Si un administrador configura <code
class="filename">httpd.conf</code> para que <code
class="systemitem">httpd</code> escuche en el puerto 9876 (<code
class="option">Listen 9876</code>), pero la política no fue actualizada
para reflejar esto, el comando <code class="command">service httpd
start</code> falla:
</div><pre class="screen"># /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]
</pre><div class="para">
Una negación de SELinux es similar a la siguiente y se guarda en <code
class="filename">/var/log/audit/audit.log</code>:
</div><pre class="screen">type=AVC msg=audit(1225948455.061:294):
avc: denied { name_bind } for pid=4997 comm="httpd" src=9876
scontext=unconfined_u:system_r:httpd_t:s0 tcontext=system_u:object_r:port_t:s0
tclass=tcp_socket
</pre><div class="para">
Para permitir a <code class="systemitem">httpd</code> escuchar
en un puerto que no está listado en el tipo de puerto <code
class="computeroutput">http_port_t</code>, ejecute el comando <code
class="command">semanage port</code> para agregar un puerto a la
configuración de la política <sup>[<a id="d0e5507"
href="#ftn.d0e5507" class="footnote">15</a>]</sup>:
</div><pre class="screen"># /usr/sbin/semanage port -a -t
http_port_t -p tcp 9876
</pre><div class="para">
La opción <code class="option">-a</code> agrega un nuevo
registro; la opción <code class="option">-t</code> define un tipo; y
la opción <code class="option">-p</code> define un protocolo. El
último argumento es el número de puerto a agregar.
</div></div><div class="section"
lang="es-ES"><div
class="titlepage"><div><div><h3 class="title"
id="sect-Security-Enhanced_Linux-Top_Three_Causes_of_Problems-Evolving_Rules_and_Broken_Applications">7.2.3.
Evolucionando las Reglas y las Aplicaciones
Rotas</h3></div></div></div><div class="para">
Las aplicaciones se pueden romper, provocando que SELinux niegue el acceso. También,
las reglas de SELinux evolucionan - SELinux no se debe ver como una aplicación que se
ejecuta en una cierta forma, haciendo que deniegue el acceso, aún cuando la aplicación
está funcionado como se espera que lo haga. Por ejemplo, si una nueva versión de
PostgreSQL se lanza, puede realizar acciones sobre la política actual que no han sido
vistas antes, haciendo que el acceso sea denegado, aún cuando el acceso debería ser
permitido.
</div><div class="para">
Para estas situaciones, después de que se niegue el acceso, use <code
class="command">audit2allow</code> para crear un módulo de política
personalizado para permitir el acceso. Vaya a <a class="xref"
href="#sect-Security-Enhanced_Linux-Fixing_Problems-Allowing_Access_audit2allow"
title="7.3.8. Permitiendo el Acceso: audit2allow">Sección 7.3.8, “Permitiendo
el Acceso: audit2allow”</a> para más información sobre el uso de <code
class="command">audit2allow</code>.
</div></div></div><div class="section"
lang="es-ES"><div
class="titlepage"><div><div><h2 class="title"
id="sect-Security-Enhanced_Linux-Troubleshooting-Fixing_Problems">7.3.
Corrección de Problemas</h2></div></div></div><div
class="para">
Las siguientes secciones ayudan a resolver problemas. Cubren los temas: chequeo de los
permisos de Linux, que se chequean antes que las reglas de SELinux; posibles causas de
negaciones de acceso de SELinux, pero no negaciones que se estén guardando; páginas man de
los servicios, que contienen información sobre etiquetado y Booleanos; dominios
permisivos, para permitir a un proceso correr en modo permisivo, en vez de todo el
sistema; cómo buscar y encontrar mensajes; análisis de negaciones; y creación de módulos
de políticas personalizados con <code
class="command">audit2allow</code>.
</div><div class="section" lang="es-ES"><div
class="titlepage"><div><div><h3 class="title"
id="sect-Security-Enhanced_Linux-Fixing_Problems-Linux_Permissions">7.3.1.
Permisos de Linux</h3></div></div></div><div
class="para">
Cuando el acceso se niega, verifique los permisos estándares de LInux. Como se
mencionó en <a class="xref"
href="#chap-Security-Enhanced_Linux-Introduction" title="Capítulo 2.
Introducción">Capítulo 2, <i>Introducción</i></a>, la mayoría de
los sistemas operativos usan un sistema de Control de Acceso Discrecional (DAC) para
controlar el acceso, permitiendo a los usuarios controlar los permisos de sus propios
archivos. Las reglas de políticas de SELinux se verifican después de estas reglas DAC. Las
reglas de políticas de SELinux no se usan si las reglas DAC niegan el acceso al
principio.
</div><div class="para">
Si el acceso es denegado y no hay negaciones SELinux guardadas, use el comando
<code class="command">ls -l</code> para ver los permisos estándares
de Linux:
</div><pre class="screen">$ ls -l /var/www/html/index.html
-rw-r----- 1 root root 0 2009-05-07 11:06 index.html
</pre><div class="para">
En este ejemplo, <code class="filename">index.html</code>
pertenece al usuario y al grupo root. El usuario root tiene permisos de lectura y
escritura (<code class="computeroutput">-rw</code>), y los miembros
del grupo root tienen permisos de lectura (<code
class="computeroutput">-r-</code>). Cualquier otro no tiene acceso
(<code class="computeroutput">---</code>). Por defecto, tales
permisos no permiten a <code class="systemitem">httpd</code> leer
este archivo. Para resolver esto, use el comando <code
class="command">chown</code> el dueño y el grupo. Este comando se debe
ejecutar como usuario root de Linux:
</div><pre class="screen"># chown apache:apache
/var/www/html/index.html
</pre><div class="para">
Esto asume la configuración predeterminada, en la que <code
class="systemitem">httpd</code> corre como usuario apache de Linux. Si
corre <code class="systemitem">httpd</code> con un usuario
diferente, reemplace <code
class="computeroutput">apache:apache</code> con ese usuario.
</div><div class="para">
Vaya al borrador <a
href="http://fedoraproject.org/wiki/Docs/Drafts/AdministrationGuide/...
de Documentación de Fedora - "Permisos"</a> para información sobre el
manejo de los permisos de Linux.
</div></div><div class="section"
lang="es-ES"><div
class="titlepage"><div><div><h3 class="title"
id="sect-Security-Enhanced_Linux-Fixing_Problems-Possible_Causes_of_Silent_Denials">7.3.2.
Posibles Causas de las Negaciones
Silenciosas</h3></div></div></div><div
class="para">
En ciertas situaciones, las negaciones AVC pueden no ser guardadas cuando SELinux
niega el acceso. Las aplicaciones y las funciones de las bibliotecas del sistema a menudo
prueban más accesos que los pedidos para realizar sus tareas. Para mantener el menor
privilegio sin llenar los informes de auditoría con negaciones AVC para pruebas sin
peligro de las aplicaciones, la política puede silenciar las negaciones AVC sin permitir
el uso de reglas <code class="computeroutput">dontaudit</code>.
Estas reglas son comúnes en la política estándar. La contraparte de <code
class="computeroutput">dontaudit</code> es que, aunque SELinux niega el
acceso, los mensajes no se guardan, lo que dificulta resolver el problema.
</div><div class="para">
Deshabilite temporalmente las reglas <code
class="computeroutput">dontaudit</code>, permitiendo que se guarden
todas las negaciones, ejecute el siguiente comando como usuario root de Linux:
</div><div class="para">
<code class="command">/usr/sbin/semodule -DB</code>
</div><div class="para">
La opción <code class="option">-D</code> deshabilita las reglas
<code class="computeroutput">dontaudit</code>; la opción <code
class="option">-B</code> reconstruye la política. Después de ejcutar
<code class="command">semodule -DB</code>, pruebe ejercitar la
aplicación que tuvo problemas de permisos, y vea si ahora se guardan negaciones de SELinux
relacionadas con la aplicación. Tenga cuidado con la decición de qué negaciones se deben
permitir, dado que algunas se deben ignorar y manejarse vía reglas <code
class="computeroutput">dontaudit</code>. Si tiene duda, o busca alguna
guía, contacte a otros usuarios y desarrolladores de SELinux en una lista de SELinux, tal
como <a
href="http://www.redhat.com/mailman/listinfo/fedora-selinux-list&quo...;.
</div><div class="para">
Para reconstruir la política y habilitar las reglas <code
class="computeroutput">dontaudit</code>, ejecute el siguiente comando
como usuario root de Linux:
</div><div class="para">
<code class="command">/usr/sbin/semodule -B</code>
</div><div class="para">
Esto restaura la política a su estado original. Para una lista completa de las reglas
<code class="computeroutput">dontaudit</code>, corra el comando
<code class="command">sesearch --dontaudit</code>. Búsquedas más
refinadas usando la opción <code class="option">-s <em
class="replaceable"><code>dominio</code></em></code>
y el comando <code class="command">grep</code>. Por ejemplo:
</div><pre class="screen">$ 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 ;
</pre><div class="para">
Vaya a <a class="xref"
href="#sect-Security-Enhanced_Linux-Fixing_Problems-Raw_Audit_Messages"
title="7.3.6. Mensajes Crudos de Auditoría">Sección 7.3.6, “Mensajes Crudos
de Auditoría”</a> y a <a class="xref"
href="#sect-Security-Enhanced_Linux-Fixing_Problems-sealert_Messages"
title="7.3.7. Mensajes sealert">Sección 7.3.7, “Mensajes sealert”</a>
para información acerca del análisis de las negaciones.
</div></div><div class="section"
lang="es-ES"><div
class="titlepage"><div><div><h3 class="title"
id="sect-Security-Enhanced_Linux-Fixing_Problems-Manual_Pages_for_Services">7.3.3.
Páginas de Manual para Servicios</h3></div></div></div><div
class="para">
Las páginas de manual para los servicios conteniendo información valiosa, tal como qué
tipo de archivo usar para una situación dada, y los Booleanos para cambiar el acceso que
un servicio tiene (tal como <code class="systemitem">httpd</code>
para acceder sistemas de archivos NFS). Esta información puede estar en la página de
manual estándar o una página de manual con <code
class="computeroutput">selinux</code> como prefijo o sufijo.
</div><div class="para">
Por ejemplo, la página de manual <span class="citerefentry"><span
class="refentrytitle">httpd_selinux</span>(8)</span> tiene
información sobre qué tipo de archivo usar para una situación dada, así como los Booleanos
para permitir scripts, compartir archivos, acceder directorios dentro de los directorios
home, y así sucesivamente. Otras páginas de manual con información de SELinux para
servicios incluyen a:
</div><div class="itemizedlist"><ul><li><div
class="para">
Samba: la página de manual <span class="citerefentry"><span
class="refentrytitle">samba_selinux</span>(8)</span> describe que
los archivos y directorios exportar vía Samba deben ser etiquetados con el tipo <code
class="computeroutput">samba_share_t</code>, así como los Booleanos
para permitir archivos etiquetados con otros tipos distintos a <code
class="computeroutput">samba_share_t</code> para exportarlos vía
Samba.
</div></li><li><div class="para">
NFS: la página de manual <span class="citerefentry"><span
class="refentrytitle">nfs_selinux</span>(8)</span> describe que,
por defecto, los sistemas de archivo no se pueden exportar vía NFS, y que no se permite
exportar sistemas de archivos. Los Booleanos como <code
class="computeroutput">nfs_export_all_ro</code> o <code
class="computeroutput">nfs_export_all_rw</code> deben activarse.
</div></li><li><div class="para">
Berkeley Internet Name Domain (BIND): la página de manual de <span
class="citerefentry"><span
class="refentrytitle">named</span>(8)</span> describe qué tipo de
archivo usar para una situación dada (vea la sección <code
class="computeroutput">Perfil de Seguridad de SELinux para BIND de Red
Hat</code> section). La página man de <span
class="citerefentry"><span
class="refentrytitle">named_selinux</span>(8)</span> describe
que, por defecto, <code class="systemitem">named</code> no puede
escribir a archivos de zona maestros y que, para permitir ese acceso, el Booleano <code
class="computeroutput">named_write_master_zones</code> debe ser puesto
en 1.
</div></li></ul></div><div class="para">
La información en las páginas del manual le ayudan a configurar los tipos de archivos
correctos y los Booleanos, ayudándolo a prevenir las negaciones de acceso por parte de
SELinux.
</div></div><div class="section"
lang="es-ES"><div
class="titlepage"><div><div><h3 class="title"
id="sect-Security-Enhanced_Linux-Fixing_Problems-Permissive_Domains">7.3.4.
Dominios Permisivos</h3></div></div></div><div
class="para">
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 corre en modo obediente.
Previamente, no era posible hacer permisivo un único dominio (recuerde: los procesos
corren en dominios). En ciertas situaciones, esto llevó a hacer el sistema permisivo para
poder corregir los problemas.
</div><div class="para">
Fedora 11 introduce los dominios permisivos, donde un administrador puede configurar
un único 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 acceso e informa la negación AVC para situaciones donde
SELinux hubiera negado el acceso. Los dominios permisivos están también disponibles en
Fedora 9 (con las últimas actualizaciones aplicadas).
</div><div class="para">
En el Linux para Empresas de Red Hat 4 y 5, los Booleanos <code
class="computeroutput"><em
class="replaceable"><code>dominio</code></em>_disable_trans</code>
están disponibles para prevenir que una aplicación transicione a un dominio confinado, y
por lo tanto, el proceso se ejecute en un dominio no confinado, tal como <code
class="computeroutput">initrc_t</code>. Poniendo en 1 tales booleanos
pueden causar problemas serios. Por ejemplo, si el Booleano <code
class="computeroutput">httpd_disable_trans</code> se pone en 1:
</div><div class="itemizedlist"><ul><li><div
class="para">
<code class="systemitem">httpd</code> corre en el dominio no
confinado <code class="computeroutput">initrc_t</code>. Los archivos
creados por los procesos en el dominio <code
class="computeroutput">initrc_t</code> puede no tener aplicadas las
mismas reglas de etiquetados como los archivos creados por el proceso corriendo en el
dominio <code class="computeroutput">httpd_t</code>, permitiendo que
los procesos puedan potencialmente crear archivos mal etiquetados. Esto causa problemas
más adelante.
</div></li><li><div class="para">
dominios confinados que pueden comunicarse con <code
class="computeroutput">httpd_t</code> no pueden comunicarse con
<code class="computeroutput">initrc_t</code>, posiblemente causan
fallas adicionales.
</div></li></ul></div><div class="para">
Los Booleanos <code class="computeroutput"><em
class="replaceable"><code>domain</code></em>_disable_trans</code>
fueron eliminados de Fedora 7, y no se pusieron reemplazos. Los dominios permisivos pueden
resolver esos problemas: se aplican las reglas de transición y los archivos se crean con
las etiquetas correctas.
</div><div class="para">
Los dominios permisivos se pueden usar para:
</div><div class="itemizedlist"><ul><li><div
class="para">
hacer que un único proceso (dominio) corra permisivo para solucionar alguna
cuestión, en vez de poner todo el sistema en riesgo haciendo permisivo a todo el sistema.
</div></li><li><div class="para">
creación de políticas para nuevas aplicaciones. Previamente, era recomendado crear
una política mínima, y luego poner la máquina completa en modo permisivo, para que la
aplicación pudiera funcionar, pero las negaciones de SELinux eran igualmente grabadas.
<code class="command">audit2allow</code> podría usarse luego para
ayudar a escribir la política. Esto pone todo el sistema en riesgo. Con dominios
permisivos, sólo el dominio en la nueva política puede marcarse como permisivo, sin poner
en riesgo todo el sistema.
</div></li></ul></div><div class="section"
lang="es-ES"><div
class="titlepage"><div><div><h4 class="title"
id="sect-Security-Enhanced_Linux-Permissive_Domains-Making_a_Domain_Permissive">7.3.4.1.
Creando un Dominio Permisivo</h4></div></div></div><div
class="para">
Para hacer un dominio permisivo, ejecute el comando <code
class="command">semanage permissive -a <em
class="replaceable"><code>dominio</code></em></code>,
donde <em class="replaceable"><code>dominio</code></em>
es el dominio que quiere hacer permisivo. Por ejemplo, ejecute el siguiente comando como
usuario root de Linux para hacer permisivo el dominio <code
class="computeroutput">httpd_t</code> (el dominio en el que corre el
Servidor HTTP Apache):
</div><div class="para">
<code class="command">/usr/sbin/semanage permissive -a
httpd_t</code>
</div><div class="para">
Para ver una lista de los dominios que hizo permisivos, corra el comando <code
class="command">semodule -l | grep permissive</code> como usuario root
de Linux. Por ejemplo:
</div><pre class="screen"># /usr/sbin/semodule -l | grep
permissive
permissive_httpd_t 1.0
</pre><div class="para">
Si ya no quiere que un dominio sea permisivo, corra el comando <code
class="command">semanage permissive -d <em
class="replaceable"><code>dominio</code></em></code>
como usuario root de Linux. Por ejemplo:
</div><div class="para">
<code class="command">/usr/sbin/semanage permissive -d
httpd_t</code>
</div></div><div class="section"
lang="es-ES"><div
class="titlepage"><div><div><h4 class="title"
id="sect-Security-Enhanced_Linux-Permissive_Domains-Denials_for_Permissive_Domains">7.3.4.2.
Negaciones para Dominios Permisivos</h4></div></div></div><div
class="para">
El mensaje <code class="computeroutput">SYSCALL</code> es
diferente para dominios permisivos. El siguiente es un ejemplo de una negación de AVC (y
la llamada a sistema asociada) desde el Servidor HTTP Apache:
</div><pre class="screen">type=AVC msg=audit(1226882736.442:86):
avc: denied { getattr } for pid=2427 comm="httpd"
path="/var/www/html/archivo1" dev=dm-0 ino=284133
scontext=unconfined_u:system_r:httpd_t:s0 tcontext=unconfined_u:object_r:samba_share_t:s0
tclass=file
type=SYSCALL msg=audit(1226882736.442:86): arch=40000003 syscall=196 success=no exit=-13
a0=b9a1e198 a1=bfc2921c a2=54dff4 a3=2008171 items=0 ppid=2425 pid=2427 auid=502 uid=48
gid=48 euid=48 suid=48 fsuid=48 egid=48 sgid=48 fsgid=48 tty=(none) ses=4
comm="httpd" exe="/usr/sbin/httpd"
subj=unconfined_u:system_r:httpd_t:s0 key=(null)
</pre><div class="para">
Por defecto, el dominio <code
class="computeroutput">httpd_t</code> es no permisivo, y como tal, la
acción es negada, y el mensaje <code
class="computeroutput">SYSCALL</code> contiene <code
class="computeroutput">success=no</code>. El siguiente es un ejemplo de
negación AVC para la misma situación, excepto que el comando <code
class="command">semanage permissive -a httpd_t</code> se ejecutó para
hacer el dominio <code class="computeroutput">httpd_t</code>
permisivo:
</div><pre class="screen">type=AVC
msg=audit(1226882925.714:136): avc: denied { read } for pid=2512 comm="httpd"
name="archivo1" dev=dm-0 ino=284133 scontext=unconfined_u:system_r:httpd_t:s0
tcontext=unconfined_u:object_r:samba_share_t:s0 tclass=file
type=SYSCALL msg=audit(1226882925.714:136): arch=40000003 syscall=5 success=yes exit=11
a0=b962a1e8 a1=8000 a2=0 a3=8000 items=0 ppid=2511 pid=2512 auid=502 uid=48 gid=48 euid=48
suid=48 fsuid=48 egid=48 sgid=48 fsgid=48 tty=(none) ses=4 comm="httpd"
exe="/usr/sbin/httpd" subj=unconfined_u:system_r:httpd_t:s0 key=(null)
</pre><div class="para">
En este caso, aunque la negación AVC fue grabada, el acceso no fue negado, como se
muestra en el mensaje <code class="computeroutput">SYSCALL</code>
<code class="computeroutput">success=yes</code>.
</div><div class="para">
Vaya al blog de Dan Walsh <a
href="http://danwalsh.livejournal.com/24537.html">"Domi...
Permisivos"</a> para más información sobre dominios permisivos.
</div></div></div><div class="section"
lang="es-ES"><div
class="titlepage"><div><div><h3 class="title"
id="sect-Security-Enhanced_Linux-Fixing_Problems-Searching_For_and_Viewing_Denials">7.3.5.
Búsqueda y Revisión de Negaciones</h3></div></div></div><div
class="para">
Esta sección asume que los paquetes <span
class="package">setroubleshoot</span>, <span
class="package">setroubleshoot-server</span>, y <span
class="package">audit</span> están instalados, y que los demonios
<code class="systemitem">auditd</code>, <code
class="systemitem">rsyslogd</code> y <code
class="systemitem">setroubleshootd</code> están ejecutándose. Vaya a
<a class="xref"
href="#sect-Security-Enhanced_Linux-Working_with_SELinux-Which_Log_File_is_Used"
title="5.2. Qué Archivo Log se usa">Sección 5.2, “Qué Archivo Log se
usa”</a> para información sobre cómo iniciar estos demonios. Hay disponibles un
número de herramientas para ver las negaciones de SELinux, tales como <code
class="command">ausearch</code>, <code
class="command">aureport</code> y <code
class="command">sealert</code>.
</div><div class="formalpara"><h5 class="formalpara"
id="form-Security-Enhanced_Linux-Searching_For_and_Viewing_Denials-ausearch">ausearch</h5>
El paquete <span class="package">audit</span> provee <code
class="command">ausearch</code>. De la página de manual de <span
class="citerefentry"><span
class="refentrytitle">ausearch</span>(8)</span>: "<code
class="command">ausearch</code> es una herramienta que puede consultar
los registros del demonio audit basados en distintos criterios de
búsqueda"<sup>[<a id="d0e5956" href="#ftn.d0e5956"
class="footnote">16</a>]</sup>. La herramienta <code
class="command">ausearch</code> accede a <code
class="filename">/var/log/audit/audit.log</code>, y como tal, sebe ser
ejecutada como usuario root de Linux:
</div><div class="segmentedlist"><table
border="0"><thead><tr
class="segtitle"><th>Buscando</th><th>Comando</th></tr></thead><tbody><tr
class="seglistitem"><td class="seg">todas las
negaciones</td><td class="seg"><code
class="command">/sbin/ausearch -m
avc</code></td></tr><tr class="seglistitem"><td
class="seg">negaciones de hoy</td><td
class="seg"><code class="command">/sbin/ausearch -m avc -ts
today</code></td></tr><tr class="seglistitem"><td
class="seg">negaciones desde los últimos 10 minutos</td><td
class="seg"><code class="command">/sbin/ausearch -m avc -ts
recent</code></td></tr></tbody></table></div><div
class="para">
Para buscar negaciones de SELinux para un servicio particular, use la opción <code
class="option">-c <em
class="replaceable"><code>nombre-de-comando</code></em></code>,
donde <em
class="replaceable"><code>nombre-de-comando</code></em>
"es el nombre del ejecutable"<sup>[<a id="d0e6008"
href="#ftn.d0e6008" class="footnote">17</a>]</sup>, por
ejemplo, <code class="systemitem">httpd</code> para el Servidor HTTP
Apache, y <code class="systemitem">smbd</code> para Samba:
</div><div class="para">
<code class="command">/sbin/ausearch -m avc -c httpd</code>
</div><div class="para">
<code class="command">/sbin/ausearch -m avc -c smbd</code>
</div><div class="para">
Vaya a la página de manual de <span class="citerefentry"><span
class="refentrytitle">ausearch</span>(8)</span> para más opciones
de <code class="command">ausearch</code>.
</div><div class="formalpara"><h5 class="formalpara"
id="form-Security-Enhanced_Linux-Searching_For_and_Viewing_Denials-aureport">aureport</h5>
El paquete <span class="package">audit</span> provee <code
class="command">aureport</code>. De la página de manual de <span
class="citerefentry"><span
class="refentrytitle">aureport</span>(8)</span>: "<code
class="command">aureport</code> es una herramienta que produce informes
resumen de los registros de auditoría del sistema"<sup>[<a
id="d0e6068" href="#ftn.d0e6068"
class="footnote">18</a>]</sup>. La herramienta <code
class="command">aureport</code> accede a <code
class="filename">/var/log/audit/audit.log</code>, y como tal, se debe
ejecutar como usuario root de Linux. Para ver una lista de las negaciones de SElinux y
cuán a menudo ocurren, ejecute el comando <code class="command">aureport
-a</code>. El siguiente es un ejemplo de la salida en donde se incluyen dos
negaciones:
</div><pre class="screen"># /sbin/aureport -a
AVC Report
========================================================
# date time comm subj syscall class permission obj event
========================================================
1. 05/01/2009 21:41:39 httpd unconfined_u:system_r:httpd_t:s0 195 file getattr
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
unconfined_u:object_r:cifs_t:s0 denied 4
</pre><div class="para">
Vaya a la página de manual de <span class="citerefentry"><span
class="refentrytitle">aureport</span>(8)</span> para más opciones
de <code class="command">aureport</code>.
</div><div class="formalpara"><h5 class="formalpara"
id="form-Security-Enhanced_Linux-Searching_For_and_Viewing_Denials-sealert">sealert</h5>
El paquete <span class="package">setroubleshoot-server</span>
provee <code class="command">sealert</code>, que lee los mensajes de
negación traducidos por <span
class="package">setroubleshoot-server</span>. A las negaciones se le
asignan IDs, como se ve en <code
class="filename">/var/log/messages</code>. El siguiente es un ejemplo
de negación en <code class="filename">messages</code>:
</div><pre class="screen">setroubleshoot: SELinux esta
previniendo acerca de la intención de httpd (httpd_t) "getattr" to
/var/www/html/archivo1 (samba_share_t). Para mensajes SELinux completos, ejecute sealert
-l 84e0b04d-d0ad-4347-8317-22e74f6cd020
</pre><div class="para">
En este ejemplo, el ID de negación es <code
class="computeroutput">84e0b04d-d0ad-4347-8317-22e74f6cd020</code>. La
opción <code class="option">-l</code> toma un ID como argumento.
Ejecutando el comando <code class="command">sealert -l
84e0b04d-d0ad-4347-8317-22e74f6cd020</code> le presenta un análisis detallado de por
qué SELinux negó el acceso, y una posible solución para permitir el acceso.
</div><div class="para">
Si está corriendo el Sistema de Ventanas X, tenga los paquetes <span
class="package">setroubleshoot</span> y <span
class="package">setroubleshoot-server</span> instalados, y los demonios
<code class="systemitem">setroubleshootd</code> y <code
class="systemitem">auditd</code> ejecutándose, una estrella amarilla y
una advertencia se muestran cuando un acceso es negado por SELinux. Con clic sobre la
estrella se lanza <code class="command">sealert</code> modo gráfico
y se muestra la negación como HTML:
</div><div class="mediaobject"><img
src="./images/sealert_gui.png"/></div><div
class="itemizedlist"><ul><li><div class="para">
Ejecute el comando <code class="command">sealert -b</code>
para lanzar la GUI de <code class="command">sealert</code>.
</div></li><li><div class="para">
Ejecute el comando <code class="command">sealert -l \*</code>
para ver un análisis detallado de todas las negaciones.
</div></li><li><div class="para">
Como usuario root de Linux, ejecute el comando <code
class="command">sealert -a /var/log/audit/audit.log -H >
audit.html</code> para crear una versión HTML del análisis de <code
class="command">sealert</code>, como si se viera en la GUI de <code
class="command">sealert</code>.
</div></li></ul></div><div class="para">
Vaya a la página man de <span class="citerefentry"><span
class="refentrytitle">sealert</span>(8)</span> para más opciones
de <code class="command">sealert</code>.
</div></div><div class="section"
lang="es-ES"><div
class="titlepage"><div><div><h3 class="title"
id="sect-Security-Enhanced_Linux-Fixing_Problems-Raw_Audit_Messages">7.3.6.
Mensajes Crudos de Auditoría</h3></div></div></div><div
class="para">
Los mensajes crudos de auditoría se guardan en <code
class="filename">/var/log/audit/audit.log</code>. El siguiente es un
ejemplo de negación AVC (y su llamada a sistema asociado) que ocurrío cuando el Servidor
HTTP Apache (corriendo en el dominio <code
class="computeroutput">httpd_t</code>) intentó acceder el <code
class="filename">/var/www/html/archivo1</code> (etiquetado con el tipo
<code class="computeroutput">samba_share_t</code>):
</div><pre class="screen">type=AVC msg=audit(1226874073.147:96):
avc: denied { getattr } for pid=2465 comm="httpd"
path="/var/www/html/archivo1" dev=dm-0 ino=284133
scontext=unconfined_u:system_r:httpd_t:s0 tcontext=unconfined_u:object_r:samba_share_t:s0
tclass=file
type=SYSCALL msg=audit(1226874073.147:96): arch=40000003 syscall=196 success=no exit=-13
a0=b98df198 a1=bfec85dc a2=54dff4 a3=2008171 items=0 ppid=2463 pid=2465 auid=502 uid=48
gid=48 euid=48 suid=48 fsuid=48 egid=48 sgid=48 fsgid=48 tty=(none) ses=6
comm="httpd" exe="/usr/sbin/httpd"
subj=unconfined_u:system_r:httpd_t:s0 key=(null)
</pre><div class="variablelist"><dl><dt><span
class="term"><em class="replaceable"><code>{ getattr
}</code></em></span></dt><dd><div
class="para">
El item entre llaves indica el permiso que fue negado. <code
class="computeroutput">getattr</code> indica el proceso fuente que
intentó leer la información de estado del archivo destino. Esto ocurre antes de leer
archivos. Esta acción es negada dado que el archivo está siendo accedido con la etiqueta
equivocada. Los permisos vistos comúnmente incluyen a <code
class="computeroutput">getattr</code>, <code
class="computeroutput">read</code> y <code
class="computeroutput">write</code>.
</div></dd><dt><span
class="term">comm="<em
class="replaceable"><code>httpd</code></em>"</span></dt><dd><div
class="para">
El ejecutable que lanzó el proceso. La dirección completa del ejecutable se
encuentra en la sección <code class="computeroutput">exe=</code> del
mensaje de la llamada al sistema (<code
class="computeroutput">SYSCALL</code>), que es en este caso <code
class="computeroutput">exe="/usr/sbin/httpd"</code>.
</div></dd><dt><span
class="term">path="<em
class="replaceable"><code>/var/www/html/archivo1</code></em>"</span></dt><dd><div
class="para">
La dirección al objeto (destino) al que quiere acceder el proceso.
</div></dd><dt><span
class="term">scontext="<em
class="replaceable"><code>unconfined_u:system_r:httpd_t:s0</code></em>"</span></dt><dd><div
class="para">
El contexto de SELinux del proceso que intentó la acción denegada. En este caso, es
el contexto SELinux del Servidor HTTP Apache, que core en el dominio <code
class="computeroutput">httpd_t</code>.
</div></dd><dt><span
class="term">tcontext="<em
class="replaceable"><code>unconfined_u:object_r:samba_share_t:s0</code></em>"</span></dt><dd><div
class="para">
El contexto de SELinux del objeto (destino) al que intentó acceder el proceso. En
este caso, es el contexto SELinux del <code
class="filename">archivo1</code>. Nota: el tipo <code
class="computeroutput">samba_share_t</code> no es accesible para
procesos que corren el dominio <code
class="computeroutput">httpd_t</code>.
</div><div class="para">
En ciertas cituaciónes, el <code
class="computeroutput">tcontext</code> puede coincidir con <code
class="computeroutput">scontext</code>, por ejemplo, cuando un proceso
intenta ejecutar un servicio del sistema que cambiará las características de ese proceso
en ejecución, tales como el ID del usuario. También el <code
class="computeroutput">tcontext</code> puede coincidir con el <code
class="computeroutput">scontext</code> cuando un proceso intenta usar
más recursos (como la memoria) más allá de los límites normales permitidos, lo que resulta
en un chequeo de seguridad para ver si el proceso tiene permitido romper esos límites.
</div></dd></dl></div><div class="para">
Desde el mensaje de llamado al sistema (<code
class="computeroutput">SYSCALL</code>) nos interesan dos ítems:
</div><div class="itemizedlist"><ul><li><div
class="para">
<code class="computeroutput">success=<em
class="replaceable"><code>no</code></em></code>:
indica si la negación (AVC) fue aplicada o no. <code
class="computeroutput">success=no</code> indica que la llamada al
sistema no fue exitosa(SELinux negó el acceso). <code
class="computeroutput">success=yes</code> indica que la llamada al
sistema fue exitosa - esto se puede ver en dominios permisivos o en dominios no
confinados, tales como <code class="computeroutput">initrc_t</code>
y <code class="computeroutput">kernel_t</code>.
</div></li><li><div class="para">
<code class="computeroutput">exe="<em
class="replaceable"><code>/usr/sbin/httpd</code></em>"</code>:
la dirección completa al ejecutable que inició el proceso, que es en este caso <code
class="computeroutput">exe="/usr/sbin/httpd"</code>.
</div></li></ul></div><div class="para">
Un tipo de archivo incorrecto es una causa común de que SELinux niegue el acceso. Para
comenzar a resolver el problema, compare el contexto fuente (<code
class="computeroutput">scontext</code>) con el contexto destino
(<code class="computeroutput">tcontext</code>). ¿Debería el proceso
(<code class="computeroutput">scontext</code>) acceder a un objeto
(<code class="computeroutput">tcontext</code>)? Por ejemplo, el
Servidor HTTP Apache (<code class="computeroutput">httpd_t</code>)
sólo debería acceder tipos especificados en la página man <span
class="citerefentry"><span
class="refentrytitle">httpd_selinux</span>(8)</span>, tales como
<code class="computeroutput">httpd_sys_content_t</code>, <code
class="computeroutput">public_content_t</code>, y así sucesivamente, a
menos que se configure de otra forma.
</div></div><div class="section"
lang="es-ES"><div
class="titlepage"><div><div><h3 class="title"
id="sect-Security-Enhanced_Linux-Fixing_Problems-sealert_Messages">7.3.7.
Mensajes sealert</h3></div></div></div><div
class="para">
Las negaciones tienen IDs asignados, como se ve en <code
class="filename">/var/log/messages</code>. El siguiente es un ejemplo
de negación AVC (guardado en <code class="filename">messages</code>)
que ocurrió cuando el Servidor HTTP Apache (corriendo en el dominio <code
class="computeroutput">httpd_t</code> domain) intentó acceder el
<code class="filename">/var/www/html/archivo1</code> (etiquetado con
el tipo <code class="computeroutput">samba_share_t</code>):
</div><pre class="screen"><em
class="replaceable"><code>hostname</code></em>
setroubleshoot: SELinux está previniendo acerca de la intención de httpd (httpd_t) de
"getattr" sobre /var/www/html/archivo1 (samba_share_t). Para los mensajes
completos de SELinux, ejecute sealert -l 84e0b04d-d0ad-4347-8317-22e74f6cd020
</pre><div class="para">
Como se sugirió, ejecute el comando <code class="command">sealert -l
84e0b04d-d0ad-4347-8317-22e74f6cd020</code> para ver el mensaje completo. Este
comando sólo funciona en la máquina local, y presenta la misma información que la
interfase gráfica de <code class="command">sealert</code>:
</div><pre class="screen">$ sealert -l
84e0b04d-d0ad-4347-8317-22e74f6cd020
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 <em
class="replaceable"><code>hostname</code></em>
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 <em
class="replaceable"><code>hostname</code></em>
Platform <em class="replaceable"><code>Linux
hostname 2.6.27.4-68.fc11.i686 #1 SMP Thu Oct</code></em>
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=<em class="replaceable"><code>hostname</code></em>
type=AVC msg=audit(1225812178.788:101): avc: denied { getattr } for pid=2441
comm="httpd" path="/var/www/html/archivo1" dev=dm-0 ino=284916
scontext=unconfined_u:system_r:httpd_t:s0 tcontext=unconfined_u:object_r:samba_share_t:s0
tclass=file
node=<em class="replaceable"><code>hostname</code></em>
type=SYSCALL msg=audit(1225812178.788:101): arch=40000003 syscall=196 success=no exit=-13
a0=b8e97188 a1=bf87aaac a2=54dff4 a3=2008171 items=0 ppid=2439 pid=2441 auid=502 uid=48
gid=48 euid=48 suid=48 fsuid=48 egid=48 sgid=48 fsgid=48 tty=(none) ses=3
comm="httpd" exe="/usr/sbin/httpd"
subj=unconfined_u:system_r:httpd_t:s0 key=(null)
</pre><div class="variablelist"><dl><dt><span
class="term">Resumen</span></dt><dd><div
class="para">
Un breve resumen de la acción negada. Esto es lo mismo que la negación en <code
class="filename">/var/log/messages</code>. En este ejemplo, al proceso
<code class="systemitem">httpd</code> se le negó el acceso al
(<code class="filename">archivo1</code>), que está etiquetado con el
tipo <code class="computeroutput">samba_share_t</code>.
</div></dd><dt><span class="term">Descripción
Detallada</span></dt><dd><div class="para">
Una descripción más detallada. En este ejemplo <code
class="filename">archivo1</code> está etiquetado con el tipo <code
class="computeroutput">samba_share_t</code>. Este tipo se usa para
archivos y directorios que quiere exportar vía Samba. La descripción sugiere cambiar el
tipo a un tipo que pueda ser accedido por Samba y por el Servidor HTTP Apache, si tal
acceso es deseado.
</div></dd><dt><span class="term">Permitiendo
Acceso</span></dt><dd><div class="para">
Una sugerencia sobre cómo permitir el acceso. Esto puede hacerse reetiquetando
archivos, poniendo en 1 un Booleano, o creando un módulo de política local. En este caso,
la sugerencia es etiquetar el archivo con un tipo accesible por el Servidor HTTP Apache y
por Samba.
</div></dd><dt><span class="term">Comando para
Corregir</span></dt><dd><div class="para">
Un comando sugerido para permitir el acceso y resolver la negación. En este
ejemplo, se dá el comando para cambiar el tipo del <code
class="filename">archivo1</code> a <code
class="computeroutput">public_content_t</code>, que es accesible por el
Servidor HTTP Apache y por Samba.
</div></dd><dt><span class="term">Información
Adicional</span></dt><dd><div class="para">
Información que es útil en los informes de errores, como el nombre de paquete de
política y la versión (<code
class="computeroutput">selinux-policy-3.5.13-11.fc11</code>), pero que
no puede ser de ayuda para resolver por qué ocurrió la negación.
</div></dd><dt><span class="term">Mensajes Crudos
de Auditoría</span></dt><dd><div class="para">
Los mensajes crudos de auditoría de <code
class="filename">/var/log/audit/audit.log</code> que son asociados con
la negación. Vaya a <a class="xref"
href="#sect-Security-Enhanced_Linux-Fixing_Problems-Raw_Audit_Messages"
title="7.3.6. Mensajes Crudos de Auditoría">Sección 7.3.6, “Mensajes Crudos
de Auditoría”</a> para información acerca de cada ítem en la negación AVC.
</div></dd></dl></div></div><div
class="section" lang="es-ES"><div
class="titlepage"><div><div><h3 class="title"
id="sect-Security-Enhanced_Linux-Fixing_Problems-Allowing_Access_audit2allow">7.3.8.
Permitiendo el Acceso: audit2allow</h3></div></div></div><div
class="para">
No use el ejemplo en esta sección en producción. Se usa sólo para mostrar el uso de
<code class="command">audit2allow</code>.
</div><div class="para">
De la página de manual de <span class="citerefentry"><span
class="refentrytitle">audit2allow</span>(1)</span>:
"<code class="command">audit2allow</code> - genera reglas para
habilitar de la política de SELinux a partir de operaciones negadas"<sup>[<a
id="d0e6509" href="#ftn.d0e6509"
class="footnote">19</a>]</sup>. Después de analizar las
negaciones como en <a class="xref"
href="#sect-Security-Enhanced_Linux-Fixing_Problems-sealert_Messages"
title="7.3.7. Mensajes sealert">Sección 7.3.7, “Mensajes sealert”</a>,
y si ningún cambio de etiqueta o de Booleano permitió el acceso, use <code
class="command">audit2allow</code> para crear un módulo de política
local. Después de que el acceso es negado por SELinux, ejecutando el comando <code
class="command">audit2allow</code> presenta reglas de Obligación de
Tipo que permitirían el acceso previamente negado.
</div><div class="para">
El siguiente ejemplo muestra el uso de <code
class="command">audit2allow</code> para crear un módulo de política:
</div><div class="orderedlist"><ol><li><div
class="para">
Una negación y la llamada al sistema asociado se graban en <code
class="filename">/var/log/audit/audit.log</code>:
</div><pre class="screen">type=AVC
msg=audit(1226270358.848:238): avc: denied { write } for pid=13349
comm="certwatch" name="cache" dev=dm-0 ino=218171
scontext=system_u:system_r:certwatch_t:s0 tcontext=system_u:object_r:var_t:s0 tclass=dir
type=SYSCALL msg=audit(1226270358.848:238): arch=40000003 syscall=39 success=no exit=-13
a0=39a2bf a1=3ff a2=3a0354 a3=94703c8 items=0 ppid=13344 pid=13349 auid=4294967295 uid=0
gid=0 euid=0 suid=0 fsuid=0 egid=0 sgid=0 fsgid=0 tty=(none) ses=4294967295
comm="certwatch" exe="/usr/bin/certwatch"
subj=system_u:system_r:certwatch_t:s0 key=(null)
</pre><div class="para">
En este ejemplo, a <span
class="application"><strong>certwatch</strong></span>
(<code class="computeroutput">comm="certwatch"</code>) se
le negó el acceso de escritura (<code class="computeroutput">{ write
}</code>) a un direcotiro etiquetado con el tipo <code
class="computeroutput">var_t</code> (<code
class="computeroutput">tcontext=system_u:object_r:var_t:s0</code>).
Analice la negación como en <a class="xref"
href="#sect-Security-Enhanced_Linux-Fixing_Problems-sealert_Messages"
title="7.3.7. Mensajes sealert">Sección 7.3.7, “Mensajes sealert”</a>.
Si no hay cambios de etiquetas o Boleanos que permitan el acceso, use <code
class="command">audit2allow</code> para crear un módulo de política
local.
</div></li><li><div class="para">
Con una negación grabada, tal como la negación de <code
class="computeroutput">certwatch</code> en el paso 1, corra el comando
<code class="command">audit2allow -w -a</code> para producir una
descripción legible al humano sobre por qué el acceso fue negado. La opción <code
class="option">-a</code> hace que se lean todos los registros de
autidoría. La opción <code class="option">-w</code> produce una
descripción legible al humano. La herramienta <code
class="command">audit2allow</code> accede a <code
class="filename">/var/log/audit/audit.log</code>, y como tal, debe ser
ejecutada como usuario root de Linux:
</div><pre class="screen"># audit2allow -w -a
type=AVC msg=audit(1226270358.848:238): avc: denied { write } for pid=13349
comm="certwatch" name="cache" dev=dm-0 ino=218171
scontext=system_u:system_r:certwatch_t:s0 tcontext=system_u:object_r:var_t:s0 tclass=dir
Was caused by:
Missing type enforcement (TE) allow rule.
You can use audit2allow to generate a loadable module to allow this access.
</pre><div class="para">
Como se muestra, el acceso fue negado debido a que falta una regla de Obligación de
Tipo.
</div></li><li><div class="para">
Ejecute el comando <code class="command">audit2allow -a</code>
para ver la regla de Obligación de Tipo que permite el acceso negado:
</div><pre class="screen"># audit2allow -a
#============= certwatch_t ==============
allow certwatch_t var_t:dir write;
</pre><div class="important"><h2>Importante</h2><div
class="para">
La falta de reglas de Ejecución de Tipos son usualmente causados por errores en la
política de SELinux, y deben ser informadas en el <a
href="https://bugzilla.redhat.com/">Bugzilla de Red Hat</a>. Para
Fedora, crear informes sobre el producto <code
class="computeroutput">Fedora</code>, y seleccione el componente
<code class="computeroutput">selinux-policy</code>. Incluya la
salida de los comandos <code class="command">audit2allow -w
-a</code> y <code class="command">audit2allow -a</code> en el
informe del error.
</div></div></li><li><div class="para">
Para usar la regla mostrada por <code class="command">audit2allow
-a</code>, ejecute el comando <code class="command">audit2allow -a
-M <em
class="replaceable"><code>mycertwatch</code></em></code>
como usuario root de Linux. La opción <code class="option">-M</code>
crea un archivo de Obligación de Tipo (<code
class="filename">.te</code>) con el nombre especificado en <code
class="option">-M</code>, en su directorio actual de trabajo:
</div><pre class="screen"># audit2allow -a -M mycertwatch
******************** IMPORTANT ***********************
To make this policy package active, execute:
semodule -i mycertwatch.pp
# ls
mycertwatch.pp mycertwatch.te
</pre><div class="para">
También, <code class="command">audit2allow</code> compila la
regla de Obediencia de Tipo en un paquete de política (<code
class="filename">.pp</code>). Para instalar el módulo, ejecute el
comando <code class="command">/usr/sbin/semodule -i <em
class="replaceable"><code>mycertwatch.pp</code></em></code>
como usuario root de Linux.
</div><div
class="important"><h2>Importante</h2><div
class="para">
Los módulos creados con <code
class="command">audit2allow</code> pueden permitir más acceso que el
requerido. Se recomienda que la política creada con <code
class="command">audit2allow</code> sea enviada a una lista de SELinux,
tal como <a
href="http://www.redhat.com/mailman/listinfo/fedora-selinux-list&quo...;,
para su revisión. Si cree que hay un error en la política, informe un error en <a
href="https://bugzilla.redhat.com/">Bugzilla de Red Hat</a>.
</div></div></li></ol></div><div
class="para">
Si tiene múltiples negaciones de múltiples procesos, pero solo quiere crear una
política personalizada para un proceso único, use el comando <code
class="command">grep</code> para una búsqueda más refinada de <code
class="command">audit2allow</code>. El siguiente ejemplo muestra el uso
de <code class="command">grep</code> para sólo enviar negaciones de
<code class="command">certwatch</code> a <code
class="command">audit2allow</code>:
</div><pre class="screen"># grep certwatch
/var/log/audit/audit.log | audit2allow -M mycertwatch2
******************** IMPORTANT ***********************
To make this policy package active, execute:
# /usr/sbin/semodule -i mycertwatch2.pp
</pre><div class="para">
Vaya a la entrada blog <a
href="http://danwalsh.livejournal.com/24750.html">"Uso de audit2allow
para construir módulos de políticas. Revisado."</a> de Dan Walsh para
información adicional sobre el uso de <code
class="command">audit2allow</code> para construir módulos de
políticas.
</div></div></div><div
class="footnotes"><br/><hr width="100"
align="left"/><div
class="footnote"><p><sup>[<a id="ftn.d0e5345"
href="#d0e5345" class="para">14</a>] </sup>
Los archivos en <code
class="filename">/etc/selinux/targeted/contexts/files/</code> definen
los contextos de archivos y directorios. Los archivos en este directorio son leídos por
<code class="command">restorecon</code> y <code
class="command">setfiles</code> para restaurar archivos y directorios a
sus contextos predeterminados.
</p></div><div class="footnote"><p><sup>[<a
id="ftn.d0e5507" href="#d0e5507"
class="para">15</a>] </sup>
El comando <code class="command">semanage port -a</code> agrega
una entrada al archivo <code
class="filename">/etc/selinux/targeted/modules/active/ports.local</code>.
Nota: por defecto, este archivo sólo puede ser visto por el usuario root de Linux.
</p></div><div class="footnote"><p><sup>[<a
id="ftn.d0e5956" href="#d0e5956"
class="para">16</a>] </sup>
De la página man de <span class="citerefentry"><span
class="refentrytitle">ausearch</span>(8)</span>, como se incluyó
en el paquete <span class="package">audit</span> en Fedora 11.
</p></div><div
class="footnote"><p><sup>[<a id="ftn.d0e6008"
href="#d0e6008" class="para">17</a>] </sup>
De la página de manual de <span class="citerefentry"><span
class="refentrytitle">ausearch</span>(8)</span>, como se incluyó
en el paquete <span class="package">audit</span> en Fedora 11.
</p></div><div class="footnote"><p><sup>[<a
id="ftn.d0e6068" href="#d0e6068"
class="para">18</a>] </sup>
de la página de manual de <span class="citerefentry"><span
class="refentrytitle">aureport</span>(8)</span> como se incluyó
en el paquete <span class="package">audit</span> en Fedora 11.
</p></div><div
class="footnote"><p><sup>[<a id="ftn.d0e6509"
href="#d0e6509" class="para">19</a>] </sup>
De la página man de <span class="citerefentry"><span
class="refentrytitle">audit2allow</span>(1)</span>, tal como fue
incluida en el paquete <span class="package">policycoreutils</span>
en Fedora 11.
</p></div></div></div><div class="chapter"
lang="es-ES"><div
class="titlepage"><div><div><h2 class="title"
id="chap-Security-Enhanced_Linux-Further_Information">Capítulo 8. Información
Adicional</h2></div></div></div><div
class="toc"><dl><dt><span class="section"><a
href="#sect-Security-Enhanced_Linux-Further_Information-Contributors">8.1.
Contributors</a></span></dt><dt><span
class="section"><a
href="#sect-Security-Enhanced_Linux-Further_Information-Other_Resources">8.2.
Other Resources</a></span></dt></dl></div><div
class="section" lang="es-ES"><div
class="titlepage"><div><div><h2 class="title"
id="sect-Security-Enhanced_Linux-Further_Information-Contributors">8.1.
Contributors</h2></div></div></div><div
class="itemizedlist"><ul><li><div class="para">
<a
href="http://fedoraproject.org/wiki/GeertWarrink">Geert
Warrink</a> (translation - Dutch)
</div></li><li><div class="para">
<a
href="http://fedoraproject.org/wiki/User:Beckerde">Domingo
Becker</a> (translation - Spanish)
</div></li><li><div class="para">
<a
href="http://fedoraproject.org/wiki/User:Logan">Daniel
Cabrera</a> (translation - Spanish)
</div></li></ul></div></div><div
class="section" lang="es-ES"><div
class="titlepage"><div><div><h2 class="title"
id="sect-Security-Enhanced_Linux-Further_Information-Other_Resources">8.2.
Other Resources</h2></div></div></div><div
class="formalpara"><h5 class="formalpara"
id="form-Security-Enhanced_Linux-Further_Information-The_National_Security_Agency_NSA">La
Agencia de Seguridad Nacional (NSA)</h5>
De la página <a
href="http://www.nsa.gov/research/selinux/contrib.shtml">Con... de
SELinux</a>:
</div><div class="para">
<span class="emphasis"><em>Los investigadores del laboratorio de
Investigación en Seguridad de la Información Nacional (NIARL) de la NSA diseñaron 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, llamado servidor de seguridad y caché vector de acceso. Los
investigadores de la NSA rediseñaron el SELinux basado en LSM para incluírlo en Linux 2.6.
NSA también lideró el desarrollo de controles similares para el Sistema de Ventanas X
(XACE/XSELinux) y para Xen (XSM/Flask).</em></span>
</div><div class="itemizedlist"><ul><li><div
class="para">
El sitio web de SELinux principal: <a
href="http://www.nsa.gov/research/selinux/index.shtml">http:...;.
</div></li><li><div class="para">
Documentación de SELinux: <a
href="http://www.nsa.gov/research/selinux/docs.shtml">http:/...;.
</div></li><li><div class="para">
Trasfondo de SELinux: <a
href="http://www.nsa.gov/research/selinux/background.shtml">...;.
</div></li></ul></div><div
class="formalpara"><h5 class="formalpara"
id="form-Security-Enhanced_Linux-Further_Information-Tresys_Technology">Tecnología
de Tresys</h5>
<a
href="http://www.tresys.com/">Tresys Technology</a> son los
desarrolladores de:
</div><div class="itemizedlist"><ul><li><div
class="para">
<a
href="http://userspace.selinuxproject.org/trac/">Herramientas y
bibliotecas en el espacio del usuario para SELinux</a>.
</div></li><li><div class="para">
<a
href="http://oss.tresys.com/projects/refpolicy">Política de
Referencia de SELinux</a>.
</div></li></ul></div><div
class="formalpara"><h5 class="formalpara"
id="form-Security-Enhanced_Linux-Further_Information-SELinux_News">Noticias
de SELinux</h5>
<div class="itemizedlist"><ul><li><div
class="para">
Noticias: <a
href="http://selinuxnews.org/wp/">http://selinuxnews.org/wp/...;.
</div></li><li><div class="para">
Planeta SELinux (blogs): <a
href="http://selinuxnews.org/planet/">http://selinuxnews.org...;.
</div></li></ul></div>
</div><div class="formalpara"><h5 class="formalpara"
id="form-Security-Enhanced_Linux-Further_Information-SELinux_Project_Wiki">Wiki
del Proyecto SELinux</h5>
<div class="itemizedlist"><ul><li><div
class="para">
Página principal: <a
href="http://selinuxproject.org/page/Main_Page">http://selin...;.
</div></li><li><div class="para">
Recursos del usuario, incluyendo en laces a documentación, listas de correo, sitios
web y herramientas: <a
href="http://selinuxproject.org/page/User_Resources">http://...;.
</div></li></ul></div>
</div><div class="formalpara"><h5 class="formalpara"
id="form-Security-Enhanced_Linux-Further_Information-Red_Hat_Enterprise_Linux">Linux
para Empresas de Red Hat</h5>
<div class="itemizedlist"><ul><li><div
class="para">
La <a
href="http://www.redhat.com/docs/en-US/Red_Hat_Enterprise_Linux/5.2/...
de Despliegue del Linux para Empresas de Red Hat</a> contiene una sección de <a
href="http://www.redhat.com/docs/en-US/Red_Hat_Enterprise_Linux/5.2/...
SELinux, que tiene enlaces a tutoriales de SELinux, información general y la tecnología
detrás de SELinux.
</div></li><li><div class="para">
La <a
href="http://www.redhat.com/docs/manuals/enterprise/RHEL-4-Manual/se...
de SELinux del Linux para Empresas de Red Hat 4</a>.
</div></li></ul></div>
</div><div class="formalpara"><h5 class="formalpara"
id="form-Security-Enhanced_Linux-Further_Information-Fedora">Fedora</h5>
<div class="itemizedlist"><ul><li><div
class="para">
Página principal: <a
href="http://fedoraproject.org/wiki/SELinux">http://fedorapr...;.
</div></li><li><div class="para">
Resolución de problemas: <a
href="http://fedoraproject.org/wiki/SELinux/Troubleshooting">...;.
</div></li><li><div class="para">
FAQ de SELinux para Fedora Core 5: <a
href="http://docs.fedoraproject.org/selinux-faq-fc5/">http:/...;.
</div></li></ul></div>
</div><div class="formalpara"><h5 class="formalpara"
id="form-Security-Enhanced_Linux-Further_Information-The_UnOfficial_SELinux_FAQ">Las
Preguntas Frecuentes No Oficiales de SELinux</h5>
<a
href="http://www.crypt.gen.nz/selinux/faq.html">http://www.crypt.gen.nz/selinux/faq.html</a>
</div><div class="formalpara"><h5 class="formalpara"
id="form-Security-Enhanced_Linux-Further_Information-IRC">IRC</h5>
En <a
href="http://freenode.net/">Freenode</a>:
</div><div class="itemizedlist"><ul><li><div
class="para">
#selinux
</div></li><li><div class="para">
#fedora-selinux
</div></li></ul></div></div></div><div
class="appendix" lang="es-ES"><div
class="titlepage"><div><div><h1
id="appe-Security-Enhanced_Linux-Revision_History"
class="title">Revision
History</h1></div></div></div><div class="para">
<div class="revhistory"><table border="0"
width="100%" summary="Revision history"><tr><th
align="left" valign="top" colspan="3"><b>Historial
de revisiones</b></th></tr><tr><td
align="left">Revisión 1.3</td><td align="left">Tue May
12 2009</td><td align="left"><span
class="author"><span class="firstname">Scott</span>
<span
class="surname">Radvan</span></span></td></tr><tr><td
align="left" colspan="3">
<table class="simplelist" border="0" summary="Simple
list"><tr><td>Revisión para Fedora
11</td></tr></table>
</td></tr><tr><td align="left">Revisión
1.2</td><td align="left">Mon Jan 19 2009</td><td
align="left"><span class="author"><span
class="firstname">Murray</span> <span
class="surname">McAllister</span></span></td></tr><tr><td
align="left" colspan="3">
<table class="simplelist" border="0" summary="Simple
list"><tr><td>Actualización de los enlaces a sitios web de la
NSA</td></tr></table>
</td></tr><tr><td align="left">Revisión
1.1</td><td align="left">Sat Dec 6 2008</td><td
align="left"><span class="author"><span
class="firstname">Murray</span> <span
class="surname">McAllister</span></span></td></tr><tr><td
align="left" colspan="3">
<table class="simplelist" border="0" summary="Simple
list"><tr><td>Resolución del <a
href="https://bugzilla.redhat.com/show_bug.cgi?id=472986">Bu... de Red Hat
#472986, "httpd no escribe en
/etc/httpd/logs/"</a></td></tr><tr><td>Se agregó la
sección nueva, "6.6. Booleanos para que los Usuarios Ejecuten
Aplicaciones"</td></tr><tr><td>Revisiones menores del
texto</td></tr></table>
</td></tr><tr><td align="left">Revisión
1.0</td><td align="left">Tue Nov 25 2008</td><td
align="left"><span class="author"><span
class="firstname">Murray</span> <span
class="surname">McAllister</span></span></td></tr><tr><td
align="left" colspan="3">
<table class="simplelist" border="0" summary="Simple
list"><tr><td>El contenido inicial se guarda en <a
href="http://docs.fedoraproject.org/">http://docs.fedoraproj...
</td></tr></table></div>
</div></div></div></body></html>