Ich möchte über die Linux-Befehlszeile prüfen, ob ein bestimmtes Klartext-Passwort mit einem verschlüsselten Passwort in einer / etc / shadow übereinstimmt
(Ich benötige dies, um Webbenutzer zu authentifizieren. Ich verwende ein eingebettetes Linux.)
Ich habe Zugriff auf die Datei / etc / shadow.
linux
command-line
password
embedded
Michelemarcon
quelle
quelle
Antworten:
Sie können das verschlüsselte Passwort einfach mit awk extrahieren. Anschließend müssen Sie das Präfix extrahieren
$algorithm$salt$
(vorausgesetzt, dieses System verwendet nicht das traditionelle DES, das derzeit stark veraltet ist, weil es brachial erzwungen werden kann).Für die Kennwortprüfung ist die zugrunde liegende C-Funktion
crypt
, es gibt jedoch keinen Standard-Shell-Befehl, um darauf zuzugreifen.In der Befehlszeile können Sie einen Perl-Einzeiler verwenden, um
crypt
das Kennwort aufzurufen .Da dies in reinen Shell-Tools nicht möglich ist, können Sie dies auch in Perl tun, wenn Perl verfügbar ist. (Oder Python, Ruby, ... was immer Sie zur Verfügung haben, um die
crypt
Funktion aufzurufen .) Warnung, ungetesteter Code.Auf einem Embedded-System ohne Perl würde ich ein kleines, dediziertes C-Programm verwenden. Warnung, direkt in den Browser eingegeben, habe ich noch nicht einmal versucht zu kompilieren. Dies soll die notwendigen Schritte veranschaulichen, nicht als robuste Implementierung!
Ein anderer Ansatz besteht darin, ein vorhandenes Programm wie
su
oder zu verwendenlogin
. In der Tat ist es ideal, wenn Sie dafür sorgen, dass die Webanwendung das ausführt, was sie benötigtsu -c somecommand username
. Die Schwierigkeit besteht darin, das Passwort einzugebensu
. Dies erfordert ein Terminal. Das übliche Tool zum Emulieren eines Terminals ist zu erwarten , es ist jedoch eine große Abhängigkeit für ein eingebettetes System. Währendsu
es sich in BusyBox befindet, wird es häufig weggelassen, da für viele seiner Verwendungen die BusyBox-Binärdatei als root festgelegt werden muss. Wenn Sie dies dennoch tun können, ist dies aus Sicherheitsgründen der robusteste Ansatz.quelle
su
Ansatz.Schauen Sie sich
man 5 shadow
und anman 3 crypt
. Von letzterem können Sie lernen, dass Passwort-Hashes in/etc/shadow
der folgenden Form vorliegen:wo
id
und die Art der Verschlüsselung definiert, das Lesen weiter kann eines sein, vonAbhängig von der Art des Hash müssen Sie die entsprechende Funktion / das entsprechende Tool verwenden, um das Kennwort "von Hand" zu generieren und zu überprüfen. Wenn das System ein
mkpasswd
Programm enthält , können Sie es wie hier vorgeschlagen verwenden . (Sie nehmen das Salz aus der Schattendatei, wenn das nicht offensichtlich war.) Zum Beispiel mitmd5
Passwörtern:generiert den String, der mit dem
/etc/shadow
Eintrag übereinstimmen soll .quelle
mkpasswd
, den ich mit installieren mussteapt-get install whois
. Die Befehlszeile für die Schattenzeile<user>:$6$<salt>$<pwd>:
warmkpasswd -msha-512 <password> <salt>
Bei Stack Overflow wurde eine ähnliche Frage gestellt . cluelessCoder hat mit expect ein Skript bereitgestellt , das Sie möglicherweise auf Ihrem eingebetteten System installiert haben oder nicht.
quelle
Beachten Sie, dass das Programm unter der Annahme, dass das System ordnungsgemäß konfiguriert ist, als Root ausgeführt werden muss.
Eine bessere Lösung, als die Schattendatei direkt zu lesen und Ihren eigenen Code um die Krypta zu schreiben, wäre, einfach die Pam-Bindungen zu verwenden.
Der Squid- Tarball enthielt früher ein einfaches CLI-Tool zur Überprüfung von Benutzernamen / Passwörtern mit stdio - so einfach, dass es sich um Argumente handelt - obwohl die Version, die ich zuvor gehackt habe, kaum ein Pin-up-Poster für strukturierte Programmierung war. Ein kurzer Blick auf Google und es sieht so aus, als ob die neueren Versionen erheblich aufgeräumt wurden, aber immer noch ein paar 'goto's' drin sind.
quelle
quelle
line 61: :: syntax error: operand expected (error token is ":")