Descargo de responsabilidad: Esta pregunta no es para resolver el problema de cambiar la contraseña de root mientras SELinux está activo porque ya hay muchas guías para resolverlo. Esto es más de cómo SELinux lo hace internamente.
Soy un usuario reciente de SELinux, pero últimamente he estado más en contacto con él. Hubo un momento en que alguien me preguntó cómo podría restablecer la contraseña de root en caso de olvidarla.
Así que inicié mi CentOS, edité la entrada de grub a algo como
linux16 <kernel_location> root=/dev/mapper/centos-root rw init=/bin/bash
Corrí passwd
y luego corrí sync
y forcé el reinicio. Después de reiniciar, se rechazó el inicio de sesión con la nueva contraseña, así como con la antigua, por supuesto.
Reinició nuevamente y le pasó al kernel el parámetro para deshabilitar SELinux ( selinux=0
). Intenté iniciar sesión con la nueva contraseña y funcionó. Luego forcé una etiqueta automática fs (a través del archivo .autorelabel
) y con SELinux activo ahora era posible iniciar sesión.
Mi pregunta es: ¿por qué sucede? ¿Por qué el reetiquetado afecta el inicio de sesión cuando solo hubo un cambio de contraseña y no de usuarios u objetos?
Gracias por su atención.
TL; DR: el restablecimiento de contraseña de root habitual no funciona en SELinux. ¿Por qué?
Editar: Esto se probó en una máquina virtual que ejecuta CentOS7 con KVM como hipervisor.
Respuestas:
Pude duplicar este problema en un sistema CentOS 7.5 recién instalado.
Esto es lo que está pasando:
Cuando arrancas
init=/bin/bash
hay dos problemas con los que te puedes encontrar:El sistema de archivos raíz puede montarse de solo lectura. En este caso
passwd
se quejará de unAuthentication token manipulation error
.Esto es bastante obvio: si el sistema de archivos no está montado lectura-escritura, no es posible escribir en él.
La política de SELinux no se puede cargar. En este caso
passwd
cambiará con éxito la contraseña, pero tendrá el problema descrito en la pregunta original anterior: nadie podrá iniciar sesión.Los hashes de contraseña se almacenan en el
/etc/shadow
archivo. Este archivo normalmente tiene el tipo SELinuxshadow_t
. Sin embargo, cambiar el archivo mientras no se carga ninguna política SELinux hace que el tipo SELinux se elimine del archivo, dejándolo comounlabeled_t
. Por lo tanto, los servicios que intentan leer el archivo para autenticar los inicios de sesión ya no pueden leerlo.Para cambiar la contraseña de root en RHEL / CentOS 7, debe seguir este proceso:
init=/bin/bash
al final de la línea de comando del núcleo en grub, como lo hizo anteriormente./usr/sbin/load_policy -i
.mount -o remount,rw /
.passwd root
mount -o remount,ro /
.exec /sbin/init 6
.Ahora puede iniciar sesión con la contraseña de root modificada.
Red Hat ofrece una explicación más detallada de este procedimiento (se requiere suscripción).
fuente
init=/bin/bash
.passwd
"parece tener éxito"?passwd
saber/etc/passwd
y/etc/shadow
. Si se ejecutapasswd
sin una política cargada, no se ejecuta en el contexto de selinux adecuado y los archivos alterados terminan con un contexto de selinux diferente. Al arrancar con selinux habilitado y las políticas activas, la verificación de contraseña falla debido a un contexto de archivo inapropiado y no debido a unwrong password
error. Forzar a selinux a relacionar los contextos de archivo al tocar/.autorelabel
también puede solucionar ese problema al cambiar las contraseñas sin una política cargada.