Der privilegierte Zugriff auf Dateien und Verzeichnisse wird tatsächlich von den Funktionen bestimmt, nicht nur vom Sein root
oder Nichtsein . In der Praxis hat in der root
Regel alle möglichen Funktionen, aber es gibt Situationen, in denen alle / viele von ihnen fallengelassen oder einige an andere Benutzer (deren Prozesse) übergeben werden könnten.
In Kürze haben Sie bereits beschrieben, wie die Zugriffssteuerungsprüfungen für einen privilegierten Prozess funktionieren. So wirken sich die verschiedenen Funktionen tatsächlich aus:
Die Hauptfunktion besteht darinCAP_DAC_OVERRIDE
, dass ein Prozess "das Lesen, Schreiben und Ausführen von Berechtigungsprüfungen von Dateien umgehen" kann. Dazu gehört das Lesen und Schreiben von Dateien sowie das Lesen, Schreiben und Zugreifen auf Verzeichnisse.
Dies gilt nicht für die Ausführung von Dateien, die nicht als ausführbar markiert sind. Der Kommentar ingeneric_permission
( fs/namei.c
), bevor der Zugriff nach Dateien sucht, besagt dies
Lese- / Schreib-DACs können immer überschrieben werden. Ausführbare DACs können überschrieben werden, wenn mindestens ein Ausführungsbit gesetzt ist.
Der Code überprüft, x
ob mindestens ein Bit gesetzt ist, wenn Sie versuchen, die Datei auszuführen. Ich vermute, dass dies nur eine Annehmlichkeitsfunktion ist, um zu verhindern, dass zufällige Datendateien versehentlich ausgeführt werden und Fehler oder ungewöhnliche Ergebnisse auftreten.
Auf jeden Fall können Sie, wenn Sie Berechtigungen überschreiben können, einfach eine ausführbare Kopie erstellen und diese ausführen. (Obwohl dies theoretisch einen Unterschied für setuid-Dateien eines Prozesses bedeuten könnte, konnten die Dateiberechtigungen ( CAP_DAC_OVERRIDE
) außer Kraft gesetzt werden , es gab jedoch keine anderen verwandten Funktionen ( CAP_FSETID
/ CAP_FOWNER
/ CAP_SETUID
). Das CAP_DAC_OVERRIDE
Bearbeiten /etc/shadow
und ähnliches ist jedoch ungefähr gleich.) auf jeden Fall nur vollen Root-Zugriff zu haben.)
Es gibt auch die CAP_DAC_READ_SEARCH
Möglichkeit, beliebige Dateien zu lesen und auf beliebige Verzeichnisse zuzugreifen, diese jedoch nicht auszuführen oder in sie zu schreiben. Auf CAP_FOWNER
diese Weise kann ein Prozess Dinge erledigen, die normalerweise nur dem Dateieigentümer vorbehalten sind, z. B. das Ändern der Berechtigungsbits und der Dateigruppe.
Das Überschreiben des Sticky-Bits in Verzeichnissen wird nur unter erwähnt. CAP_FOWNER
Es scheint also CAP_DAC_OVERRIDE
nicht genug zu sein, um dies zu ignorieren. (Es würde Ihnen die Schreibberechtigung geben, aber normalerweise haben Sie in klebrigen Verzeichnissen sowieso diese Berechtigung und +t
begrenzen sie.)
(Ich denke, spezielle Geräte zählen hier als "Dateien". Zumindest gibt es generic_permission()
nur eine Typprüfung für Verzeichnisse, aber ich habe nicht außerhalb davon geprüft.)
Natürlich gibt es immer noch Situationen, in denen Ihnen selbst Funktionen nicht dabei helfen, Dateien zu ändern:
- Einige Dateien in
/proc
und /sys
, da sie nicht wirklich aktuelle Dateien sind
- SELinux und andere Sicherheitsmodule, die root einschränken könnten
chattr
unveränderlich +i
und füge nur +a
Flags an ext2 / ext3 / ext4 an, die beide sogar root stoppen und auch das Umbenennen von Dateien usw. verhindern.
- Netzwerk-Dateisysteme, in denen der Server seine eigene Zugriffskontrolle durchführen kann, z. B.
root_squash
in NFS, ordnet root niemandem zu
- FUSE, von dem ich annehme, dass es alles kann
- Nur-Lese-Bereitstellungen
- schreibgeschützte Geräte
capabilities(7)
Manpage gespiegelt zu sein scheint - erwägen Sie, einen Fehlerbericht einzureichen!