Warum ist die Dateiberechtigung für / etc / shadow auf 600 gesetzt?

25

Die Berechtigungen von /etc/shadowsind 600, was bedeutet, dass es für niemanden außer root lesbar ist.

Da jedoch alle darin enthaltenen Kennwörter nicht als Klartext, sondern als Hashes gespeichert sind (was bedeutet, dass das ursprüngliche Kennwort nicht aus dem Hash berechnet werden kann), warum kann es nicht von allen gelesen werden?

Shubhanshu Vishwakarma
quelle
Sind Sie sicher, dass die Berechtigungen für /etc/shadowsind 600?
Edwinksl
4
Wenn ein Passwort Ihres Stackoverflow-Kontos gehasht wurde, möchten Sie es anderen zeigen?
Jeon
5
@ByteCommander. Manchmal möchte ich eine Möglichkeit, Bearbeitungen zu verbessern.
TRiG

Antworten:

60

Um Offline-Brute-Force-Angriffe zu verhindern.

Auch wenn Sie einen Hash nicht rückgängig machen können, können Sie versuchen, jedes mögliche Passwort zu hacken, bis Sie eine Übereinstimmung gefunden haben. Mit guter Hardware und lokalem Zugriff auf die Datei können Sie Millionen von Versuchen pro Sekunde durchführen.

Wenn die Datei über 644Berechtigungen verfügt, kann jeder, der sich selbst in einer Gastsitzung bei Ihrem System anmeldet, diese Datei von Ihrem Computer kopieren (auf einen USB-Stick oder per Remotezugriff scp) und einen Brute-Force-Offlineangriff versuchen , ohne dies auf Ihrem Computer nachzuweisen .


Beachten Sie, dass die Berechtigungen für Ubuntu tatsächlich 640nicht 600:

$ ls -l /etc/shadow
-rw-r----- 1 root shadow 1239 Jun 25 04:35 /etc/shadow

Dies spielt jedoch keine große Rolle, da noch keine Berechtigungen für andere vorhanden sind und standardmäßig niemand in der shadowGruppe ist.


Ursprünglich wurden Hashes in /etc/passwd(weshalb es so heißt passwd) gespeichert , als Linux erstellt wurde. Das Knacken eines Hashes, selbst der damals verwendeten schwachen Typen, war praktisch unmöglich. Schließlich stieg die Rechenleistung jedoch bis zu dem Punkt an, an dem das Knacken eines Hashs, zumindest eines relativ schwachen Passworts, möglich wurde.

Ändern Sie die Berechtigungen /etc/passwdzu 640oder 600nicht funktionieren würde, da es viele legitime Gründe der Lage sein , zu lesen /etc/passwdals normaler Benutzer (UIDs zu Benutzernamen, bekommen ein Benutzer vollständigen Namen, Telefonnummer, usw. konvertieren), so Hashes zu bewegt wurden /etc/shadow, die 640Berechtigungen gegeben wurde. Ein xanstelle des Passwort - Hash - Feldes für einen Benutzer in /etc/passwdwird verwendet , um anzuzeigen , dass der Hash für diesen Benutzer gespeichert ist , /etc/shadowstatt.

insert_name_here
quelle
1
Guter Anruf beim Kopieren der Datei!
Rinzwind
1
und ich brauche den rep nicht ;-) edit: hmm er hat ihn auf meinen gesetzt: P sorry: D edit2 und jetzt ist er wieder da. eh: D
Rinzwind
6
Zuletzt habe ich überprüft, ob Sie das gehashte Passwort wieder in / etc / passwd ablegen und die Zeile aus / etc / shadow entfernen können und erwarten, dass Sie sich anmelden können. / Etc / shadow existiert, sodass es aus dem angegebenen Grund auf 600 gesetzt werden kann in dieser Antwort.
Joshua
8
Es ist erwähnenswert, dass die Berechtigungen für / etc / passwd 644 sind. Ich glaube, dass in der Vergangenheit die Passwort-Hashes hier gespeichert wurden. Das Ändern dieser Datei auf 640 hätte jedoch alle möglichen Kompatibilitätsprobleme verursacht. Stattdessen wurden die Kennwort-Hashes in den Schatten verschoben und aus passwd entfernt. Auf diese Weise können die anderen Informationen in passwd weltweit gelesen werden, während die Kennwort-Hashes in a geheim gehalten werden andere Datei.
Rodney
4
@Rodney als jemand, der mit BSD 4.3 aufgewachsen ist, haben Sie recht. Hashes wurden in / etc / passwd gespeichert. Als das Vax 11/780 noch auf dem neuesten Stand war, galt ein Brute-Force-Angriff auf die Passwörter in der Datei als unmöglich. Vielleicht noch wichtiger ist, dass das Internet [Arpanet] ein verschlafener kleiner Stau war und solche Dinge kaum in Betracht gezogen wurden. es gab kein ssh-only rlogin / telnet. Wenn Sie die Kennwortdatei 644 lsbeibehalten, müssen Dienstprogramme wie " setuid root" nicht angegeben werden, um von "uid" in "name" zu übersetzen.
Mike S
13

