Von Anfang an haben Unix und Unix-ähnliche Betriebssysteme (einschließlich Linux) Passwörter immer als kryptografische Hashes gespeichert (1). Diese Hashes wurden ursprünglich in /etc/passwd
gespeichert , aber diese Datei musste weltweit lesbar sein, um die Informationen für andere Zwecke verfügbar zu machen - selbst ein einfacher ls -l
muss /etc/passwd
lesen um die numerische Benutzer-ID jedes Dateieigentümers zur Anzeige in seinen Benutzernamen umzuwandeln. Da die gehashten Passwörter jedoch in einer allgemein lesbaren Datei vorhanden waren, konnten böswillige Benutzer diese Hashes leicht erlangen und versuchen, verwendbare Passwörter(2) für die Konten anderer Benutzer zu generieren.
Um dies zu verhindern, wurden die gehashten Passwörter schließlich in eine Datei verschoben, die nur von root (und gelegentlich einer privilegierten Gruppe von Administratoren) gelesen werden kann, /etc/shadow
. Dies verbirgt die Hashes vor normalen Benutzern des Systems, während sie für Benutzerauthentifizierungszwecke verfügbar bleiben.
Notizen :
-
Umständlich, ich weiß, aber die gespeicherten Passwörter sind es nicht verschlüsselt. Sie werden mit einem kryptografisch sicheren (zumindest zum Zeitpunkt der Erstellung) Hashing-Algorithmus gehasht. Die wichtigsten hier relevanten Unterscheidungen sind, dass Hashes eine feste Länge haben (die Länge des verschlüsselten Textes variiert je nach Länge des verschlüsselten Textes) und nicht umkehrbar sind (verschlüsselter Text kann entschlüsselt werden, gehashter Text nicht).
-
Da Hashes eine feste Länge haben, gibt es eine unendliche Anzahl von Eingaben, die mit jeder gegebenen Hash-Darstellung übereinstimmen. Ein Angreifer könnte daher ein funktionierendes Passwort finden, das nicht unbedingt mit dem Passwort des Besitzers identisch ist – obwohl dies angesichts der Größe moderner Krypto-Hashes sehr unwahrscheinlich ist.
Die /etc/shadow
Datei wurde aus Sicherheitsgründen erstellt und enthält das verschlüsselte Passwort jedes Benutzers.
Ursprünglich wurde das verschlüsselte Passwort in /etc/passwd
gespeichert . /etc/passwd
musste weltweit lesbar sein, damit das System Benutzer-IDs Benutzernamen zuordnen konnte und damit Benutzer Informationen über einander herausfinden konnten, z. das Home-Verzeichnis des anderen Benutzers oder seine Telefonnummer, die traditionell im "gecos"-Feld gespeichert und vom "finger"-Dienstprogramm angezeigt wurde.
Aber dann erkannten die Leute, dass dies ein Sicherheitsproblem war. Jeder mit genügend Zeit könnte einen sogenannten Brute-Force-Angriff durchführen, indem er programmgesteuert verschlüsselte Passwörter für jedes mögliche Passwort generiert. Wenn der Angreifer das getan hat, ohne tatsächlich versucht zu haben, sich über telnet
anzumelden oder ssh
, konnte das System nicht wissen, dass es angegriffen wurde.
Also wurde das verschlüsselte Passwort in den neu erstellten /etc/shadow
verschoben , die nur von root gelesen werden kann.
Es enthält auch andere Informationen, die der /etc/passwd
Datei wurde in Bezug auf das Konto und das Passwort des Benutzers nicht unterstützt, z. wann das Passwort zuletzt geändert wurde und wann es abläuft.
Siehe man 5 shadow
(Webversion) für alle Details des Dateiformats.
Ob es bei SUSE genauso ist, kann ich nicht sagen, ohne zu wissen, mit welcher SUSE-Version Sie es zu tun haben. Beispielsweise kann Ihr SUSE-System Blowfish anstelle von MD5 verwenden.
Sie haben auch angedeutet, dass Sie Ihre /etc/shadow
gemischt haben Datei mit einem System, auf dem eine andere Linux-Distribution läuft, hat aber nicht gesagt, was die andere Distribution war.
Siehe beispielsweise Probleme beim Migrieren von Schattendateien von SuSE 9.3 auf Ubuntu Server x86_64.
Um es herauszufinden, öffnen Sie /etc/shadow
und prüfen Sie, ob das verschlüsselte Passwortfeld mit $1$
beginnt oder $2$
. Wenn es $1$
enthält , dann ist es MD5 und mit den meisten anderen Distributionen kompatibel. Wenn es $2$
enthält , dann ist es laut Blowfish-Schattendateien auf Debian wahrscheinlich Blowfish.
Wenn Sie Ubuntu verwenden, könnte das erste Google-Suchergebnis für Ubuntu Blowfish ein guter Ausgangspunkt sein.
Benutzer sind im /etc/passwd
aufgeführt Datei. Diese Datei enthält viele Informationen, die vom System nicht nur verwendet werden, um Benutzern die Anmeldung zu ermöglichen.
Jede Zeile entspricht einer Benutzereingabe und verschiedene Felder werden durch Doppelpunkte getrennt. Das erste Feld ist das Login, gefolgt vom dazugehörigen Passwort.
Früher wurden in diesem Feld verschlüsselte Passwörter gespeichert. Allerdings ist die /etc/passwd
Die Datei muss von jedem auf dem System lesbar sein, sodass die Verschlüsselung Brute-Force-Angriffe nicht verhindert, wie von @Mikel gesagt wurde. Die Lösung bestand darin, diese verschlüsselten Passwörter in eine nur für Root lesbare Datei zu verschieben:/etc/shadow
.
Also /etc/shadow
enthält die verschlüsselten Passwörter der Benutzer des Systems. Das System weiß, dass es in dieser Datei nach Passwörtern suchen muss, wenn Passwortfelder in /etc/passwd
sind nur ein x enthalten (was "Kreuz bedeutet nach /etc/shadow")