Resetear contraseña olvidada de tu Raspberry Pi

La semana pasada me encontré con el problema de tener que acceder vía SSH a una Raspberry Pi (rpi), para poder gobernar una serie de maquinas accesibles desde la red local a la que se conectaba dicha rpi, y no poder hacerlo porque no recordaba la contraseña...

Al ver que no recordaba la contraseña me puse a buscar la mejor solución para poder volver a tener acceso a la rpi. Alguno puede pensar que con volver a poner el sistema operativo Raspbian, queda todo solucionado, y tiene razón. El problema, es que toda la configuración y software específico se borra, teniendo que volver a cargar el sistema operativo, instalar el software y generar de nuevo las configuraciones... vamos un peñazo XD .

Alguno se le ocurriría montar un script en el que ir probando las posibles combinaciones por fuerza bruta. En mi caso no era una opción, ni suele serlo en general. Con que cumplas los criterios básicos de una contraseña decente la combinatoria se dispara... Los tiempos en los que las claves eran de hasta 6 caracteres normalmente sólo letras y/o números han quedado atrás.

Con todo ello en mente le di alguna vuelta más al asunto...

Me puse a pensar cuál es nivel de seguridad que me podría permitir resetear la clave, y pronto caí que en el físico. Tenía acceso físico al hardware de la rpi, con lo que cogí la tarjeta SD y la introduje en mi ordenador. En su interior enseguida encontré un archivo, que mirando un poco en Internet, entendí que me podía dar la clave para poder acceder al sistema antes de que completamente se cargase y me obligase a idetificarme con las credenciales de acceeso, de la cual había perdido la contraseña.

El fichero en cuestión es el "cmdline.txt" y contiene parámetros específicos para la carga del kernel de Raspbian:

dwc_otg.lpm_enable=0 console=ttyAMA0,115200 kgdboc=ttyAMA0,115200 console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline rootwait

Según la documentación es posible cargar la ejecución de cualquier binario con el parámetro "init", y en este caso nos interesa cargar la shell. Para ello añadimos "init=/bin/sh" al final de la línea precedido por un espacio:

dwc_otg.lpm_enable=0 console=ttyAMA0,115200 kgdboc=ttyAMA0,115200 console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline rootwait init=/bin/sh

Hecha esta modificación en el fichero lo guardamos, volvemos a introducir la SD en la rpi y la arrancamos. Esta vez durante el arranque, se parará en cierto momento la carga del sistema y nos aparecerá un prompt en el que podremos escribir comandos.

Antes de escribir cualquier comando debemos remontar el volumen para que efectivamente guarde los cambios. Para ello vamos a volver a montar el sistema de ficheros como lectura y escritura con el siguiente comando.

mount -rw -o remount /

Una vez hecho, vamos a invocar al comando que nos permite resetear la contraseña de nuestro usuario (normalmente pi si no los has cambiado):

passwd pi

Te pedirá que introduzcas la contraseña y otra vez más para confirmarla. Si todo ha ido bien verás un mensaje de este tipo:

passwd: password updated successfully

Ahora sincronizaremos los cambios que hemos hecho que están en memoria, para que queden persistentes en la memoria de la SD. Después reanudaremos el boot del sistema:

sync
exec /sbin/init

Una vez se haya cargado el sistema comprueba que puedes acceder con la clave que intruduciste y apaga la rpi con:

sudo poweroff

Una vez apagada la rpi volvemos a cargar la SD en el ordenador y editamos de nuevo el fichero "cmdline.txt" y lo volvemos a dejar como al inicio sin el parámetro "init":

dwc_otg.lpm_enable=0 console=ttyAMA0,115200 kgdboc=ttyAMA0,115200 console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline rootwait

Ahora ya podemos volver a poner la tarjeta SD en la Raspberry Pi y podremos volver a tener el sistema Raspbian como si nunca hubiéramos perdido la contraseña.

Recordad que esto ha sido posible gracias a tener acceso físico al hardware que ejecuta el software. El nivel físico siempre es el nivel más débil a nivel técnico y de infraestructura, por eso en Seguridad Informática hay que cuidar no sólo a quién damos acceso mediante credenciales, sino también quién tiene acceso físicamente al hardware donde se corre el software.





