Quiero verificar, desde la línea de comandos de Linux, si una contraseña de texto sin formato dada es la misma que una contraseña cifrada en / etc / shadow
(Necesito esto para autenticar a los usuarios web. Estoy ejecutando un Linux incrustado).
Tengo acceso al archivo / etc / shadow en sí.
linux
command-line
password
embedded
michelemarcon
fuente
fuente
Respuestas:
Puede extraer fácilmente la contraseña cifrada con awk. Luego, debe extraer el prefijo
$algorithm$salt$
(suponiendo que este sistema no esté utilizando el DES tradicional, que está en desuso porque puede ser forzado en estos días).Para la verificación de contraseña, la función C subyacente es
crypt
, pero no hay un comando de shell estándar para acceder a ella.En la línea de comando, puede usar una línea Perl para invocar
crypt
la contraseña.Dado que esto no se puede hacer en herramientas de shell puro, si tiene Perl disponible, también podría hacerlo todo en Perl. (O Python, Ruby, ... lo que tenga disponible que pueda llamar a la
crypt
función). Advertencia, código no probado.En un sistema embebido sin Perl, usaría un pequeño programa dedicado de C. Advertencia, escrita directamente en el navegador, ni siquiera he intentado compilar. ¡Esto está destinado a ilustrar los pasos necesarios, no como una implementación robusta!
Un enfoque diferente es utilizar un programa existente como
su
ologin
. De hecho, si puede, sería ideal organizar la aplicación web para que realice lo que necesite a través desu -c somecommand username
. La dificultad aquí es alimentar la contraseña asu
; Esto requiere una terminal. Se espera la herramienta habitual para emular un terminal , pero es una gran dependencia para un sistema embebido. Además, mientrassu
está en BusyBox, a menudo se omite porque muchos de sus usos requieren que el binario de BusyBox sea la raíz setuid. Aún así, si puede hacerlo, este es el enfoque más sólido desde un punto de vista de seguridad.fuente
su
acercamiento.Echa un vistazo a
man 5 shadow
yman 3 crypt
. De este último, puede aprender que los hash de contraseña/etc/shadow
tienen la siguiente forma:donde
id
define el tipo de cifrado y, leyendo más, puede ser uno deSegún el tipo de hash, debe usar la función / herramienta adecuada para generar y verificar la contraseña "a mano". Si el sistema contiene un
mkpasswd
programa, puede usarlo como se sugiere aquí . (Si no era obvio, toma la sal del archivo sombra). Por ejemplo, con lasmd5
contraseñas:generará la cadena que debe coincidir con la
/etc/shadow
entrada.fuente
mkpasswd
, que tuve que instalar usandoapt-get install whois
. La línea de comando para la línea de sombra<user>:$6$<salt>$<pwd>:
eramkpasswd -msha-512 <password> <salt>
Hubo una pregunta similar en Stack Overflow . cluelessCoder proporcionó una secuencia de comandos que utiliza el método wait , que puede o no tener en su sistema integrado.
fuente
Tenga en cuenta que, suponiendo que el sistema esté configurado correctamente, el programa deberá ejecutarse como root.
Una mejor solución que leer el archivo de sombra directamente y escribir su propio código alrededor de la cripta sería usar los enlaces de pam.
El tarball de squid solía venir con una herramienta CLI simple para verificar nombres de usuario / contraseñas usando stdio, tan simple de adaptar para usar argumentos, aunque la versión que pirateé anteriormente no era un póster pin-up para la programación estructurada. Un google rápido y parece que las versiones más recientes se han limpiado significativamente, pero todavía hay algunos 'goto' allí.
fuente
fuente
line 61: :: syntax error: operand expected (error token is ":")