2009-09-22 21 views
5

Quiero verificar un script de shell si el nombre de usuario y la contraseña pasados ​​de un usuario local son correctos. ¿Cuál es la forma más fácil de hacer esto?compruebe el nombre de usuario y la contraseña de Unix en un shellscript

Lo único que encontré mientras busqué en Google fue usar 'esperar' y 'su' y luego verificar de alguna manera si el 'su' fue exitoso o no.

+0

Más detalles sobre lo que está intentando lograr y lo que está haciendo su secuencia de comandos podría ayudar. –

Respuesta

4

Bien, ahora este es el script que utilicé para resolver mi problema. Primero intenté escribir un pequeño c-programm como lo susurró Aaron Digulla, pero eso resultó ser demasiado difícil.

Quizás este script es útil para otra persona.

#!/bin/bash 
# 
# login.sh $USERNAME $PASSWORD 

#this script doesn't work if it is run as root, since then we don't have to specify a pw for 'su' 
if [ $(id -u) -eq 0 ]; then 
     echo "This script can't be run as root." 1>&2 
     exit 1 
fi 

if [ ! $# -eq 2 ]; then 
     echo "Wrong Number of Arguments (expected 2, got $#)" 1>&2 
     exit 1 
fi 

USERNAME=$1 
PASSWORD=$2 

# Setting the language to English for the expected "Password:" string, see http://askubuntu.com/a/264709/18014 
export LC_ALL=C 

#since we use expect inside a bash-script, we have to escape tcl-$. 
expect << EOF 
spawn su $USERNAME -c "exit" 
expect "Password:" 
send "$PASSWORD\r" 
#expect eof 

set wait_result [wait] 

# check if it is an OS error or a return code from our command 
# index 2 should be -1 for OS erro, 0 for command return code 
if {[lindex \$wait_result 2] == 0} { 
     exit [lindex \$wait_result 3] 
} 
else { 
     exit 1 
} 
EOF 
+0

Tenga en cuenta que 'exportar LC_ALL = C' al inicio de la secuencia de comandos lo haría funcionar para sistemas con un idioma predeterminado diferente, se establecería el idioma en inglés para esta ejecución de script, ya que está esperando la cadena' Contraseña: ', ver http://askubuntu.com/a/264709/18014. –

9

el nombre de usuario y las contraseñas se escriben en el archivo /etc/shadow. acaba de obtener el usuario y el hash de la contraseña a partir de allí (sed ayudaría), hash tu propia contraseña y comprobar.

utilice mkpasswd para generar el hash. tiene que ver qué sal está usando su versión. la más nueva sombra está utilizando de manera sha-512:

mkpasswd -m sha-512 password salt 

páginas de manual puede ayudarle a no mucho.

Más fácil sería utilizar php y el módulo pam-aut. allí puedes verificar vie php en el acceso grupal usuario pwd.

+1

más detalles sobre la implementación de este enfoque: http://ubuntuforums.org/archive/index.php/t-1232715.html –

+0

oh ok, nice. Paso 6 horas pensando en este enfoque por mi cuenta hace unos meses. este sitio habría ayudado mucho. pero necesitaba esto para la autenticación web, así que finalmente utilicé el módulo auth-pam de php – Hayt

+0

¿dónde dice PHP? oO – knittl

0

Respuesta parcial sería verificar el nombre de usuario, ¿está definido en el archivo passwd/shadow en/etc y luego calcular las contraseñas MD5 con salt. Si tiene su contraseña de usuario enviada a través de SSL (o al menos algún servicio de terminal de servidor).

Es sólo una pista porque no sé qué necesitas en realidad. Porque "su" es principalmente para fines de autenticación.

Otros temas que puede ver son los servicios kerberos/LDAP, pero esos son temas difíciles.

+0

Hayt tiene razón esto no es MD5 hash pero sha. – bua

4

En Linux, tendrá que escribir un pequeño programa en C que llame al pam_authenticate(). Si la llamada devuelve PAM_SUCCESS, el nombre de usuario y la contraseña son correctos.

Cuestiones relacionadas