12040 Visitas Totales 3 Visitas para Hoy

12 response on “Resetear contraseña olvidada de tu Raspberry Pi

  1. Intento hacer lo que dices y no puedo realizar la modificacion debia a que los archivos son de solo lectura.
    Como podria cambiar eso?

  2. Grande! Era lo que necesitaba: he actualizado de Raspbian Stretch a Buster y, al arrancar, no reconoce mi antigua contraseña. He seguido tus instrucciones (son muy claras) pero, cuando he llegado al prompt, no he podido remontar el volumen porque... no me reconoce los teclados inalámbricos y no tengo ningún teclado USB en casa 😀

    Bueno, el lunes dispondré de uno y creo que lo solucionaré.

    Muchas gracias por las instrucciones.

    • ¡Me alegro de que te haya servido!

      Como bien apuntas, lo del teclado puede ser a causa de que necesites instalar drivers para el receptor inalámbrico, ya que al actualizar el sistema operativo el kernel se actualiza y los drivers que no son compatibles dejan de funcionar.

  3. Hola buen tutorial. Mi problema es cuando me pide que introduzca la nueva contraseña deja de reconocerme el teclado y no puedo introducirla. ¿Sabes si puede haber alguna solución o a qué se puede deber?

    También te digo que de todo lo que hay parecido en internet, tu tutorial es el único con el que he conseguido llegar a que me pida la contraseña.

    Muchas gracias.

    Un saludo.

  4. Muy buenas, tengo un problema que de seguro es por la diferencias de versión, el tema es que modifiqué el cmdline.txt con nano y hasta ahí todo bien, pero al momento de hacer el primer comando es decir: "mount -rw -o remount /" no reconoce la ruta de este, inutilizando todos los pasos siguientes, al menos pude aplicar sync para volver a la normalidad pero no logre ni cambiar password ni nada, si tienes algun consejo te leo

    • Resulta curioso que no te funcione… El comando mount está remontando la raíz de ficheros que se define en el fstab que es donde explícitamente se definen las particiones y sistema de ficheros.

      No obstante se me ocurren las siguientes comprobaciones:

      – Comprueba que en el cmdline.txt sólo añadiste la última parte del init y que no exista otro init. Esta secuencia de arranque para el kernel puede variar entre versiones y se trata de añadir, no de sustituir la totalidad de la línea por la que pongo yo en mi ejemplo.

      – ¿Se te para a mitad de la carga del kernel? (Es lo que debería pasar)

      – Puede que realmente termine la carga y se te quede bloqueado porque tengas corrompido (mal editado) el cmdline.txt. Si terminó la carga del kernel de la manera que fuera y ya se ha montado el sistema de ficheros de la SD, al tratarse de la raíz del sistema; puede que se quede colgado porque el sistema ya está usando el sistema de ficheros y la línea comentada con el "mount -o" sobrescribe las opciones del fstab. Por otro lado la opción -rw monta el volumen en lectura escritura. Si falla porque el sistema de ficheros está en uso y hay alguna parte en uso para escritura, lo que ocurre es que falla e intenta montarlo de nuevo aunque sea en sólo lectura.

      – Por último y aunque pueda sonar como una chorrada, comprueba que al meter y sacar la SD no moviste la pestaña que bloquea la tarjeta para que sólo sea modo lectura. Esto podría explicar también el problema.

      Espero que con alguna de estás observaciones puedas arreglar tu problema. 😉

  5. Juan Carlos Garcia De Las Heras

    Hola, buen aporte, pero cuando introduzco el comando mount -rw no lo reconoce. Em el help pone usar "mount -w" pero cuando lo pongo, me dice "mal uso del comando".
    Gracias de todas manera por tu aporte

  6. me pasa lo mismo que José Álvarez cuando llego al momento de poner la nueva contraseña no reconoce el teclado, y es con cable usb, y la verdad esta muy claro tu post, muchas gracias.

  7. Alexsis W. Regis

    Buenas tardes, me dicen que no encuentra can't find PARTUUID=6c586e13-02 y por ende no puedo realizar el proceso