Wie funktionieren Dateiberechtigungen für den Benutzer "root"?

27

Ich habe folgende Datei:

---------- 1 Steve Steve 341 2017-12-21 01:51 myFile.txt

Ich habe den Benutzer rootim Terminal auf umgestellt und die folgenden Verhaltensweisen festgestellt:

  • Ich kann diese Datei lesen und darauf schreiben.

  • Ich kann diese Datei nicht ausführen.

  • Wenn ich das xBit in den Benutzerberechtigungen ( ---x------) oder den Gruppenberechtigungen ( ------x---) oder den anderen Berechtigungen ( ---------x) der Datei festlegen würde, könnte ich diese Datei ausführen.

Kann mir jemand erklären oder mich auf ein Tutorial verweisen, in dem alle Regeln erläutert werden, die gelten, wenn der rootBenutzer mit Dateien und Verzeichnissen arbeitet?

Steve
quelle

Antworten:

38

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
ilkkachu
quelle
Überraschend, dass der Quelldateikommentar nicht in der capabilities(7)Manpage gespiegelt zu sein scheint - erwägen Sie, einen Fehlerbericht einzureichen!
Toby Speight
@ilkkachu Wie gezeigt wurde, roothaben Sie rw-Berechtigungen für (fast) jede Datei, und um die xBerechtigung zu erhalten, xmuss das Bit entweder für Benutzer-, Gruppen- oder andere Berechtigungen für die Datei festgelegt werden. Aber was ist mit den Verzeichnissen, roothaben Sie rwxBerechtigungen für ein beliebiges Verzeichnis (auch wenn ein Verzeichnis überhaupt keine Berechtigungen hat ( ----------))?
Joseph
@Joseph CAP_DAC_OVERRIDEerlaubt 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.
Ilkkachu
11

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.

Kevin Lemaire
quelle
Es ist möglich, dass Dateien, die root nicht schreiben oder löschen kann. Also "Root-Benutzer kann auf jede Datei im System zugreifen." ist falsch.
Lukas Boersma
Du meinst wie schreibgeschütztes Dateisystem? oder hast du einen anderen fall
Kevin Lemaire
1
Ich spreche von Fällen wie diesen: nicht beschreibbare Dateien , nicht löschbare Dateien
Lukas Boersma
5

Der myFile.txtwird erhalten von 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, 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)

GAD3R
quelle
2

Der Ausführungsmodus wird etwas anders behandelt als die anderen Modi.

Lese- und Schreibberechtigungen werden verwendet, um Sicherheitsrichtlinien durchzusetzen. Der rootBenutzer 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.

Barmar
quelle
1

Lassen Sie sich theoretisch erklären.

root user ist der König des Betriebssystems.

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.

Hassan Sohail
quelle
Garnichts. Wenn eine Datei zum Beispiel ein unveränderliches Attribut hat, kann es auch root nicht ändern (es sei denn, er entfernt dieses Attribut ausdrücklich).
Ruslan
@ Ruslan ja, aber es ist zu viel Ausnahmefall, dass er neu ist, also erkläre ich ihn als grundlegend, standardmäßig treten diese Attribute nicht auf.
Hassan Sohail