Tatsächlich wurde / etc / shadow erstellt, um eine Abkehr von einer öffentlich lesbaren Liste von Benutzernamen und Kennwörtern zu ermöglichen.

Bleib dran, dies wird eine kleine Geschichtsstunde sein, bevor wir zur eigentlichen Antwort kommen. Wenn Sie sich nicht für die Geschichte interessieren, scrollen Sie einfach ein wenig nach unten.

In früheren Zeiten behielten Unix-ähnliche Betriebssysteme, einschließlich Linux, die Passwörter im Allgemeinen in / etc / passwd. Diese Datei war und ist weltweit lesbar, da sie Informationen enthält, die eine Zuordnung beispielsweise zwischen numerischen Benutzer-IDs und Benutzernamen ermöglichen. Diese Informationen sind selbst für normale Benutzer zu absolut legitimen Zwecken äußerst nützlich, sodass die Lesbarkeit der Dateiwelt für die Benutzerfreundlichkeit von großem Vorteil war.

Schon damals erkannten die Leute, dass es eine schlechte Idee war, die Passwörter im Klartext in einer Datei an einem bekannten Ort zu haben, den jeder, der sich einloggen konnte, frei lesen konnte. In gewisser Weise wurden Passwörter gehasht. Das ist der alte "Krypta" -Kennwort-Hashing-Mechanismus, der auf modernen Systemen so gut wie nie verwendet wird, aber häufig für Legacy-Zwecke unterstützt wird.

Schauen Sie sich / etc / passwd auf Ihrem System an. Sehen Sie das zweite Feld, das xüberall steht? Früher hatte es das Hash-Passwort für das betreffende Konto.

Das Problem war, dass die Leute / etc / passwd herunterladen oder gar nicht herunterladen konnten und daran arbeiteten, die Passwörter zu knacken. Dies war kein großes Problem, obwohl Computer nicht besonders leistungsfähig waren (Clifford Stoll in The Cuckoo's Egg gibt, wie ich mich erinnere, die Zeit, um Mitte der 1980er Jahre ein Kennwort auf einem IBM-PC-Klassensystem zu hacken, etwa eine Sekunde ), aber es wurde ein Problem, da die Verarbeitungsleistung zunahm. Irgendwann wurde es mit einer anständigen Wortliste zu einfach, diese Passwörter zu knacken. Aus technischen Gründen konnte dieses Schema auch keine Kennwörter unterstützen, die länger als acht Byte sind.

Zwei Dinge wurden getan, um dies zu lösen:

  • Umstieg auf stärkere Hash-Funktionen. Die alte Krypta () hatte ihre Nutzungsdauer überlebt, und es wurden modernere Schemata entwickelt, die sowohl zukunftssicher als auch rechenstärker waren.
  • Verschieben Sie die gehashten Passwörter in eine Datei, die von niemandem gelesen werden konnte. Auf diese Weise gab es für einen Angreifer ein weiteres Hindernis, auf die Hash-Werte zuzugreifen, selbst wenn sich herausstellte, dass eine Passwort-Hash-Funktion schwächer als erwartet war oder wenn jemand anfangs ein schwaches Passwort hatte. Es war nicht mehr für alle frei.

Diese Datei ist / etc / shadow.

Die Software, die mit / etc / shadow zusammenarbeitet, ist in der Regel sehr klein, stark fokussiert und wird aufgrund des potenziellen Problems bei Überprüfungen häufig genauer untersucht. Es wird auch mit speziellen Berechtigungen ausgeführt, mit denen es / etc / shadow lesen und ändern kann, während normale Benutzer diese Datei nicht einsehen können.

Nun haben Sie es geschafft: Die Berechtigungen für / etc / shadow sind restriktiv (obwohl, wie bereits erwähnt, nicht ganz so restriktiv, wie Sie angegeben haben), da der gesamte Zweck dieser Datei darin besteht, den Zugriff auf vertrauliche Daten einzuschränken.

Ein Passwort-Hash sollte sicher sein, aber wenn Ihr Passwort in den Top 500-Passwörtern der Internetlisten aufgeführt ist, kann jeder, der Zugriff auf den Hash hat, das Passwort schnell finden. Das Schützen des Hashs verhindert diesen einfachen Angriff und legt die Messlatte für einen erfolgreichen Angriff höher, vom einfachen Spähen bis hin zum Erfordernis, dass einer entweder bereits ein Systemadministrator auf dem Host ist oder zuerst einen Eskalationsangriff durchläuft. Insbesondere auf einem ordnungsgemäß verwalteten Mehrbenutzersystem ist beides erheblich schwieriger als das Anzeigen einer weltweit lesbaren Datei.

ein CVn
quelle
Ich mag die Art, wie Sie alles beschreiben :) (y)
Shubhanshu Vishwakarma
Terminologie / Etymologie: /etc/shadowenthält keine "Shadow-Passwörter" (da dies keine Sache ist). Die ganze Datei ist ein Schatten von /etc/passwd. Sehen Sie, wie die Terminologie im Linux Shadow Password verwendet wird. HOWTO : Warum Ihre passwd-Datei spiegeln ? . Im Gegensatz zu einigen anderen Verwendungen des Begriffs „Schatten“ in der Berechnung, dann ist es keine Schattenkopie , obwohl (wie Shadowing BIOS - Code in dem RAM anstelle von ROM ausgeführt wird ). Das Feld in / etc / passwd ist ein Platzhalter, der ein Sonderzeichen enthält, das bedeutet, dass sich der echte Passwort-Hash in / etc / shadow befindet.
Peter Cordes
Gute Geschichte, aber 1 Sek. pro Passwort war auch in den 1980er Jahren kaum einschränkend, nicht wenn die Top-Passwörter von jeweils mehr als 1% der Menschen verwendet wurden.
Warren Dew
1
@WarrenDew Ich bin mir nicht sicher, ob Sie eine Tatsachenfeststellung oder eine Meinung abgeben. crypt () hat eine 12-Bit-Salt- und 12 + 64-Bit-Ausgabe für ein 8-Byte-Passwort (dann üblicherweise base64-codiert). Bei gängigen Passwörtern könnte man sie wahrscheinlich mit brachialer Gewalt angreifen, aber es war nicht so viel eines Passworts nötig, um das Knacken mit brachialer Gewalt unmöglich zu machen, wenn jede Passwortprüfung eine Sekunde dauerte. Das Vorberechnen einer gesalzenen Tabelle für nur ein einziges Kennwort würde eine Stunde dauern, und zwar mit einer Verschlüsselung pro Sekunde. Außerdem musste man sich mit begrenztem Speicher auseinandersetzen (40-80 MB waren in jenen Tagen viel).
ein Lebenslauf vom
@ PeterCordes Guter Punkt. Ich lösche diese Passage, weil sie für die Beantwortung der Frage des OP wirklich nicht besonders relevant ist.
ein Lebenslauf vom
10

