Kann Superuser in schreibgeschützte Dateien schreiben?


11

Ich bin auf überraschendes (für mich) Berechtigungsverhalten bei FreeBSD gestoßen. Angenommen, ich arbeite als Nicht-Root- Benutzer. Ich erstelle eine Datei, setze ihre Berechtigung auf schreibgeschützt und versuche dann, in sie zu schreiben:

$ touch f
$ chmod 400 f
$ ls -l f
-r--------  1 user  wheel  f
$ echo a >> t
t: Permission denied.

So weit, ist es gut. Jetzt mache ich dasselbe wie root und es schreibt in die Datei:

# ls -l f2
-r--------  1 root  wheel  f2
# echo a >> f2
# echo $?
0

Ist es ein Fehler oder ein beabsichtigtes Verhalten? Kann ich davon ausgehen, dass dies unter Unix und Linux so funktioniert?


Jeder Benutzer mit CAP_DAC_OVERRIDEkann dies tun. Auf fast allen Linux-Systemen bedeutet dies, dass root dies tun kann, so dass dies beabsichtigt ist. Ich kann nicht für den FreeBSD-Teil sprechen, aber ich würde mir vorstellen, dass sie ein ähnliches Setup haben.
Bratchley

1
Der Grund, warum root IMMER in eine Datei schreiben kann, liegt darin, dass auf herkömmlichen Unix-Dateisystemen (ext4, zfs usw.) Dateiberechtigungen Teil der Datei sind. Wenn root also nicht in eine Datei schreiben kann, kann NIEMAND die schreibgeschützte Datei wieder beschreibbar machen, da chmodsie nicht in die Datei schreiben kann.
Slebetman

1
@slebetman Sie benötigen keinen Schreibzugriff auf eine Datei, um die Berechtigungen zu aktualisieren. Versuchen Sie es einfach touch somefile; chmod 0000 somefile; chmod 0644 somefileals normaler Benutzer.
user253751

@immibis: Das besitzt du. Root muss in der Lage sein, Berechtigungen für Dateien zu ändern, die es nicht besitzt
slebetman

@slebetman Ja ... aber Sie haben über das Ändern von Berechtigungen für Dateien gesprochen, in die Sie nicht schreiben können, und nicht über das Ändern von Berechtigungen für Dateien, die Sie nicht besitzen.
user253751

Antworten:


13

Es ist normal root, Berechtigungen auf diese Weise überschreiben zu können.

Ein weiteres Beispiel ist rootdas Lesen einer Datei ohne Lesezugriff:

$ echo hello > tst
$ chmod 0 tst
$ ls -l tst
---------- 1 sweh sweh 6 Aug 16 15:46 tst
$ cat tst
cat: tst: Permission denied
$ sudo cat tst
hello

Einige Systeme haben das Konzept unveränderlicher Dateien. zB auf FreeBSD:

# ls -l tst
-rw-r--r--  1 sweh  sweh  6 Aug 16 15:50 tst
# chflags simmutable tst
# echo there >> tst
tst: Operation not permitted.

Jetzt rootkann nicht einmal in die Datei schreiben. Aber natürlich rootkann entfernen die Flagge:

# chflags nosimmutable tst
# echo there >> tst
# cat tst
hello
there

Mit FreeBSD können Sie noch einen Schritt weiter gehen und ein Kernel-Flag setzen, um zu verhindern, rootdass das Flag entfernt wird:

# chflags simmutable tst
# sysctl kern.securelevel=1
kern.securelevel: -1 -> 1
# chflags nosimmutable tst
chflags: tst: Operation not permitted

Jetzt kann niemand, nicht einmal rootdiese Datei ändern.

(Das System muss neu gestartet werden, um die Sicherheitsstufe zu verringern.)


Wie ist ein Neustart eine wirksame Sicherheitsmaßnahme? Wenn root root ist und alles kann, warum sollte man dann überhaupt versuchen, root daran zu hindern, das zu tun, was root will?
Katze

1
Auf einem sicheren System ist root nicht gottähnlich. FreeBSD Securelevel ist ein kleiner Versuch, die Wurzel weniger gottähnlich zu machen. Securelevel kann in der Systemkonfiguration standardmäßig auf 1 gesetzt werden, damit es auch nach einem Neustart aktiv bleibt. Dann würde es Konsolenzugriff und Einzelbenutzermodus benötigen, und das ist sehr manipulationssicher. Es gibt einen ganzen Aufsatz über Unix-Sicherheit, der für ein SE-Kommentarfeld viel zu viel ist, aber wir versuchen, von einem "Root hat alle Zugriff" -Modell zu etwas nuancierterem überzugehen. Wir versuchen, dies nach Möglichkeit durchzusetzen (z. B. Sicherheitsstufe) und festzustellen, wo dies nicht der Fall ist (Beweise neu starten, Prüfpfade).
Stephen Harris

4
FWIW, in Linux chattr +i tstsetzt unveränderlich Attribut.
Ruslan

3

Ja, das ist sehr normal. root hat keine Grenzen für Lesen / Schreiben (mit sehr wenigen Ausnahmen), da er der Root ist.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.