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!root
haben Sierw-
Berechtigungen für (fast) jede Datei, und um diex
Berechtigung zu erhalten,x
muss das Bit entweder für Benutzer-, Gruppen- oder andere Berechtigungen für die Datei festgelegt werden. Aber was ist mit den Verzeichnissen,root
haben Sierwx
Berechtigungen für ein beliebiges Verzeichnis (auch wenn ein Verzeichnis überhaupt keine Berechtigungen hat (----------
))?CAP_DAC_OVERRIDE
erlaubt das Überschreiben aller Verzeichnisberechtigungen, so dass Sie Verzeichnisse lesen, schreiben und darauf zugreifen können (dh den Inhalt auflisten, Dateien erstellen und die Verknüpfung aufheben). Der Kommentar, den ich über exec-Bit zitiert habe, ist (nur) im Kontext von Dateien.Das ist genau so, wie Sie es für 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 die Attribute wie hier erklärt ändern : chattr . Dies ist 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.
quelle
Der
myFile.txt
wird erhalten vonchmod 000 myFile.txt
.---------
bedeutet, es gibt keine Berechtigung für Benutzer, Gruppen und andere.Der Root-Benutzer kann diese Datei uneingeschränkt ä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)
quelle
Der Ausführungsmodus wird etwas anders behandelt als die anderen Modi.
Lese- und Schreibberechtigungen werden verwendet, um Sicherheitsrichtlinien durchzusetzen. Der
root
Benutzer ist im Allgemeinen immun gegen Sicherheitsbeschränkungen (es gibt einige Ausnahmen, wie unveränderliche Dateien, und moderne Funktionen, wie Funktionen, machen dies feiner), weshalb ein anderer Name für dieses Konto der "Superuser" ist.Ausführungsberechtigung ist eher ein Beratungsmodus, zu unterscheiden , ob die Datei sollte ausführbar sein oder nur Daten. Aus diesem Grund befolgt es auch der Root-Benutzer - es macht keinen Sinn, eine Datendatei auszuführen. Wenn keine der Ausführungsberechtigungen festgelegt ist, kann root die Datei nicht ausführen. Wenn einer von ihnen gesetzt ist, kann er. Da root auch die Berechtigung hat, Dateiberechtigungen zu ändern, kann das Konto eine Datei auf Wunsch ausführbar machen (es sei denn, das Dateisystem ist schreibgeschützt).
Übrigens sind Skripte ein interessanter Fall. Skripte sind Datendateien für den jeweiligen Interpreter. Wenn das Skript eine
#!
Zeile enthält, können Sie sie als Programm ausführen. Der im shebang genannte Interpreter wird mit dem Skriptdateinamen als Argument ausgeführt. Dies wird jedoch nur durchgeführt, wenn die Ausführungsberechtigung festgelegt ist. Andererseits können Sie den Interpreter auch direkt ausführen, z/bin/bash scriptname
. Dolmetscher kümmern sich nur darum, ob sie die Datei lesen können, sie überprüfen nicht die Ausführungsberechtigungen.quelle
Lassen Sie sich theoretisch erklären.
Wenn eine Datei oder ein Verzeichnis eine Berechtigung wie X zum Ausführen hat, aber nichts anderes und jemand wie Steve Benutzer die Datei besitzt, kann root die Datei auch ausführen.
Denken Sie immer daran, dass in Linux root alles möglich ist und es keine Einschränkungen für root gibt.
quelle