[ << ]
[ < ]
[ Inicio ]
[ > ]
[ >> ]
1. Instalación de Gentoo SELinux / Conversión
Contenido:
1.a. Instalar Gentoo (Hardened)
Introducción
Instalar el sistema Gentoo con SELinux no requiere acciones extrañas.
Lo que se necesita es instalar Gentoo Linux con el perfil correcto, la
configuración del núcleo correcta y etiquetar algunos sistemas de ficheros.
Recomendamos seriamente usar SELinux junto con otras mejoras que hagan más
robusto nuestro sistema (como PaX / grSecurity).
Este capítulo describe los pasos para instalar Gentoo con SELinux.
Asumimos que tiene un sistema Gentoo Linux ya funcionando que quiere
convertir a Gentoo con SELinux. Si no es éste el caso, puede igualmente
continuar leyendo: podrá instalar Gentoo con SELinux de forma directa si
toma las decisiones correctas, basadas en la información contenida en
este capítulo, durante el proceso de instalación.
Realizar una instalación estándar
Instale Gentoo Linux siguiendo las instrucciones del
manual de Gentoo. Recomendamos usar
los ficheros tarball hardened de stage3 y el núcleo
hardened-sources en lugar de los ficheros estándar, sin embargo,
las instalaciones con stages estándar se permiten también en SELinux.
Haga una instalación completa hasta el punto en el que debe reiniciar
su sistema para obtener una instalación base (primitiva) de Gentoo.
Nota:
Si utiliza XFS, asegúrese de que el tamaño de los nodos-i del sistema
de ficheros XFS es de 512 bytes. Debido a que el valor por defecto es
256, necesitará ejecutar la orden mkfs.xfs con los argumentos
-i size=512, de esta forma: mkfs.xfs -i size=512 /dev/sda3
|
Cambiar a Python 2
Hasta la fecha, no todas las utilidades de gestión de SELinux son
compatibles con Python 3 por lo que le recomendamos cambiar a
Python 2 hasta que los paquetes sean actualizados y corregidos.
Listado de Código 1.1: Cambiar a python 2 |
~# emerge '<=dev-lang/python-3.0'
~# eselect python list
Available Python interpreters:
[1] python2.7
[2] python3.1 *
~# eselect python set 1
~# source /etc/profile
|
Elegir un tipo de directriz SELinux
Gentoo ofrece soporte a cuatro tipos de directriz en SELinux:
strict, targeted, mcs y mls.
La diferencia entre strict y targeted es debida
al dominio no confinado. Cuando se carga la directriz,
los procesos en su sistema que no están confinados específicamente
en un módulo de directriz en particular formarán parte de los
dominios no confinados cuyo propósito es permitir por defecto
la mayoría de las actividades (en lugar de prohibirlas por
defecto). Como resultado, los procesos que corren dentro de
dominios no confinados no tienen restricciones aparte de
aquéllas ya forzadas por la seguridad estándar de Linux.
A pesar de que el hecho de trabajar sin dominios no confinados
está considerado más seguro, también será un más complicado para
el administrador tener la certeza de que el sistema funciona
correctamente ya que no hay módulos de directriz para cada una
de las aplicaciones "ahí fuera".
Aparte de targeted y strict, puede optar por
mcs para permitir la categorización de los dominios de
los procesos. Esto es útil en sistemas gestionados por
múltiples propietarios como servidores Web, equipos de
virtualización, etc. en los que muchos procesos están
corriendo, la mayoría de ellos en el mismo dominio de seguridad,
pero en diferentes categorías. Observe, sin embargo, que para
para poder utilizar el soporte de categorías adicionales, bien
las propias aplicaciones (como el servidor Web o las herramientas
de supervisión) necesitan configurar las categorías SELinux
(por lo que deben ofrecer soporte a SELinux), bien se
necesitará un guión para arrancar las instancias individuales
en categorías diferentes. De lo contrario, mcs es
simplemente lo mismo que targeted o strict.
Para terminar, puede también elegir mls para
diferenciar los dominios de seguridad a un nivel sensible.
Sin embargo, MLS aún está considerado experimental en Gentoo
y por lo tanto no lo recomendamos.
En el caso de mcs o mls, necesitará utilizar el
ajuste USE unconfined para habilitar o deshabilitar los
dominios no confinados en estos tipos de directriz. El tipo
strict (sin dominios no confinados) no ofrece este ajuste
USE, y el tipo targeted (dominios no confinados) requiere
que el ajuste USE esté habilitado.
Cuando haya elegido los tipos de directriz, guárdelos también en
su fichero /etc/make.conf. De esta forma, Portage
instalará únicamente los módulos SELinux para ese tipo de directriz.
Por defecto, los perfile SELinux habilitan strict y
targeted (siendo strict el tipo activo por
defecto).
Listado de Código 1.2: Ajustar el tipo de directriz en make.conf |
~# nano /etc/make.conf
POLICY_TYPES="strict"
|
Ajustar los contextos del sistema de ficheros
Si su directorio /tmp está en un sistema de ficheros
tmpfs montado, entonces necesitará indicarle al núcleo que el
contexto raíz de esta localización es tmp_t en lugar de
tmpfs_t. Muchos objetos en la directriz de SELinux (incluyendo
algunas directrices al nivel de servidor) asumen que /tmp
es tmp_t.
Para configurar el montaje de /tmp, edite su fichero
/etc/fstab:
Listado de Código 1.3: Actualizar /etc/fstab para /tmp |
tmpfs /tmp tmpfs defaults,noexec,nosuid,rootcontext=system_u:object_r:tmp_t 0 0
tmpfs /tmp tmpfs defaults,noexec,nosuid,rootcontext=system_u:object_r:tmp_t:s0 0 0
|
A continuación, ajuste la siguiente línea en su /etc/fstab para
configurar el contexto para la localización /run.
Listado de Código 1.4: Actualizar /etc/fstab para /run |
tmpfs /run tmpfs mode=0755,nosuid,nodev,rootcontext=system_u:object_r:var_run_t 0 0
tmpfs /run tmpfs mode=0755,nosuid,nodev,rootcontext=system_u:object_r:var_run_t:s0 0 0
|
Cambie el perfil de Gentoo
Ahora que tiene una instalación de Gentoo Linux funcionando, cambie el
perfil de Gentoo al perfil SELinux adecuado (por ejemplo,
hardened/linux/amd64/no-multilib/selinux). Observe que los
perfiles antiguos (como selinux/v2refpolicy/amd64/hardened)
todavía están soportados.
Listado de Código 1.5: Cambiar el perfil de Gentoo |
~# eselect profile list
Available profile symlink targets:
[1] default/linux/amd64/10.0
[2] default/linux/amd64/10.0/selinux
[3] default/linux/amd64/10.0/desktop
[4] default/linux/amd64/10.0/desktop/gnome
[5] default/linux/amd64/10.0/desktop/kde
[6] default/linux/amd64/10.0/developer
[7] default/linux/amd64/10.0/no-multilib
[8] default/linux/amd64/10.0/server
[9] hardened/linux/amd64
[10] hardened/linux/amd64/selinux
[11] hardened/linux/amd64/no-multilib *
[12] hardened/linux/amd64/no-multilib/selinux
~# eselect profile set 12
|
Nota:
A partir del momento en que cambie su perfil, Portage le advertirá después
de cada instalación que "No pudo ajustar las etiquetas de seguridad de
SELinux". Esto es lo esperado, ya que las herramientas y capacidades que
requiere Portage para ajustar las etiquetas de seguridad todavía no están
disponibles. Esta advertencia desaparecerá en el momento en que se complete
la instalación de SELinux.
|
No actualice su sistema aún. Necesitaremos instalar un par de paquetes
en las siguientes dos secciones en un orden en particular para el
que Portage no está preparado.
Actualice make.conf
A continuación, eche un vistazo a los siguientes ajustes USE y decida si
quiere habilitarlos o deshabilitarlos.
| Ajuste USE |
Valor por defecto |
Descripción |
| peer_perms |
Habilitado |
La capacidad peer_perms gestiona los controles de la directriz de
SELinux para los principales (peers) de red. Si está habilitada, los
mecanismos de control de acceso que utiliza SELinux para el etiquetado
basado en red, se consolidan. Se recomienda este ajuste ya que la
directriz también se actualiza para reflejar este hecho. Si no se
habilita, los mecanismos antiguos (NetLabel y Labeled IPsec) se usan
en cada lado.
|
| open_perms |
Habilitado |
La capacidad open_perms habilita el permiso "open" para las clases
de fichero y relacionadas con los ficheros. El soporte para la llamada
"open" se añadió poco después que otros por lo que el soporte al
principio fue opcional. Sin embargo, las directrices han madurado lo
suficiente para tener los permisos abiertos habilitados.
|
| ubac |
Habilitado |
Cuando está deshabilitado, la directriz SELinux se construye sin el
control de acceso basado en usuario.
|
| unconfined |
Deshabilitado |
Cuando está habilitado, la construcción de la directriz (excepto para
la directriz "strict") incluirán el módulo no confinado
(permitiendo así que existand dominios no confinados en el sistema).
|
Elija sus opciones y actualice la variable USE en
/etc/make.conf o en una localización apropiada
/etc/portage/package.use para el paquete
sec-policy/selinux-base.
Cambios manuales en el sistema
Aviso:
La mayoría, o todos los cambios que se comentan a continuación se
resolverán automáticamente en los paquetes en cuanto sea posible. Estos
cambios, sin embargo, tienen un impacto más allá de las instalaciones
de Gentoo Hardened. Por lo tanto, serán incorporados a un ritmo más
bajo que las actualizaciones específicas de SELinux. Actualmente, es
suficiente con realizar la corrección manual de estas situaciones
(además se trata de una operación que se realiza una única vez).
|
Los siguientes cambios pueden ser necesarios en su sistema
dependiendo de las configuraciones o herramientas implicadas.
-
Compruebe si tiene los ficheros *.old en /bin.
Si es así, puede eliminarlos o hacer una copia de los mismos de forma
que tengan su propio contexto de seguridad. Los ficheros
.old son enlaces duros que pueden interferir con el
etiquetado de ficheros. Por ejemplo, puede hacer
cp /bin/hostname /bin/hostname.old.
Instalar un núcleo SELinux
Aunque los núcleos Linux por defecto ofrecen soporte SELinux, recomendamos
el uso del paquete sys-kernel/hardened-sources.
Listado de Código 1.6: Instalar hardened-sources |
~# emerge hardened-sources
|
A continuación, reconfigure su núcleo con los ajustes apropiados de
seguridad. Esto incluye (pero no está limitado a):
-
Soporte de los atributos extendidos en los distintos sistemas de
ficheros
- Soporte de la auditoría de llamadas al sistema
- Soporte de SELinux
Debajo encontrará una lista rápida de los ajustes recomendados.
Listado de Código 1.7: Ajustes recomendados para la configuración del núcleo Linux |
[*] Prompt for development and/or incomplete code/drivers
[*] Auditing support
[*] Enable system-call auditing support
<*> Second extended fs support
[*] Ext2 extended attributes
[ ] Ext2 POSIX Access Control Lists
[*] Ext2 Security Labels
[ ] Ext2 execute in place support
<*> Ext3 journalling file system support
[ ] Default to 'data=ordered' in ext3
[*] Ext3 extended attributes
[ ] Ext3 POSIX Access Control Lists
[*] Ext3 Security Labels
<*> The Extended 4 (ext4) filesystem
[*] Ext4 extended attributes
[ ] Ext4 POSIX Access Control Lists
[*] Ext4 Security Labels
<*> JFS filesystem support
[ ] JFS POSIX Access Control Lists
[*] JFS Security Labels
[ ] JFS debugging
[ ] JFS statistics
<*> XFS filesystem support
[ ] XFS Quota support
[ ] XFS POSIX ACL support
[ ] XFS Realtime subvolume support (EXPERIMENTAL)
[ ] XFS Debugging Support
<*> Btrfs filesystem (EXPERIMENTAL)
[ ] Btrfs POSIX Access Control Lists
[*] Enable different security models
[*] Socket and Networking Security Hooks
[*] NSA SELinux Support
[ ] NSA SELinux boot parameter
[ ] NSA SELinux runtime disable
[*] NSA SELinux Development Support
[ ] NSA SELinux AVC Statistics
(1) NSA SELinux checkreqprot default value
[ ] NSA SELinux maximum supported policy format version
Default security module (SELinux) --->
|
Recomendamos igualmente el uso de PaX. Puede encontrar más información
sobre PaX en el contexto Gentoo Hardened en
Guía de inicio rápido
para usar PaX con Gentoo Hardened.
Construya e instale el nuevo núcleo Linux y sus módulos.
Actualice fstab
A continuación, edite /etc/fstab y añada la siguiente línea:
Listado de Código 1.8: Habilitar las opciones del sistema de ficheros específicas de selinux |
none /selinux selinuxfs defaults 0 0
|
También deberá crear el punto de montaje
Listado de Código 1.9: Crear el punto de montaje /selinux |
# mkdir /selinux
|
Reinicie
Una vez realizados los cambios mencionados arriba, reinicie su sistema.
Asegúrese de que ahora está corriendo un núcleo Linux con SELinux
habilitado (el sistema de ficheros /selinux deberá estar
montado). No se preocupe, todavía no está activado SELinux.
1.b. Configure SELinux
Introducción
Ahora necesitaremos configurar SELinux, para ello, deberemos instalar las
utilidades apropiadas, etiquetar nuestro sistema de ficheros y configurar
la directriz.
Instalar directrices y utilidades
En primer lugar, instale los paquetes sys-apps/checkpolicy y
sys-apps/policycoreutils. Aunque éstos serán instalados
obligatoriamente debido a las dependencias con los paquetes de
directriz SELinux, necesitaremos instalarlos en primer lugar, por ello
se utiliza la opción -1.
Listado de Código 2.1: Instalar la directriz y utlidades principales de SELinux |
~# emerge -1 checkpolicy policycoreutils
|
Ahora deberá instalar el paquete de directriz de SELinux
(sec-policy/selinux-base-policy). Este paquete contiene la
directriz base de SELinux. Ya que Portage intentará etiquetar y recargar
las directrices (debido a la instalación de
sys-apps/policycoreutils), necesitaremos desactivar
temporalmente el soporte de SELinux (ya que Portage no podrá etiquetar
nada si todavía no lo comprende).
Listado de Código 2.2: Instalar los paquetes de directriz de SELinux |
~# FEATURES="-selinux" emerge selinux-base-policy
|
A continuación, reconstruya aquellos paquetes afectados por el cambio
de perfil que hicimos previamente usando una actualización estándar de
"world" que tendrá en cuenta los cambios en los ajustes USE (ya que
el nuevo perfil cambiará muchos ajustes USE por defecto, incluyendo el
ajuste USE selinux). No olvide utilizar después
etc-update o dispatch-conf ya que se necesitarán
realizar algunos cambios a los ficheros de configuración.
Listado de Código 2.3: Actualice su sistema Gentoo Linux |
~# emerge -uDN world
|
Ahora, instale las herramientas adicionales de SELinux que necesitará en
el futuro para depurar o ayudarle con su instalación de SELinux. Estos
paquetes son opcionales, pero recomendamos su instalación.
Listado de Código 2.4: Instalar paquetes adicionales de SELinux |
~# emerge setools sepolgen checkpolicy
|
Para terminar, instale los módulos de directrices para aquellas utilidades
en las que crea que va a necesitarlas. En un futuro no muy lejano, esta
acción se realizará de forma automática (los paquetes tendrán una
dependencia opcional producida por el ajustes USE selinux), pero hasta
ese momento, necesitará hacer este trabajo manualmente.
Listado de Código 2.5: Instalar los módulos de SELinux |
~# emerge --search selinux-
[...]
~# emerge selinux-screen selinux-gnupg selinux-sudo selinux-ntp selinux-networkmanager ...
|
Configure la directriz de SELinux
Dentro de /etc/selinux/config puede definir cómo se va a
configurar SELinux en el momento en que se inicie el sistema.
Listado de Código 2.6: Editar el fichero /etc/selinux/config |
# This file controls the state of SELinux on the system on boot.
# 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 four values:
# targeted - Only targeted network daemons are protected.
# strict - Full SELinux protection.
# mls - Full SELinux protection with Multi-Level Security
# mcs - Full SELinux protection with Multi-Category Security
# (mls, but only one sensitivity level)
SELINUXTYPE=strict
|
En este fichero de configuración se pueden definir dos variables:
-
SELINUX indica cómo se debe comportar SELinux:
-
enforcing (forzado) habilitará el cumplimiento de las
directrices. Esto es precisamente lo que queremos, sin embargo,
probablemente quiera comenzar con el modo permisivo
(permissive).
-
permissive (permisivo) habilitará las directrices pero no
obligará a su cumplimiento. Se le notificará cualquier violación
de las directrices pero no se denegará. Es recomendable comenzar
trabajando con este modo de forma que no tenga impacto en su
sistema hasta que no esté más familiarizado con SELinux. Deberá
validar las advertencias recibidas para ver si puede cambiar al
modo forzado (enforcing) o no.
-
disabled (deshabilitado) desactivará completamente las
directrices. Debido a que en esta situación no se muestran las
violaciones de las directrices, no es la situación recomendada.
-
SELINUXTYPE define el tipo de directriz SELinux que se debe
cargar. La mayor parte del desarrollo se realiza usando el tipo
strict (ya que ofrece confinamiento completo), aunque
también se ofrece soporte para los otros.
Reinicie y etiquete el sistema de ficheros
Importante:
Repita estos pasos cada vez que haya reiniciado desde un núcleo que no
tenga SELinux habilitado a un núcleo que sí lo tenga, ya que ejecutar
un núcleo con SELinux deshabilitado no actualizará los atributos de los
ficheros que se creen o manipulen en las actividades diarias en su
sistema.
|
En primer lugar, reinicie su sistema de modo que se carguen las
directrices instaladas. Ahora, necesitaremos reetiquetar sus
dispositivos y sus ficheros relacionados con openrc. Esto aplicará los
contextos de seguridad adecuados (etiquetas) en los ficheros necesarios.
Listado de Código 2.7: Reetiquetar la estrucura /dev |
~# mkdir /mnt/gentoo
~# mount -o bind / /mnt/gentoo
~# setfiles -r /mnt/gentoo /etc/selinux/strict/contexts/files/file_contexts /mnt/gentoo/dev
~# setfiles -r /mnt/gentoo /etc/selinux/strict/contexts/files/file_contexts /mnt/gentoo/lib64
~# umount /mnt/gentoo
|
A continuación, si tiene un fichero de intercambio en lugar de una partición,
etiquételo de la forma adecuada:
Listado de Código 2.8: Etiquetar el fichero de intercambio |
~# semanage fcontext -a -t swapfile_t "/swapfile"
~# restorecon /swapfile
|
Ahora reetiquete completamente su sistema de ficheros. La orden de abajo
aplicará el contexto de seguridad adecuado a los ficheros de su sistema
de ficheros basándose en la información de contexto de seguridad que
ofrecen los módulos de directrices de SELinux instalados.
Listado de Código 2.9: Reetiquetar completamente el sistema de ficheros |
~# rlpkg -a -r
|
Si alguna vez tiene que instalar una directriz de SELinux para un paquete
después de haberlo instalado, necesitará ejecutar rlpkg para ese
paquete de forma que tenga la certeza de que los contextos de seguridad
para los ficheros del paquete se ajustan adecuadamente. Por ejemplo,
si ha instalado sec-policy/selinux-screen después de
darse cuenta de que tiene instalado screen en su sistema:
Listado de Código 2.10: Etiquetar de nuevo los ficheros de un único paquete |
~# rlpkg -t screen
|
Habilitar el servicio selinux_gentoo
Gentoo ofrece un guión llamado selinux_gentoo
que restaura los contextos de los ficheros y dispositivos
creados dinámicamente así como los pseudo sistemas de
ficheros (/dev (opcionalmente) y /sys)
ya que estos sistemas de ficheros nos pueden persistir en
los cambios de contexto que suceden entre reinicios.
El guión de inicio también ofrece soporte para iniciar en
modo permisivo en primer lugar (por ejemplo si tiene un
initramfs creado que no funciona en modo forzado) y cambiar
a modo forzado a continuación.
Habilite este guión utilizando
rc-update add selinux_gentoo boot y actualice la
configuración de su gestor de arranque con las siguientes
opciones de inicio:
-
nosetenforce si inicia con enforcing=0
y no quiere que el guión de inicio vuelva a cambiar
a modo forzado (si fue configurado en
/etc/selinux/config). Si su fichero
/etc/selinux/config está configurado para
iniciar en modo permisivo, este guión de inicio no
alterará este comportamiento.
-
norestorecon si no quiere restaurar los contextos
de /dev.
Listado de Código 2.11: Configuración GRUB ejemplo |
title Gentoo Hardened/SELinux
root (hd0,0)
kernel /boot/kernel root=/dev/vg/root ... enforcing=0 ...
title Gentoo Hardened/SELinux
root (hd0,0)
kernel /boot/kernel root=/dev/vg/root ... enforcing=0 nosetenforce ...
|
Reinicie y ajuste los booleanos de SELinux
Reinicie su sistema. Así, se utilizarán los nuevos contextos de fichero
que se aplicaron. Ingrese en el sistema, y, si ha instalado Gentoo usando
los fuentes hardened (como hemos recomendado), habilite el booleano SSP de
SELinux, permitiendo a cada dominio acceso de lectura al dispositivo
/dev/urandom:
Listado de Código 2.12: Habilitar el booleano global_ssp |
~# setsebool -P global_ssp on
|
Defina las cuentas de administrador
Si SELINUXTYPE está definido a strict, entonces
necesitamos mapear la(s) cuenta(s) que utiliza para gestionar su sistema
(aquéllas que necesitan acceso a Portage) al usuario de SELinux
staff_u. Si no, no podrá gestionar correctamente el sistema
con ninguna de las cuentas (aparte de root, pero entonces
necesitará entrar en el sistema como root directamente y no
a través de sudo o su). Por defecto, los usuarios se mapean
al usuario SELinux user_u, el cual no tiene los privilegios
adecuados (tampoco los roles apropiados de acceso) para gestionar un
sistema. Las cuentas que son mapeadas a staff_u pueden hacerlo,
pero podrían necesitar cambiar del rol staff_r al rol
sysadm_r antes de que se les concedan los privilegios apropiados.
Asumiendo que su nombre de cuenta es juan:
Listado de Código 2.13: Mapear la cuenta Linux juan al usuario SELinux staff_u |
~# semanage login -a -s staff_u juan
~# restorecon -R -F /home/juan
|
Si más tarde ingresa en el sistema como juan y quiere gestionar
su sistema, probablemente necesitará cambiar su rol. Puede usar
newrole para hacer esto:
Listado de Código 2.14: Cambiar de rol |
~$ id -Z
staff_u:staff_r:staff_t
~$ newrole -r sysadm_r
Password:
~$ id -Z
staff_u:sysadm_r:sysadm_t
|
Si, por el contrario, utiliza una directriz targeted, entonces
el usuario con el que trabaja será de tipo unconfined_t y ya
dispondrá de los privilegios necesarios para realizar tareas
administrativas del sistema.
Cuando haya terminado, disfrute de su trabajo. Acaba de dar sus primeros
pasos por el mundo SELinux.
Soporte del servicio de administración
Por defecto, las directrices de SELinux en Gentoo Hardened permiten
al dominio sysadm_t el acceso a todos los servicios. Sin embargo,
algunos de estos servicios tienen directrices que les permiten
se asignados a usuarios individuales diferentes de root. Esto
requiere que se conceda al usuario el rol system_r (lo
que implica que el usuario puede, en ciertos casos, obtener este
cambio de rol hacia el rol de sistema).
Por tanto, se recomienda conceder el rol system_r al usuario
SELinux administrador que va a utilizar en mayor medida. Estos son,
en la mayoría de los casos, los usuarios root y staff_u.
Listado de Código 2.15: Conceder el rol system_r al usuario staff y root |
# semanage user -a -R "staff_r sysadm_r system_r" root
# semanage user -a -R "staff_r sysadm_r system_r" staff_u
|
[ << ]
[ < ]
[ Inicio ]
[ > ]
[ >> ]
El contenido de este documento, a no ser que se especifique
expresamente, está registrado bajo los términos de la licencia
CC-BY-SA-2.5. Se aplican las
Pautas de
Utilización del logotipo y nombre de Gentoo.
|