Was sind Dateiberechtigungen in Linux und wie stelle ich sicher, dass meine sicher sind?

0
182

Unter Linux bestimmen Dateiberechtigungen die Berechtigungsstufen für Dateibesitzer und alle anderen anders. Es ist wichtig, sicherzustellen, dass die Berechtigungen für alle Dateien mit Webzugriff korrekt festgelegt sind, damit ein kompromittierter Prozess nicht an Orte schreiben kann, an denen er nicht schreiben sollte.

Was sind Dateiberechtigungen?

Dateiberechtigungen verfolgen die Berechtigungen für drei verschiedene Gruppen. Jede Gruppe wird durch drei Bits dargestellt:

  • r: Die “Read” Berechtigung erlaubt einem Prozess, den Inhalt dieser Datei in den Speicher zu lesen.
  • w: Die “Schreiben” Berechtigung gibt einem Prozess Zugriff, um den physischen Speicherort auf der Festplatte zu überschreiben, auf dem diese Datei gespeichert ist.
  • x: Die “Execute” Berechtigung ist für Programme und ermöglicht die Ausführung dieser Datei.

Im Terminal werden Berechtigungen wie folgt angezeigt:

Das erste “d” gibt an, ob die Datei ein Verzeichnis ist. Die erste Dreiergruppe ist für den Dateibesitzer. In diesem Fall hat der Dateibesitzer vollen Lese-, Schreib- und Ausführungszugriff. Die nächste Dreiergruppe ist “Gruppenbesitzer” Dies bezeichnet die Zugriffsrechte für die Gruppe, zu der die Datei gehört, in diesem Fall schreibgeschützt. Die nächste Gruppe sind alle anderen, die schreibgeschützt sind.

Im Allgemeinen werden Dateien mit offenem “jeder” Berechtigungen sind nicht sehr sicher. Stellen Sie sicher, dass die letzte Gruppe für die meisten Dateien auf schreibgeschützt oder keinen Zugriff eingestellt ist.

Unter der Haube werden diese binär gespeichert, wobei jede Berechtigung ein Bit repräsentiert. rw- ist beispielsweise 110 im Binärformat, was 6 im Dezimalformat entspricht. Also die Berechtigungszeichenfolge:

rwxrw-r– Werbung

…könnte als “764 gespeichert werden.” Dateiberechtigungen werden oft auf diese Weise bezeichnet; “777” bezeichnet vollen Zugriff, “700” ist privat, “644” ist schreibgeschützt. Technisch wird dies als oktal und nicht als dezimal bezeichnet, da es acht mögliche Werte für jede Ziffer gibt.

Für Verzeichnisse verwenden die Berechtigungen dieselben Zeichen, sind jedoch etwas unterschiedlich:

  • r: Listenberechtigung. Ermöglicht das Öffnen des Verzeichnisses und die Verwendung von ls. Erfordert das Setzen des x-Attributs.
  • w: Schreibberechtigung. Ermöglicht das Erstellen neuer Dateien, das Löschen von Dateien und das Umbenennen von Dateien. Verhindert nicht, den Inhalt vorhandener schreibgeschützter Dateien innerhalb des Verzeichnisses zu ändern.
  • x:Begehbarkeit. Ermöglicht die Verwendung von CDs. Dies wird systemweit respektiert und verhindert, dass der Ordner in einem GUI-Datei-Explorer geöffnet wird.

Auf einigen Systemen, insbesondere macOS, kann ein “@” nach der Dateiberechtigungszeichenfolge. Dies bedeutet, dass die Datei erweiterte Attribute hat, die Sie mit ls -l@ überprüfen können. Beispielsweise wird das Attribut com.apple.quarantine ausführbaren Dateien zugewiesen, die noch nicht geöffnet wurden, sodass Gatekeeper Sie daran hindern kann, darauf zu doppelklicken, Sie mit der rechten Maustaste auf > öffnen und Sie dann unnötigerweise auffordern, wenn Sie wirklich sicher sind, dass Sie sie öffnen möchten.

