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)