La cáscara de raíz cambió por error. ¿Cómo puedo volver a cambiarlo a un shell válido?

19

Entré por error

chsh -s /usr/bin 

en lugar de

chsh -s /bin/bash 

y ahora no puedo iniciar sesión en un shell raíz, ¿cómo inicio un bash shell como root manualmente?

Cincelado
fuente
¿En qué contexto hiciste esto? En una terminal actual, para los usuarios de shell predeterminado?
jgr208
¿no tienes usuarios en el grupo sudo?
Rui F Ribeiro
3
hace sudo vipwel trabajo?
Rui F Ribeiro
1
@RuiFRibeiro sí, gracias, no sabía que podía cambiar el shell raíz predeterminado en ese archivo
ChiseledAbs
1
No es necesario en este caso, pero cuando accidentalmente ha creado una catástrofe relacionada con la raíz, generalmente puede llevar la máquina al modo de usuario único, solucionar el problema y luego volver al modo multiusuario.
Boardrider

Respuestas:

29

Si bien la raíz no tiene acceso, un usuario en el grupo sudo aún puede ejecutar comandos privilegiados; parece que el error no está en sudo, sino en otra parte del sudo chshcomando (por ejemplo, error chsh).

Como tal, su sudo aparentemente está funcionando.

El archivo passwd se puede editar con:

sudo vipw

Y el shell raíz cambió manualmente.

(primera línea de /etc/passwdusualmente)

root:x:0:0:root:/root:/bin/bash

De hombre vipw

Los comandos vipw y vigr editan los archivos / etc / passwd y / etc / group, respectivamente. Con el indicador -s, editarán las versiones ocultas de esos archivos, / etc / shadow y / etc / gshadow, respectivamente. Los programas establecerán los bloqueos apropiados para evitar la corrupción de archivos.

Rui F Ribeiro
fuente
3
Nunca lo supe vipwy vigr, gracias! Yo siempre usabasudo vim /etc/passwd
gato
3
También te puede interesar visudo sudo.ws/man/1.8.15/visudo.man.html , @tac
Rui F Ribeiro
3
O sudo -e, que realiza esta función de edición de bloqueo para cualquier edición.
kojiro
16

Otra opción, suponiendo que tenga acceso a otra cuenta, es anular manualmente el shell predeterminado utilizando su --shell=/bin/bash:

-s, --shell = SHELL
ejecuta SHELL si / etc / shells lo permite

La principal ventaja de esto es que solo requiere acceso a otra cuenta, no a otra privilegiada .

Xiong Chiamiov
fuente
8

Por razones de seguridad, los inicios de sesión, ya sean textuales o gráficos, y utilidades similares, suy sudoque le permiten ejecutar comandos como un usuario diferente, todos ejecutan esos comandos a través del shell del usuario objetivo. Si el shell del usuario objetivo no funciona, bueno, has visto los resultados :-(

A menos que tenga un shell raíz aún funcional que se ejecute en algún lugar o algo así como un binario setuid-root o algo que le permita evitar esto, reiniciar y corregir el problema usando un sistema de rescate o una imagen en vivo es probablemente su mejor opción.

Inicie el sistema de rescate, monte el sistema de archivos raíz de su sistema real en algún lugar, digamos /mnt/foo, y edite /mnt/foo/etc/passwdpara arreglar el shell. Ahorre, desmonte y ya está.

Celada
fuente
curioso, ¿qué sucede si haces esto y el archivo / etc / passwd está en un hash en lugar de texto plano?
jgr208
1
/etc/passwdno es texto sin formato? No he visto eso en al menos una década. ¿Sigue siendo algo en algunos sistemas? De todos modos, supongo que chroot /mnt/foo chsh -s /bin/bashpodría hacer el truco en ese caso.
Celada
Nunca he descrito el problema, sin embargo, trabajo con sistemas bloqueados que necesitan tener / etc / passwd no en texto plano para evitar piratas informáticos y comprometer aún más el sistema si obtienen acceso. Hmm, eso podría funcionar, digamos que espero nunca tener que intentar ver si realmente funciona.
jgr208
Pude editar / etc / passwd con sudo desde una cuenta de usuario, no sabía que el shell estaba definido en este archivo, gracias
ChiseledAbs
@ChiseledAbs oh, ¿eras? Bien por ti, contento de haber resuelto tu problema. No pensé que te dejaría.
Celada
6

Agregue init=/bin/basha su línea de comando del núcleo (si arranca con grub, presione epara editar la entrada de arranque), y tendrá un shell bash ejecutándose como root sin siquiera tener que proporcionar una contraseña. Sin embargo, es probable que su sistema de archivos raíz siga siendo de solo lectura, por lo que primero deberá volver a montarlo y luego podrá volver a cambiar el shell chsh.

psusi
fuente
4

sudo usermod -s /bin/bash jdoe

cambiará la capa de jdoe a bash. Entonces puedes sudo egrep jdoe /etc/passwdverificar.

usuario208145
fuente