2009-09-22 16 views
5

Voglio verificare uno script di shell se un nome utente e password passati dall'utente unix locale sono corretti. Qual è il modo più semplice per farlo?controlla unix nome utente e password in uno shellscript

L'unica cosa che ho trovato durante la ricerca su google è stata l'utilizzo di 'expect' e 'su' e quindi il controllo in qualche modo se il 'su' ha avuto successo o meno.

+0

Ulteriori informazioni su ciò che si sta tentando di realizzare e su ciò che lo script sta facendo potrebbero essere utili. –

risposta

4

Ok, ora questo è lo script che ho usato per risolvere il mio problema. Ho provato per la prima volta a scrivere un piccolo c-programma come sospettato da Aaron Digulla, ma ciò si è rivelato troppo difficile.

Forse questo Script è utile a qualcun altro.

#!/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

Si noti che 'export LC_ALL = C' all'inizio dello script lo farebbe funzionare per sistemi con una lingua predefinita diversa, imposterebbe la lingua in inglese per l'esecuzione di questo script, poiché si aspetta la stringa' Password: ', vedi http://askubuntu.com/a/264709/18014. –

9

il nome utente e le password sono scritti nel file /etc/shadow. basta avere l'utente e l'hash della password da lì (sed sarebbe d'aiuto), cancellarne la password e controllare.

utilizzare mkpasswd per generare l'hash. devi capire quale sale sta usando la tua versione. la nuova ombra sta usando sha-512 così:

mkpasswd -m sha-512 password salt 

pagine di manuale può aiutare c'è un sacco.

Più facile sarebbe utilizzare php e il modulo pam-aut. lì puoi controllare vie php sul gruppo di accesso utente pwd.

+1

ulteriori dettagli sull'implementazione di questo approccio: http://ubuntuforums.org/archive/index.php/t-1232715.html –

+0

oh ok, bello. Trascorro 6 ore a capire questo approccio da solo qualche mese fa. questo sito avrebbe aiutato molto. ma avevo bisogno di questo per l'autenticazione web, così finalmente ho usato il modulo auth-pam di php – Hayt

+0

dove dice PHP? oO – knittl

0

La risposta parziale dovrebbe essere il controllo del nome utente, è definito nel file passwd/shadow in/etc quindi calcolare le password MD5 con salt. Se la tua password utente è stata inviata su SSL (o almeno su alcuni servizi del server terminal).

E 'solo un suggerimento perché non so di cosa hai realmente bisogno. Poiché "su" è principalmente a scopo di autenticazione.

Altri argomenti che potreste considerare sono kerberos/servizi LDAP, ma quelli sono argomenti difficili.

+0

Hayt ha ragione questo non è MD5 hash ma sha. – bua

4

Su Linux, è necessario scrivere un piccolo programma C che chiama pam_authenticate(). Se la chiamata restituisce PAM_SUCCESS, il login e la password sono corretti.

Problemi correlati