Was ist der Zweck von / etc / shadow und shadow cache-Dateien unter Linux?

9

Was ist der Zweck der Datei / etc / shadow unter Linux? Ist es auch für SUSE-Clients gleich? Es wird eine Schatten-Cache-Datei gepflegt. Was ist der Zweck davon?

Ashitosh
quelle

Antworten:

16

Von Anfang an haben Unix- und Unix-Betriebssysteme (einschließlich Linux) Kennwörter immer als kryptografische Hashes gespeichert (1). Diese Hashes wurden ursprünglich in gespeichert /etc/passwd, aber diese Datei musste weltweit lesbar sein, um die Informationen für andere Zwecke verfügbar zu machen - sogar eine einfache ls -lLesung /etc/passwd, um die numerische Benutzer-ID jedes Dateibesitzers zur Anzeige in ihren Benutzernamen zu konvertieren. Wenn die Hash-Passwörter jedoch in einer weltweit lesbaren Datei gespeichert sind, können böswillige Benutzer diese Hashes problemlos abrufen 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 von einer privilegierten Gruppe von Administratoren) gelesen werden kann /etc/shadow. Dadurch werden die Hashes vor normalen Benutzern des Systems ausgeblendet, während sie für Benutzerauthentifizierungszwecke verfügbar bleiben.

Anmerkungen :

  1. Pedantisch, ich weiß, aber die gespeicherten Passwörter sind nicht verschlüsselt. Sie werden mit einem kryptografisch sicheren Hashing-Algorithmus (zumindest zum Zeitpunkt der Erstellung) gehasht. Die wichtigsten relevanten Unterscheidungen sind, dass Hashes eine feste Länge haben (die Länge des verschlüsselten Textes hängt von der Länge des verschlüsselten Textes ab) und nicht umkehrbar sind (verschlüsselter Text kann entschlüsselt werden; Hash-Text kann nicht).

  2. Da Hashes eine feste Länge haben, gibt es unendlich viele Eingaben, die mit einer bestimmten Hash-Darstellung übereinstimmen. Ein Angreifer könnte daher ein funktionierendes Passwort finden, das nicht unbedingt mit dem Passwort des Besitzers übereinstimmt - obwohl dies angesichts der Größe moderner Krypto-Hashes sehr unwahrscheinlich ist.

