[ << ]
[ < ]
[ Inicio ]
[ > ]
[ >> ]
6. Solucionando problemas con SELinux
Contenido:
6.a. No se puede cargar la directriz de SELinux
Descripción del problema
Si observa que SELinux no está funcionando, puede ejecutar
sestatus para ser informado rápidamente si SELinux está
habilitado y cargado o no. Si obtiene la siguiente salida, entonces
ninguna directriz de SELinux se ha cargado:
Listado de Código 1.1: Salida de sestatus |
SELinux status: disabled
|
Si éste es el caso, continúe leyendo esta sección para averiguar cómo
corregir esta situación.
No hay ninguna directriz instalada
Una raíz potencial de este problema es que no hay ninguna directriz con
la que comenzar. Eche un vistazo a /usr/share/selinux/strict
o a /usr/share/selinux/targeted (dependiendo de su
configuración) y busque un fichero llamado base.pp. Si no
existe este fichero, necesitará instalar la directriz base. Esta
directriz se ofrece con el paquete
sec-policy/selinux-base-policy, pero es mejor leer el
capítulo relacionado con la Instalación de
Gentoo SELinux / Conversión ya que podría pasar por alto detalles
importantes.
La directriz no se ha cargado
Si existe el fichero base.pp en
/usr/share/selinux/strict (o en targeted/),
eche un vistazo a /etc/selinux/strict/policy. Esta
localización también debería contener un módulo de directriz
base.pp (cuando se carga una directriz de SELinux, se
copia desde la primera localización a la segunda).
Si no existe el fichero base.pp, instale la directriz y
cárguela:
Listado de Código 1.2: Instalar la directriz base |
~# semodule -n -B
|
Esto es una operación que se realiza solo en una ocasión. Una vez
instalada y cargada, ésta será recargada en cada reinicio.
Init no puede cargar la directriz SELinux
Durante el inicio del sistema, el proceso init es el responsable
de cargar e interactuar con la directriz SELinux en memoria. Si
init no soporta SELinux, su entorno no dispondrá de soporte
para SELinux.
Para verificar si init soporta SELinux, necesitamos comprobar si
utiliza el objeto compartido libselinux.so:
Listado de Código 1.3: Comprobar si init soporta SELinux |
~# ldd /sbin/init
linux-vdso.so.1 => (0x00006ace30e84000)
libselinux.so.1 => /lib/libselinux.so.1 (0x00006ace30a46000)
libc.so.6 => /lib/libc.so.6 (0x00006ace306e9000)
libdl.so.2 => /lib/libdl.so.2 (0x00006ace304e5000)
/lib64/ld-linux-x86-64.so.2 (0x00006ace30c68000)
|
Si éste no es el caso, asegúrese de que emerge --info muestra que
el ajuste USE selinux está en su sitio y reinstale
sys-apps/sysvinit. Si este ajuste no está definido,
compruebe su perfil Gentoo y asegúrese de que apunta a un perfil
selinux/v2refpolicy/....
El almacén de directices está corrupto
Si aparecen problemas en el inicio del sistema o en operaciones
semodule que fallan con problemas en la carga pero no se
puede resolver con la solucón de arriba, entonces necesitará reinstalar
las directrices una vez eliminado el almacén corrupto.
Listado de Código 1.4: Recuperarse de un almacén corrupto |
~# semodule -n -B
libsemanage.semanage_load_module: Error while reading from module file
/etc/selinux/targeted/modules/tmp/base.pp. (No such file or directory)
~# setenforce 0
~# mv /etc/selinux/targeted /etc/selinux/targeted.old
~# FEATURES="-selinux" emerge -1av $(qlist -IC sec-policy)
~# restorecon -R /etc/selinux
|
Esto desactivará efectivamente el almacén corrupto actual de la directriz
de SELinux y utilizará Portage para reinstalar todos los paquetes de
directriz que se han instalado en el sistema. Cuando haya terminado, los
contextos de fichero de /etc/selinux serán restaurados,
después de lo cual podrá continuar.
6.b. No se puede ingresar en el sistema
Descripción del problema
Si no puede ingresar en el sistema en una situación en particular
(en remoto, en local, como root, como usuario regular,...) puede que
se esté encontrando con algún problema sin mucha importancia. Sin
embargo, para resolverlo tendrá que ingresar en el sistema como
sysadm_r de un modo u otro.
Si no puede ingresar como un usuario sysadm_r, deshabilite
SELinux (arranque con enforcing=0) de este modo no se realiza
ningún forzado SELinux. Los cambios que haga en modo permisivo son
igual de efectivos que en el modo forzado (enforcing).
Contexto incorrecto
En la mayoría de los casos encontrará que el problema es un contexto de
seguridad incorrecto. Ejecute sestatus -v y compare los
contextos de proceso o los contextos de fichero que
observe con los dados en la siguiente tabla.
| Proceso |
Contexto |
Si el contexto no es el adecuado... |
| Contexto init |
system_u:system_r:init_t |
En primer lugar, verifique que el propio init está correctamente
etiquetado. Compruebe la salida de la ejecución anterior de
la orden sestatus -v para el fichero
/sbin/init y asegúrese de que está ajustado a
system_u:object_r:init_exec_t. Si este no es el caso, etiquete de
nuevo sys-apps/sysvinit usando rlpkg sysvinit.
Haga las mismas comprobaciones que se realizan en la sección
No se puede cargar la directriz de SELinux
. Reinicie su sistema e inténtelo de nuevo.
|
| Contexto agetty |
system_u:system_r:getty_t |
Asegúrese de que el binario /sbin/agetty esta etiquetado
como system_u:object_r:getty_exec_t. Si no es así, etiquete de nuevo
el paquete sys-apps/util-linux usando
rlpkg util-linux. A continuación reinicie todos los procesos
agetty usando pkill agetty (estos procesos se pondrán en
marcha de nuevo automáticamente).
|
| Fichero |
Contexto |
Si el contexto no es el adecuado... |
| /bin/login |
system_u:object_r:login_exec_t |
El binario login forma parte de sys-apps/shadow.
Ejecute rlpkg shadow para etiquetar de nuevo los ficheros de
este paquete y reintente el ingreso en el sistema.
|
| /sbin/unix_chkpwd |
system_u:object_r:chkpwd_exec_t |
Este binario es parte del paquete sys-libs/pam y SSH lo
utiliza cuando se configura para que use PAM a la hora de realizar
la autenticación de usuarios. Etiquete de nuevo el paquete usando
rlpkg pam e intente de nuevo el ingreso en el sistema.
|
| /etc/passwd |
system_u:object_r:etc_t |
Tanto /etc/passwd como /etc/shadow deben
estar etiquetados correctamente, de lo contrario PAM no podrá
autenticar a ningún usuario. Etiquete de nuevo los ficheros con
restorecon /etc/passwd /etc/shadow e intente de nuevo el
ingreso en el sistema.
|
| /etc/shadow |
system_u:object_r:shadow_t |
| /bin/bash |
system_u:object_r:shell_exec_t |
El intérprete de comandos del usuario (en este caso, bash)
se debe etiquetar correctamente de modo que el usuario pueda cambiar
al dominio de usuario cuando ingrese en el sistema. Para hacer esto,
etiquete de nuevo el paquete app-shells/bash usando
rlpkg bash. Entonces puede intentar de nuevo el ingreso en el
sistema.
|
6.c. No se puede hacer emerge de ningún paquete (OSError: [Errno 22] Invalid argument)
Descripción del problema
Cuando se intenta instalar software con Portage, se obtiene un volcado
enorme de la pila de python y finalmente el mensaje de error
OSError: [Errno 22] Invalid argument:
Listado de Código 3.1: Volcado de la traza de la pila cuando falla portage al instalar software |
Traceback (most recent call last):
File "/usr/bin/emerge", line 43, in <module>
retval = emerge_main()
File "/usr/lib64/portage/pym/_emerge/main.py", line 1906, in emerge_main
myopts, myaction, myfiles, spinner)
File "/usr/lib64/portage/pym/_emerge/actions.py", line 437, in action_build
retval = mergetask.merge()
...
File "/usr/lib64/portage/pym/portage/package/ebuild/doebuild.py", line 104, in _doebuild_spawn
return spawn(cmd, settings, **kwargs)
File "/usr/lib64/portage/pym/portage/package/ebuild/doebuild.py", line 1255, in spawn
return spawn_func(mystring, env=mysettings.environ(), **keywords)
File "/usr/lib64/portage/pym/portage/_selinux.py", line 105, in wrapper_func
setexec(con)
File "/usr/lib64/portage/pym/portage/_selinux.py", line 79, in setexec
if selinux.setexeccon(ctx) < 0:
OSError: [Errno 22] Invalid argument
|
Contexto erróneo
El error de arriba se produce cuando se lanza portage (mediante
emerge) y no nos encontramos en el contexto sysadm_t.
Puede verificar esto con id -Z:
Listado de Código 3.2: Comprobando el contexto actual |
~# id -Z
system_u:system_r:local_login_t
|
Portage fallarán mientras el contexto utilizado no sea sysadm_t.
Esto es debido a que Portage quiere cambiar su contexto de ejecución de
portage_t a portage_sandbox_t, sin embargo no puede
conseguirlo (para empezar, no está en portage_t debido a que
el usuario que lanzó Portage no está en sysadm_t).
Por favor, compruebe la sección No se puede
ingresar en el sistema de arriba en primer lugar. También,
asegúrese de que puede hacer dispatch-conf o etc-update
después de instalar SELinux de modo que se actualice
/etc/pam.d/system-login con las llamadas correctas a
pam_selinux.so.
Forzar la instalacilón
Si necesita forzar a Portage para que continúe a pesar de todo
(por ejemplo, se encontraba en medio de una instalación de SELinux por
lo que no puede resolver esas cuestiones ahora), ejecute la orden
emerge pero con FEATURES="-selinux". Esto deshabilitará
efectivamente la integración de SELinux en Portage y permitirá continuar
con la instalación del software.
Listado de Código 3.3: Correr emerge sin soporte selinux |
~# FEATURES="-selinux" emerge -u world
|
¡Asegúrese de que etiqueta de nuevo todo el sistema de ficheros después
de aplicar este enfoque!. Portage no etiquetará correctamente los ficheros
instalados en el sistema si deshabilita el soporte SELinux. Para etiquetar
de nuevo todo el sistema de ficheros, utilice rlpkg -a -r.
[ << ]
[ < ]
[ 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.
|