Hallo zusammen!
Ich habe ein kleines Problem bei einem Projekt und hoffe, dass mir vielleicht hier jemand helfen kann:
Auf einem Ubuntu 8.10 mit Apache2 läuft eine Webseite wo sich Benutzer bei bestimmten pages authentifizieren sollen.
Am meisten Sinn würde es für mich machen, wenn diese Authentifizierung direkt mit dem Passwort des Benutzeraccounts aus der /etc/shadow abgeglichen werden würde.
Der www-data user hat zwar keinen direkten Zugriff auf das File, aber ich würde die Einträge für die entsprechenden Benutzer einfach 2x am Tag per Cronjob in ein anderes File kopieren lassen. Das reicht für meine Aufgabe völlig aus.
Sicherheit ist denk ich mal kein Problem. Die Accounts um die es geht können sich nicht direkt anmelden sondern haben nur FTP/Samba Zugriff.
Mein Problem liegt in der Verschlüssleung die in der /etc/shadow verwendet wird.
Ich hab mir das ganze so vorgestellt:
1. User geht auf eine .php webseite, gibt seinen benutzernamen und passwort in die entsprechenden felder ein.
2. Wenn er auf "Login" klickt wird auf dem Host per shell_exec() einfach etwas in der Art:
more /etc/shadow/ |grep $USERNAME |grep $PASSWORDHASH
ausgeführt. Kommt eine Zeile zurück und stimmen Benutzernamen und Passwort mit denen in der shadow überein soll der Zugang gewährt werden.
Meine erste Frage: Ist die Idee kompletter Schwachsinn ... habe ich irgendwas übersehen ... geht das vielleicht irgendwie um einiges leichter?
Daraufhin habe ich ein Bisschen recherchiert und bin auf die Info gestoßen, dass Ubuntu 8.10 in der /etc/shadow den SHA-512 Algorithmus zur Verschlüsselung der Passwörter verwendet.
Auf der Webseite
http://www.delphi-forum.de/topic_PHP+SHA256SHA512+crypt+liefert+falsche+Ergebnisse_89067.html&sid=66c5ded1d52fb46a004728f5d44a7df7
gibt es eine php-Funktion
crypt_sha512($cleartextpassword, $saltstring)
Das result das diese Funktion zurückliefert sieht dem Eintrag in der /etc/shadow schon ziemlich ähnlich. (Ihr merkt vielleicht, ich bin nicht so der Verschlüsselungsexperte *gg*). Allerdings bräuchte ich wohl noch den korrekten $saltstring um ein Ergebniss zu bekommen, mit dem ich vergleichen könnte.
Frage zwei: Weiß jemand wie ich da rannkommen könnte?
Danke schonmal für eure Hilfe!