Digamos que he ido y he hecho algo tonto, como usar 'chsh' para cambiar el shell del usuario raíz a una ruta de archivo incorrecta. Los inicios de sesión futuros en la cuenta raíz fallarán abruptamente, citando / bin / lo que no se encuentre, y lo reiniciarán en la pantalla de inicio de sesión. Salvo un modo de recuperación o insertando un LiveCD para editar / etc / passwd, ¿cuáles son mis opciones para recuperar mi sistema? Supongamos también (¿por diversión?) Que no hay otros usuarios en la rueda. Pensamientos?
23

Respuestas:
Al arrancar, agregue
init=/bin/bash(o una ruta a cualquier otro shell funcional) a sus opciones de arranque; se lo colocará directamente en un solo shell de usuario. Es posible que deba hacerlomount -o remount,rw /antes de modificar la/etc/passwdentrada en ese entorno. Después de eso, solo reinicie o hagaexec /sbin/init 3. Simplemente no escribaexitni presione Ctrl + D, ya que esto provocaría un kernel panic *.Puede ser necesaria una variación adicional de este método en algunos sistemas cargados en modo de dos etapas (con una imagen initrd). Si observa que las opciones de arranque contienen
init=y, lo más importante,real_init=el lugar para colocar/bin/bashdebe ser el último parámetro (es decirreal_init=/bin/bash).* Esto se debe a que en ese entorno, el núcleo ve el shell como el programa init , que es el único proceso que el núcleo conoce, representa un sistema en ejecución debajo del ojo del núcleo. Terminar repentinamente ese proceso, sin decirle al kernel que apague el sistema, debe resultar en pánico del kernel. (¿No entrarías en pánico si de repente todo a tu alrededor se volviera negro y silencioso?)
fuente
exec, pero supongo que es mejor no estropear demasiado los puntos de montaje de antemano./etc/passwd)./) antes de ejecutar init./bin/bashse ejecuta exactamente en el punto, luego/sbin/initse ejecutará en el arranque normal. Por lo tanto, el sistema no puede realizar ninguna acción en ese momento.Puede usar
suy especificar un shell para ejecutar (no estoy seguro si está tratando de implicar que esto no es posible con su nota sobre que no hay otros usuarioswheel):De lo contrario, podría hacer algo similar si su demonio ssh permite iniciar sesión en la raíz:
También puede establecer un shell como su inicio en su gestor de arranque, por ejemplo,
init=/bin/ksho similar.fuente
Si su gestor de arranque está configurado para permitir la edición en vivo de los parámetros del kernel, una solución es reiniciar y usar un shell como proceso de inicio, por ejemplo
init=/bin/bash. Luego, monte lo que sea necesario montar a mano y edite/etc/passwd.syncy arranca de nuevo con tu habitualinit.fuente
Si la esencia de su pregunta es que ha bloqueado todas las formas de convertirse en root, entonces, por definición, no puede convertirse en root.
Es común permitir tres formas de convertirse en root en un sistema unix:
rooten un indicador de inicio de sesión y escribiendo la contraseña de root. Esto ejecuta el shell de root.suy escribiendo la contraseña de root. En algunos sistemas, esto requiere estar en un grupo particular (a menudo llamadowheel); en otros sistemas, cualquiera que conozca la contraseña de root puede convertirse en root. Los sistemas que usan PAM para autenticación se usanpam_wheelpara administrar el grupo de ruedas si tienen uno. Si especifica un comando consu -c, se ejecuta a través del shell de root.sudoy escribiendo su propia contraseña. La cuenta de usuario debe haber recibido poderes de sudo por parte de un administrador. A menos quesudoersesté restringido en el archivo, puede ejecutar cualquier comando, independientemente del shell de root.Una forma tradicional de proteger contra el shell de root no está disponible es definir otra cuenta con UID 0 y un shell diferente (
toores un nombre tradicional). Por ejemplo, si el shell de root es un ejecutable vinculado dinámicamente (una buena idea para conservar la memoria) y una actualización de la biblioteca falla, el shell de root podría quedar inutilizable. La cuenta raíz alternativa tendría un ejecutable vinculado estáticamente, posiblemente uno con utilidades comunes incorporadas como BusyBox .fuente
Las respuestas anteriores son geniales y aprendí al leerlas. Si no recuerda los detalles de estos enfoques y no le importa reiniciar, siempre puede iniciar su sistema usando una distribución de CD en vivo, montar la partición / y luego editar / etc / passwd y reiniciar. No es tan elegante como las soluciones anteriores, pero es más fácil de recordar.
fuente
/etc/passwdarchivo. Aparte de esto, buen punto: solo quería agregar la misma sugerencia a mi respuesta.