Warum ist die Berechtigung für die Datei / etc / shadow auf 600 festgelegt?

Wer hat dir das gesagt?

$ls -l /etc/shadow
-rw-r----- 1 root shadow 1407 mei 18 10:05 /etc/shadow
  • es ist 640.

Einfache Antwort: Berechtigungen in Linux werden ernst genommen. Es gibt keinen Grund für "andere", etwas damit zu tun /etc/shadow. Und es gibt keinen Grund für die Gruppe "Schatten", darauf zu schreiben. Und die Ausführung ist nicht in der richtigen Reihenfolge.

Da jedoch alle darin enthaltenen Kennwörter nicht als Klartext, sondern als Hashes gespeichert sind (was bedeutet, dass das ursprüngliche Kennwort nicht aus dem Hash berechnet werden kann), warum kann es nicht von allen gelesen werden?

Weil es keinen einzigen Grund dafür gibt.

Hashes sind Einbahnstraßen. Wenn Sie jemandem Lesezugriff gewähren, kann er ein Skript verwenden, um diese Einbahnstraße zu missbrauchen: Führen Sie einfach ein beliebiges Wort auf, das Sie sich vorstellen können, und erstellen Sie den Hash. Irgendwann könnte es mit dem Passwort übereinstimmen. Könnte aber auch eine Weile dauern.

Diese Antwort ist interessant und enthält einige Schätzungen zum Thema Brute Forcing.

Rinzwind
quelle
640 ist für normale Benutzer? Gruppenbenutzer kann Shadow-Datei lesen?
Shubhanshu Vishwakarma
Es tut uns leid? Die Datei ist 640. Lesen Sie also, schreiben Sie für den Benutzer "root" und lesen Sie für die Gruppe "shadow". "shadow" ist eine vom privilegierten System erstellte Gruppe für diesen speziellen Zweck.
Rinzwind
2

Wichtiger Hintergrund: /etc/shadowBesteht ausschließlich zum Zweck, die Passwort-Hashes verborgen zu halten. In den frühen Tagen von Unix wurden Passwort-Hashes in gespeichert /etc/passwd. Je leistungsfähiger die Computer wurden, die Netzwerkverbindungen beständiger wurden und die Sicherheitsanstrengungen immer ausgefeilter wurden, umso schwieriger wurde es, Kennwort-Hashes wortlesbar zu halten. (Auf die Exploits werde ich nicht näher eingehen; dazu gibt es bereits genügend gute Antworten.)

Konnte /etc/passwdaber nicht lesegeschützt werden: Es wird von allen Arten von Programmen verwendet, um Benutzernamen numerische Benutzer-IDs zuzuordnen und Home-Verzeichnisse, Standard-Shells, den vollständigen Namen des Benutzers (und die Büronummer usw. - Auschecken man finger) nachzuschlagen. . Also wurde der vertrauliche Teil, der Passwort-Hash, verschoben /etc/shadowund der Rest blieb wie er war. Aus diesem Grund /etc/passwdenthält der Name trotz allem außer dem (gehashten) Passwort.

alexis
quelle
Vielen Dank für Ihre Antwort auf meine Frage, jetzt habe ich eine vollständige Vorstellung von / etc / passwd und / etc / shadow file.
Shubhanshu Vishwakarma