Dave Sherohman
quelle
Ich denke, im letzten Absatz müssen Sie "endlich" und nicht "unendlich" sagen.
Phunehehe
4
@phunehehe Nein, die Eingabemenge (alle möglichen Passwörter) ist unendlich, aber die Ausgabe (alle möglichen Hashwerte) ist endlich.
Phihag
@phihag Ah ich verstehe. Aber ein Hash wäre sowieso viel länger als jedes an Menschen erinnerbare Passwort :)
Phunehehe
1
Die Anzahl der Eingaben, die zu einer bestimmten Kollision führen, ist nicht unendlich, da die Länge der Zeichenfolgen, die von einem bestimmten Algorithmus gehasht werden können, endlich ist . Siehe zum Beispiel stackoverflow.com/questions/17388177/…
MariusMatutiae
1
@MariusMatutiae Nehmen Sie eine wirklich schlechte Hash-Implementierung an, die mit 3 Zeichen abgeschnitten wird. Das richtige Passwort lautet "abc". Die Eingaben "abcd", "abcde", "abcdef" usw. erzeugen ebenfalls den gleichen Ausgabe-Hash und werden daher auch akzeptiert. Es gibt unendlich viele Zeichenfolgen, die mit "abc" beginnen und trivial kollidieren. (Beachten Sie, dass wir uns hier im Grunde nur nicht darüber
einig sind,
6

Die /etc/shadowDatei wurde aus Sicherheitsgründen erstellt und enthält das verschlüsselte Kennwort jedes Benutzers.

Ursprünglich wurde das verschlüsselte Passwort in gespeichert /etc/passwd. /etc/passwdmusste weltweit lesbar sein, damit das System Benutzer-IDs Benutzernamen zuordnen konnte und Benutzer Informationen über einander herausfinden konnten, z. B. das Home-Verzeichnis des anderen Benutzers oder dessen Telefonnummer, die traditionell im Feld "gecos" gespeichert war und vom Dienstprogramm "finger" angezeigt.

Aber dann wurde den Leuten klar, dass dies ein Sicherheitsproblem war. Jeder, der genügend Zeit hat, kann einen sogenannten Bruteforce-Angriff ausführen , indem er programmgesteuert verschlüsselte Passwörter für jedes mögliche Passwort generiert. Wenn der Angreifer dies tat, ohne tatsächlich zu versuchen, sich über telnetoder anzumelden ssh, konnte das System nicht wissen, dass es angegriffen wurde.

Daher wurde das verschlüsselte Passwort in das neu erstellte Passwort verschoben /etc/shadow, das nur von root gelesen werden kann.

Es enthält auch andere Informationen, die die /etc/passwdDatei in Bezug auf das Benutzerkonto und das Kennwort nicht unterstützt hat, z. B. wann das Kennwort zuletzt geändert wurde und wann es abläuft.

Weitere Informationen zum Dateiformat finden Sie unter man 5 shadow( Webversion ).


Ich kann nicht sagen, ob es für SUSE dasselbe ist, ohne zu wissen, mit welcher Version von SUSE Sie es zu tun haben. Beispielsweise verwendet Ihr SUSE-System möglicherweise Blowfish anstelle von MD5.

Sie haben auch impliziert, dass Sie Ihre /etc/shadowDatei mit einem System mischen , auf dem eine andere Linux-Distribution ausgeführt wird, aber nicht angegeben, was die andere Distribution ist.

Siehe beispielsweise Probleme beim Migrieren von Schattendateien von SuSE 9.3 auf Ubuntu Server x86_64 .

Um dies herauszufinden, öffnen Sie /etc/shadowund prüfen Sie, ob das Feld für das verschlüsselte Kennwort mit $1$oder beginnt $2$. Wenn es enthält $1$, ist es MD5 und mit den meisten anderen Distributionen kompatibel. Wenn es enthält $2$, dann ist es wahrscheinlich Blowfish gemäß Blowfish-Schattendateien auf Debian .

Wenn Sie Ubuntu verwenden, ist das erste Google-Suchergebnis für Ubuntu Blowfish möglicherweise ein guter Ausgangspunkt.

Mikel
quelle
3

Benutzer werden in der /etc/passwdDatei aufgelistet . Diese Datei enthält viele Informationen, die vom System verwendet werden, um Benutzern nicht nur die Anmeldung zu ermöglichen.

Jede Zeile entspricht einem Benutzereintrag und verschiedene Felder werden durch Doppelpunkte getrennt. Das erste Feld ist das Login, gefolgt vom entsprechenden Passwort.

In diesem Feld wurden früher verschlüsselte Passwörter gespeichert. Die /etc/passwdDatei muss jedoch für alle im System lesbar sein, damit die Verschlüsselung keine Brute-Force-Angriffe verhindert, wie von @Mikel angegeben. Die Lösung bestand darin, diese verschlüsselten Kennwörter in eine Nur-Root-Datei zu verschieben : /etc/shadow.

Somit /etc/shadowenthält die verschlüsselten Passwörter des Benutzers des Systems. Das System weiß, dass es in dieser Datei nach Kennwörtern suchen muss, wenn Kennwortfelder /etc/passwdnur ein x enthalten (dh " Übergang zu / etc / shadow").

Jopasserat
quelle
1
Beachten Sie, dass in gespeicherte Passwörter /etc/passwdgenauso gehasht wurden / werden, wie sie es wären, wenn sie in wären /etc/shadow. Sie sagen eigentlich nicht , dass Passwörter in /etc/passwdKlartext sind, aber es wäre für jemanden, der mit der Behandlung von * nix-Passwörtern nicht vertraut ist, leicht, Ihre Antwort so zu interpretieren, dass sie dies impliziert.
Dave Sherohman
Vielen Dank für Ihren Kommentar, der mir geholfen hat, meine Antwort zu verbessern.
Ich glaube nicht, dass das xeigentlich etwas bedeutet. Es ist nur als ungültiger Hash vorhanden (einer, der keinem Passwort entspricht). Einige Systeme verwenden !.
user1686
3

Mal sehen, ob ich alle Up-Votes der Welt bekommen kann, da ich 1987 die Linux Shadow Password Suite geschrieben habe;)

