
BezüglichWarum ist das Root-Passwort bei Linux Mint mein Benutzerpasswort?
Es scheint, dass für meine Mint 17.3-Box ein Root-Passwort festgelegt ist: Ich sehe einen Passwort-Hash in /etc/shadow
(er beginnt mit $6$...
). Ich möchte diesen Passwort-Hash mit meinem (bekannten) Benutzerpasswort vergleichen.
Aus irgendeinem Grund vertraue ich su -
(in der verlinkten Frage) nicht darauf,MeinPasswort, im Vergleich zuWurzelPasswort.
Gibt es eine einfache Möglichkeit (z. B. in Bash), einen bekannten Hash mit einem bekannten Passwort zu vergleichen und zu sehen, ob sie übereinstimmen?
Antwort1
Suchen Sie nach dem in verwendeten Salt /etc/shadow
. Es sind die Zeichen zwischen dem zweiten und dritten $
, normalerweise sind es acht.
Verwenden Sie mkpasswd -m sha-512 -S <salt>
und geben Sie das Passwort ein, das Sie für richtig erachten, wenn Sie danach gefragt werden. Es wird der Hash mit $6$<salt>$
Präfix ausgegeben.
Antwort2
Am Ende müssen Sie die crypt(3)
Funktion libcrypt
(die auf GNU-Systemen wie Linux Mint mit der GNU libc geliefert wird) mit dem Passwort als erstem Argument und dem Hash ( $6$...
) als zweitem Argument aufrufen.
python
ist ein solches Tool, das diese Funktion bereitstellt, sodass Sie Folgendes tun können:
HASH='$6$...' python2 -c 'import crypt, os, getpass
print(crypt.crypt(getpass.getpass(), os.environ["HASH"]))'
Und wenn die Ausgabe mit dem Hash übereinstimmt, war es das richtige Passwort.
$HASH
oben kann entweder der vollständige Hash (wie $6$rounds=1234$somesalt$6eFBNhSgwEwdfZBHueBedpcqaVKGcV2DJy/tQMFd3JL88hwvgTkISJShnOUrbtP1fRs8I9rGIdsgWCoiujxD2/
) oder nur der Teil davon bis ganz rechts stehen $
, d. h. einschließlich des Salt und der optionalen Rundenanzahl ( $6$rounds=1234$somesalt$
).
Oder Sie können die Überprüfung in folgender Weise durchführen python
:
HASH='$6$...' python2 -c '
import crypt, os, getpass
hash = os.environ["HASH"]
if crypt.crypt(getpass.getpass(), hash) == hash:
print "OK"
else:
print "Wrong password"'
$HASH
( muss dann natürlich den vollständigen Hash enthalten).
Mit python
können Sie mithilfe des ctypes
Moduls auch Funktionen aus beliebigen Bibliotheken aufrufen. Eine andere Möglichkeit, die Funktion des Systems aufzurufen crypt()
(nicht, dass Sie das müssten, da es sich um crypt
eines der Standardmodule handelt, ich hatte nur vorher den Eindruck, dass das crypt
Modul mit einer eigenen separaten crypt()
Implementierung geliefert wird), ist etwa so:
HASH='$6$...' python2 -c '
from ctypes import *
import os, getpass
l = CDLL("libcrypt.so.1")
l.crypt.restype = c_char_p
print l.crypt(getpass.getpass(), os.environ["HASH"])'
Antwort3
ssh root@localhost
fällt mir ein, obwohl Ihre Distribution möglicherweise die kennwortbasierte Anmeldung für Root vollständig deaktiviert und/oder ein Schlüsselpaar installiert hat; oder die Anmeldung auf Ihrem üblichen grafischen Anmeldebildschirm als Benutzer root
. (Selbst wenn Sie die automatische Anmeldung aktiviert haben, bietet das Dialogfeld zum Herunterfahren möglicherweise die Anmeldung als anderer Benutzer an.)