Der privilegierte Zugriff auf Dateien und Verzeichnisse wird tatsächlich von den Funktionen bestimmt, nicht nur vom Sein rootoder Nichtsein . In der Praxis hat in der rootRegel 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, xob 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_OVERRIDEBearbeiten /etc/shadowund ähnliches ist jedoch ungefähr gleich.) auf jeden Fall nur vollen Root-Zugriff zu haben.)
Es gibt auch die CAP_DAC_READ_SEARCHMöglichkeit, beliebige Dateien zu lesen und auf beliebige Verzeichnisse zuzugreifen, diese jedoch nicht auszuführen oder in sie zu schreiben. Auf CAP_FOWNERdiese 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_FOWNEREs scheint also CAP_DAC_OVERRIDEnicht 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 +tbegrenzen 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
/procund /sys, da sie nicht wirklich aktuelle Dateien sind
- SELinux und andere Sicherheitsmodule, die root einschränken könnten
chattrunveränderlich +iund füge nur +aFlags 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_squashin 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!