5 Stimmen

Unix-Benutzername und -Passwort in einem Shellscript prüfen

Ich möchte in einem Shell-Skript überprüfen, ob der Benutzername und das Passwort eines lokalen Unix-Benutzers korrekt sind. Was ist der einfachste Weg, dies zu tun?

Das Einzige, was ich beim Googeln gefunden habe, war die Verwendung von "expect" und "su" und dann irgendwie zu überprüfen, ob "su" erfolgreich war oder nicht.

8voto

Hayt Punkte 5001

Werden der Benutzername und die Passwörter in der Datei /etc/shadow Datei. holen Sie sich einfach den Benutzer und den Passwort-Hash von dort ( sed wäre hilfreich), hacken Sie Ihr eigenes Passwort und überprüfen Sie es.

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

mkpasswd -m sha-512 password salt

manpages können Ihnen dabei sehr helfen.

Einfacher wäre es, php und das pam-aut Modul zu verwenden. Dort kann man über php den Gruppenzugriff pwd user überprüfen.

5voto

Ok, das ist das Skript, das ich zur Lösung meines Problems verwendet habe. Ich habe zuerst versucht, ein kleines C-Programm zu schreiben, wie von Aaron Digulla vorgeschlagen, 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

4voto

Aaron Digulla Punkte 308693

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

0voto

bua Punkte 4611

Eine Teilantwort wäre, den Benutzernamen zu überprüfen, ob er in der Datei passwd/shadow in /etc definiert ist und dann die Passwörter MD5 mit Salt zu berechnen. Wenn Sie Ihr Benutzerpasswort über SSL (oder zumindest einen Server-Terminaldienst) senden lassen.

Es ist nur ein Hinweis, weil ich nicht weiß, was Sie wirklich brauchen. Denn "su" ist hauptsächlich für die Authentifizierung gedacht.

Andere Themen, mit denen Sie sich beschäftigen könnten, sind Kerberos/LDAP-Dienste, aber das sind schwierige Themen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X