2009-09-22 3 views
5

Ich möchte ein Shell-Skript einchecken, wenn ein lokaler Unix-Benutzer passierte Benutzername und Passwort korrekt sind. Was ist der einfachste Weg, dies zu tun?check unix Benutzername und Passwort in einem Shellscript

Beim googlen habe ich nur 'expect' und 'su' benutzt und dann irgendwie nachgesehen, ob 'su' erfolgreich war oder nicht.

+0

Weitere Details zu dem, was Sie erreichen möchten und was Ihr Skript macht, könnten helfen. –

Antwort

4

Ok, jetzt ist dies das Skript, das ich verwendet habe, um mein Problem zu lösen. Ich habe zuerst versucht, ein kleines C-Programm zu schreiben, wie es von Aaron Digulla behauptet wurde, aber das erwies sich als viel zu schwierig.

Vielleicht ist dieses Skript für jemand anderen nützlich.

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

Beachten Sie, dass 'export LC_ALL = C' am Anfang des Skripts es für Systeme mit einer anderen Standardsprache funktionieren lassen würde, würde es die Sprache auf Englisch für diese Skriptausführung einstellen, da es den String' Password: 'erwartet, siehe http://askubuntu.com/a/264709/18014. –

9

Der Benutzername und die Passwörter sind in der Datei /etc/shadow geschrieben. Holen Sie sich einfach den Benutzer und den Passwort-Hash von dort (sed würde helfen), hash Ihr eigenes Passwort und überprüfen.

Verwenden Sie mkpasswd, um den Hash zu generieren. Sie müssen schauen, welches Salz Ihre Version verwendet. der neueste Schatten verwendet sha-512 so:

mkpasswd -m sha-512 password salt 

manpages Sie dort viel helfen können.

Einfacher wäre es, PHP und das Pam-Aut-Modul zu verwenden. Dort können Sie vie php auf Gruppenzugriff pwd Benutzer überprüfen.

+1

mehr Details über die Umsetzung dieses Ansatzes: http://ubuntuforums.org/archive/index.php/t-1232715.html –

+0

oh ok, schön. Ich verbringe 6 Stunden damit, diesen Ansatz vor ein paar Monaten selbst herauszufinden. Diese Seite hätte mir sehr geholfen. aber ich brauchte dies für die Web-Authentifizierung, also habe ich endlich das auth-pam-Modul von PHP – Hayt

+0

wo heißt es PHP? oO – knittl

0

Teilweise Antwort wäre, den Benutzernamen zu überprüfen, ist es in der Passwd/Shadow-Datei in/etc definiert dann berechnen Sie die Passwörter MD5 mit Salz. Wenn Sie Ihr Benutzer-Passwort über SSL (oder zumindest einen Server-Terminal-Dienst) gesendet haben.

Es ist nur ein Hinweis, weil ich nicht weiß, was Sie eigentlich brauchen. Weil "su" hauptsächlich für Authentifizierungszwecke dient.

Weitere Themen, die Sie sich ansehen können, sind Kerberos/LDAP-Dienste, aber das sind schwierige Themen.

+0

Hayt haben Recht, das ist nicht MD5 Hash, sondern sha. – bua

4

Unter Linux müssen Sie ein kleines C-Programm schreiben, das pam_authenticate() aufruft. Wenn der Anruf PAM_SUCCESS zurückgibt, sind Login und Passwort korrekt.

Verwandte Themen