GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Wie funktionieren Dateiberechtigungen für den Root-Benutzer?

Der privilegierte Zugriff auf Dateien und Verzeichnisse wird tatsächlich durch Fähigkeiten bestimmt, nicht nur durch root oder nicht. In der Praxis root hat normalerweise alle möglichen Fähigkeiten, aber es gibt Situationen, in denen alle/viele von ihnen fallen gelassen oder einige anderen Benutzern (ihren Prozessen) gegeben werden könnten.

Kurz gesagt, Sie haben bereits beschrieben, wie die Zugriffskontrollprüfungen für einen privilegierten Prozess funktionieren. So wirken sich die verschiedenen Fähigkeiten tatsächlich darauf aus:

Die Hauptfähigkeit hier ist CAP_DAC_OVERRIDE , ein Prozess, der es hat, kann "Dateilese-, Schreib- und Berechtigungsprüfungen umgehen". Dazu gehören das Lesen und Schreiben beliebiger Dateien sowie das Lesen, Schreiben und Zugreifen auf Verzeichnisse.

Es gilt nicht wirklich für die Ausführung von Dateien, die nicht als ausführbar markiert sind. Der Kommentar in generic_permission (fs/namei.c ), bevor der Zugriff nach Dateien sucht, sagt das

Lese-/Schreib-DACs sind immer überschreibbar. Ausführbare DACs können überschrieben werden, wenn mindestens ein Exec-Bit gesetzt ist.

Und der Code prüft, ob es mindestens einen x gibt Bit gesetzt, wenn Sie versuchen, die Datei auszuführen. Ich vermute, dass dies nur eine Komfortfunktion ist, um zu verhindern, dass versehentlich zufällige Datendateien ausgeführt werden und Fehler oder seltsame Ergebnisse erhalten werden.

Wie auch immer, wenn Sie Berechtigungen überschreiben können, könnten Sie einfach eine ausführbare Kopie erstellen und diese ausführen. (Obwohl es theoretisch einen Unterschied für Setuid-Dateien machen könnte, war ein Prozess in der Lage, Dateiberechtigungen zu überschreiben (CAP_DAC_OVERRIDE ), hatte aber keine anderen verwandten Fähigkeiten (CAP_FSETID /CAP_FOWNER /CAP_SETUID ). Aber mit CAP_DAC_OVERRIDE ermöglicht die Bearbeitung von /etc/shadow und solche Sachen, also ist es ungefähr so, als hätte man sowieso nur vollen Root-Zugriff.)

Es gibt auch den CAP_DAC_READ_SEARCH Fähigkeit, die es ermöglicht, beliebige Dateien zu lesen und auf beliebige Verzeichnisse zuzugreifen, aber nicht auszuführen oder in sie zu schreiben; und CAP_FOWNER das erlaubt einem Prozess, Dinge zu tun, die normalerweise nur dem Dateieigentümer vorbehalten sind, wie das Ändern der Berechtigungsbits und der Dateigruppe.

Das Überschreiben des Sticky-Bits in Verzeichnissen wird nur unter CAP_FOWNER erwähnt , also scheint CAP_DAC_OVERRIDE würde nicht ausreichen, das zu ignorieren. (Es würde Ihnen eine Schreibberechtigung geben, aber normalerweise haben Sie diese in Sticky-Verzeichnissen sowieso und +t begrenzt.)

(Ich denke, spezielle Geräte zählen hier als "Dateien". Mindestens generic_permission() hat nur eine Typprüfung für Verzeichnisse, aber außerhalb davon habe ich nicht geprüft.)

Natürlich gibt es immer noch Situationen, in denen Ihnen nicht einmal Funktionen beim Ändern von Dateien helfen:

  • einige Dateien in /proc und /sys , da es sich nicht wirklich um echte Dateien handelt
  • SELinux und andere Sicherheitsmodule, die root einschränken könnten
  • chattr unveränderlich +i und hängen Sie nur +a an Flags auf ext2/ext3/ext4, die beide sogar root stoppen und auch Dateiumbenennungen usw. verhindern.
  • Netzwerkdateisysteme, bei denen der Server seine eigene Zugriffskontrolle durchführen kann, z. root_squash in NFS ordnet root niemandem zu
  • FUSE, von dem ich annehme, dass es alles tun könnte
  • schreibgeschützte Mounts
  • Nur-Lese-Geräte

Das ist genau das, was Sie bei den Standardberechtigungen bemerkt haben:

  • Lesen und schreiben:
    Standardmäßig kann der Root-Benutzer auf jede Datei im System zugreifen. Sie können diesen Zugriff entfernen, indem Sie Attribute ändern, wie hier erklärt:chattr. Dies wird dann mit Fähigkeiten verknüpft.

  • Ausführen:
    Der Root-Benutzer hat keine Ausführungsberechtigung, es sei denn, mindestens eines der Ausführungsbits ist gesetzt.


Die myFile.txt erhält man durch chmod 000 myFile.txt .

0 no permission
1 execute
2 write
3 execute + write
4 read 
5 read + execute
6 read + write
7 all

--------- bedeutet, dass es keine Berechtigung für Benutzer , Gruppe und andere gibt.

Der Root-Benutzer hat eine uneingeschränkte Fähigkeit, diese Datei zu ändern. Das Lesen/Schreiben wird gewährt. Um diese Datei auszuführen, muss der Root-Benutzer sie ohnehin ausführbar machen. (chmod 100 , 010 oder 001)


Linux
  1. So suchen Sie in der Konsole nach großen Dateien

  2. Linux – So legen Sie Standard-Dateiberechtigungen für alle Ordner/Dateien in einem Verzeichnis fest

  3. Wie funktionieren die Interna von Sudo?

  4. Wie werden Standard-Dateiberechtigungen für alle Ordner/Dateien in einem Verzeichnis festgelegt?

  5. Wie erzwinge ich bestimmte Berechtigungen für neue Dateien/Ordner auf dem Linux-Dateiserver?

So ändern Sie die Dateiberechtigungen in Linux rekursiv

So entpacken Sie die gz-Dateien unter Linux

Wie kann ich die Berechtigungen meiner Dateien korrigieren?

Wie deaktiviere ich die SSH-Anmeldung für den Root-Benutzer in Linux?

Wie schreibe ich Dateien auf einen USB-Stick, ohne root zu sein?

Wie richte ich Linux-Berechtigungen für den WWW-Ordner ein?