Die Originaldatei /etc/passwdenthielt einen modifizierten DES-basierten Hash des Klartextkennworts. Zum Zeitpunkt der crypt()Erstellung der Funktion wurde angenommen (und dies wurde von den Entwicklern des UNIX-Betriebssystems angegeben), dass Angriffe auf den Kennwort-Hash aufgrund der Anzahl möglicher Kennwörter und der Verwendung eines 12-Bit nicht möglich wären (4.096 mögliche Werte) "Salz". Jedes mögliche Klartext-Passwort hatte 4.096 mögliche Hash-Werte, und mit einem 64-Bit-Hash-Ergebnis ergaben sich insgesamt 2 ^ 72 mögliche Passwort-Hashes.

Wie ein anderes Poster erwähnte, /etc/passwdwurde es auch von verschiedenen Dienstprogrammen verwendet, um zwischen Benutzernamen und UID-Werten zuzuordnen (die /etc/groupDatei bietet die analoge Funktion für Gruppen), und dies erforderte, dass sie weltweit lesbar ist.

In den 1980er Jahren wurde deutlich, dass Wörterbuchangriffe gegen den in der /etc/passwdDatei gespeicherten Passwort-Hash möglich wurden und /etc/shadowin einer frühen Version von System V in AT & T UNIX eingeführt wurden. Ich habe dokumentiert, auf welchen Manpages ich die ursprüngliche Shadow-Bibliothek geschrieben habe, und ich ' Ich habe es seitdem vergessen, aber es war definitiv eine frühe System V-Version, wahrscheinlich SVR3.2.

Was AT & T tat und was ich 1987 für SCO Xenix (das ursprüngliche SCO Xenix, nicht das spätere böse SCO Xenix) implementierte, das schließlich unter Linux zum Einsatz kam, war einfach das Hash-Passwort auf zu verschieben /etc/shadow. Dies verhinderte den Drive-by-Angriff, bei dem ein nicht privilegierter Benutzer eine Kopie davon erwarb /etc/passwdund einen Angriff darauf ausführte. Wenn Sie wissen, warum ich Shadow überhaupt geschrieben habe, ließ ich meine /etc/passwdDatei von einem Benutzer über UUCP herunterladen, als wir UUCP noch für fast alles verwendeten.

Als Linux erstellt und weit verbreitet wurde, gab es eine sehr große Anzahl von Tools, um Passwort-Hashes anzugreifen. Hochleistungs-Neuimplementierungen von crypt()waren eine Möglichkeit, und wörterbuchbasierte Angriffe über Tools wie Crack und libcrack waren andere. Der erste Port wurde von Nate Holloway und Floria La Roche gemacht (ich gab ihnen Anerkennung, ich weiß nicht, ob jemand die Arbeit vor ihnen gemacht hat).

Schließlich war die Verwendung von crypt()Hash-basierten Hashes selbst in einer geschützten Datei nicht mehr sicher und die ursprünglichen MD5Hash-Änderungen wurden vorgenommen. MD5wurde schließlich als zu schwach angesehen und neuere Hashes wurden verwendet.

Theoretisch könnte ein ausreichend starker Hash gespeichert werden /etc/passwd. Schlechte Betriebssicherheit bedeutet, dass viele Systeme ihre /etc/shadowDateien über verschiedene Angriffsmethoden zur Verfügung haben - "Ich habe die Sicherungsdateien gestohlen" ist wahrscheinlich die einfachste.

Julie in Austin
quelle