Was sind Dateiinhaber und Gruppen?

Der Dateiinhaber ist nur ein bestimmter Benutzer, aber Benutzer in Unix-Systemen arbeiten nicht auf die gleiche Weise wie in Windows. Unix kann unterschiedliche Nutzer für einzelne Prozesse wie mysql und nginx haben. Dadurch können Berechtigungen sehr detailliert werden; Beispielsweise kann eine MySQL-Instanz, die unter dem mysql Nutzer ausgeführt wird, auf ihre eigene Datenbank zugreifen, der nginx-Nutzer jedoch nicht.

Benutzergruppen funktionieren auf ähnliche Weise, unterstützen jedoch mehrere Benutzer mit denselben Berechtigungen. Benutzer können der Gruppe hinzugefügt und aus ihr entfernt werden, und sie können optional Dateiberechtigungen festlegen.

Überprüfen der Dateiberechtigungen von Verzeichnissen

Sie können Datei- und Verzeichnisberechtigungen anzeigen, indem Sie ls -l in Ihrem Terminal ausführen. Dateiberechtigungen werden ganz rechts angezeigt:

Werbung

Wenn Sie die Dateiberechtigungen für eine bestimmte Datei oder ein bestimmtes Verzeichnis anzeigen möchten, müssen Sie die ls-Ausgabe an grep weiterleiten:

ls -la | grep filename

Beachten Sie, dass die Berechtigungen des aktuellen Ordners und des übergeordneten Ordners als . und .. bei Verwendung des Flags -a. Allerdings werden auch hier nur zwei Berechtigungsstufen angezeigt. Um Berechtigungen für jeden übergeordneten Ordner anzuzeigen, müssen Sie den Befehl namei verwenden:

namei -l `pwd`

Dieser Befehl ist möglicherweise nicht auf jeder Linux-Distribution installiert. Unter macOS müssen Sie es von brew installieren.

Um in diesen Ordnern nach einzelnen Dateien mit möglicherweise fehlerhaften Berechtigungen zu suchen, können Sie den Befehl find mit dem Flag -perm verwenden:

find ~ -type f -perm 777

Dies sucht rekursiv und kann einige Zeit dauern, wenn Sie es im Stammverzeichnis ausführen.

So ändern Sie Dateiberechtigungen und Eigentum

Das Ändern von Dateiberechtigungen ist mit dem chmod-Befehl ganz einfach:

chmod 700 filename

Sie können auch Berechtigungen hinzufügen, ohne eine vollständige Berechtigungszeichenfolge anzugeben. Dies ist eine Verknüpfung, die jedoch einige Zeit sparen kann. Wenn Sie beispielsweise eine Skriptdatei nicht öffnen können, können Sie dem Eigentümer die Berechtigung zum Ausführen hinzufügen mit:

chmod u+x Dateiname Werbung

Dadurch wird die Berechtigung zum Ausführen (x) hinzugefügt für den aktuellen Besitzer (u, für “Benutzer”).

Ändern des Besitzers funktioniert ähnlich mit dem chown Befehl:

chown owner:group filename

Der &#8220 ;:Gruppe” es ist optional. Sowohl chmod als auch chown können rekursiv für Verzeichnisse ausgeführt werden, um die Dateiberechtigungen für alles in diesen Verzeichnissen zu ändern. Verwenden Sie dazu das Flag -R in Großbuchstaben:

chmod 700 -R directory

Sie können chmod auch als Option -exec für find verwenden, mit der Sie Dateiberechtigungen im gesamten System ändern können. Dieser Befehl findet beispielsweise Dateien mit Schreibberechtigungen zum Öffnen und setzt sie auf schreibgeschützt:

find/-type f -perm 777 -print -exec chmod 744 {} ;