Schreiben/Loeschen von fremden Dateien im Home-Verzeichnis

Post Reply
Message
Author
rob

Schreiben/Loeschen von fremden Dateien im Home-Verzeichnis

#1 Post by rob »

Hi!

Vor kurzem ist mir aufgefallen, dass ich als normaler User in meinem Home-Verzeichnis fremde Dateien verschieben/umbenennen, "beschreiben" und sogar loeschen kann.

Eigentlich wollte ich mich ja vor mir selbst schuetzen indem ich eine verschluesselte Loopdevice-Datei dem root zuordne und mir als User nur noch Leserechte zum mounten gebe. Ein versehentliches Loeschen wuerde schliesslich in wenigen Sekunden zum Verlust aller ach so schuetzenswerter Daten fuehren.
Und dann ist es doch passiert! Ein unbedachter 'Klick' auf die Loeschen-Taste und das Teil war weg. Zum Glueck gibt's ja noch den Muelleimer in Gnome!

Das hat mich neugierig gemacht und ich hab ein bisschen rumprobiert. In meinem Home-Verzeichnis darf ich wohl jede fremde Datei loeschen oder umbenennen.
Noch was hat mich verbluefft:

Code: Select all

root@rob rob # touch nichtDeins
root@rob rob # chmod 000 nichtDeins
root@rob rob # ls -la nichtDeins
----------  1 root root 0  8. Apr 15:28 nichtDeins
root@rob rob # exit
exit
rob@rob rob $ vim nichtDeins
rob@rob rob $ ls -lah nichtDeins
----------  1 rob users 5  8. Apr 15:29 nichtDeins
rob@rob rob $ chmod 755 nichtDeins
rob@rob rob $ cat nichtDeins
doch
rob@rob rob $
vim hab ich mit :wq! die Datei geschrieben und vim beendet. Somit waere die Datei wohl annektiert.

Probiert hab ich das auf Debian Woody und Gentoo.
Kann mir jemand nen Tipp geben wie sich dieses Verhalten nennt, und evt wo ich es ein- und, ungleich wichtiger, abstellen kann?

Danke schonmal,
Robert

User avatar
jochen
prolinux-forum-admin
Posts: 699
Joined: 14. Jan 2000 15:37
Location: Jülich
Contact:

#2 Post by jochen »

Hi,

das Wichtigste zuerst: Das Verhalten ist ein Feature, kein Bug! Daher kann man es auch nicht abstellen, wenn man nicht aus Spezialfeatures von ext2/3 oder auf ACLs zurückgreifen will.

Unter Linux/UNIX wird eine Datei im Dateisystem durch seine sog. I-Node eindeutig definiert. Diese enthält Informationen über die Datei: Typ der Datei, Zugriffsrechte, Eigentümerschaft, Gruppenzugehörigkeit, Spericherort der eigentlichen Daten, Zeitstempel u.v.a.m.

Was diese Datei aber nicht speichert, ist der Dateiname. Dazu gibt es Verzeichnisse, die man sich vereinfacht als Tabellen vorstellen kann, in denen Dateinamen den entsprechenden Inode-Nummern zugewiesen werden. Dieist wichtig: Ein Verzeichnis ist eine spezielle Datei, die Dateinamen zu Inode-Nummern zuordnet. Das Löschen einer Datei in einem Verzeichnis kann man sich also unter anderem als ein Streichen eines solchen Tabelleneintrags aus dem Verzeichnis, in dem die Datei steht, vorstellen. Dazu benötigt man Schreibrecht auf das Verzeichnis! Das Schreibrecht auf die Datei selbst erlaubt es, den Inhalt der Datei zu verändern, hat aber nichts mit dem Löschen der Datei selbst zu tun.

Kurz & gut: Wenn Du Schreibrechte auf ein Verzeichnis besitzst, kannst Du alle dort enthaltenen Dateien mittels "rm" löschen. Außerdem kannst Du dort neue Dateien anlegen.

Dieses Verhalten macht sich der vim zu Nutze. Wenn Du nur ":w" eingibst, weigert sich der vim zu speichern. Schliesslich kann er erkennen, dass Du keine Schreibrechte auf die Datei hast. Sobald Du aber ":w!" verwendest, geht der vim anders vor. Er hat ja sowieso eine Arbeitskopie der Datei angelegt. Er löscht dann die Originaldatei und kopiert die Arbeitsdatei unter dem alten Namen unter Beibehaltung der meisten Rechte zurück. Allerdings wirst Du dadurch zwangsläufig der Eigentümer der Datei. Das kannst Du auch selbst überprüfen. Die Option "-i " beim ls-Kommando sorgt dafür, dass auch die Inode-Nummern der aufgelisteten Dateien angezeigt werden. Die Werte müssen sich zwischen der ersten Version und der zweiten Version unterscheiden!

Soweit alles klar? Als Tipp zu Deinem Problem: Leg ein Unterverzeichnis an, kopier die Imagedatei dort hinein, entziehe Dir die Schreibrechte auf dieses Unterverzeichnis und auf die dort frisch angelegte Kopie.

Jochen
Die grösste Lüge der EDV? "Mal eben..."

AlexMH

#3 Post by AlexMH »

Hi,

> Kann mir jemand nen Tipp geben wie sich dieses Verhalten nennt, und evt wo ich es ein- und, ungleich wichtiger, abstellen kann?

Abstellen kann man das nur indirekt. Unter UNIX "erbst" du Rechte, die das uebergeordnete Verzeichnis hat. Da du Besitzer deines Home-Verzeichnises bist, darfst du auch alle Dateien loeschen, sogar wenn sie dir gar nicht gehoeren. Allerdings geht diese Vererebung immer nur ueber eine Ebene.

Legst du zum Beispiel in deinem Home-Verzeichnis ein weiteres Directory an, welches root gehoert, dann duerftest du das Verzeichnis ersteinmal loeschen, selbst wenn du selber keine Schreibrechte drauf hast.
Wenn allerdings innerhalb dieses neuen Verzeichnisses eine Datei liegt, die root gehoert und auf die du keinerlei Schreibrechte hast (auch nicht ueber das uebergeordnete Verzeichnis), dann kannst du diese Datei nicht loeschen und somit auch nicht das Verzeichnis, selbst wenn es in deinem Home-Verzeichnis liegt. Deine Home-Verzeichnis Rechte werden also nicht weiter nach unten vererbt.

Beispiel:
cd ~
su root
mkdir test
chmod 755 test
exit
rm -Rf test

In diesem Fall kannst du das Verzeichnis loeschen, da dir dein Home-Verzeichnis gehoert - obwohl du keine Rechte auf 'test' hast (chmod 755).

In diesm Fall kannst du aber nix loeschen:
cd ~
su root
mkdir test
chmod 755 test
touch test/noaccess
chmod 644 test/noaccess
exit
rm -Rf test

Wenn also innerhalb von 'test' eine Datei liegt, die dir nicht gehoert und du auch keinerlei Schreibrechte auf den Ordner 'test' direkt hast, dann kannst du auch nix loeschen. Haettest du Schreibrechte auf die Datei 'noaccess', dann koenntest du auch wieder den ganzen Ordner loeschen.

Gruss,
Alex

rob

#4 Post by rob »

Prima!
Danke fuer die ausfuehrlichen Antworten, jetzt bin ich wieder ein Stueck schlauer :)

Schoenes Wochenende!

Post Reply