vi

Post Reply
Message
Author
linax

vi

#1 Post by linax »

Ich habe ein Problem mit vi(vim).
Und zwar kann ich auch wenn ich nur ein Leserecht auf eine Datei habe und die Datei öffne und etwas hineinschreibe das Schreiben
in die Datei erzwingen mit wq!.Dann ändert der vi erstmal das Besitzrecht der Datei auf meinen Usernamen und dann kann er natürlich auch die Datei schreiben.Wohl gemerkt mache ich das nicht als root und nur mit einen Leserecht auf diese Datei.Das darf doch nicht möglich sein! Habe ich da einen Denkfehler oder etwas übersehen oder darf das der vi
wirklich machen ?
Wer kann mir helfen ?

Andre

Re: vi

#2 Post by Andre »

hi,
kann es sein das die user-"gruppe" schreibrechte auf diese datei hat?

cu,
Andre

linax

Re: vi

#3 Post by linax »

Nein eben nicht.Die Gruppe users hat nur ein Leserecht!
Probier es doch mal aus.Damit ich weiß das ich nicht der Einzige bin bei dem das funktioniert.

Jochen

Re: vi

#4 Post by Jochen »

Die Sache ist recht einfach: Du hast Schreibrecht in dem Verzeichnis, in dem die Datei steht, nicht? Der vi arbeitet nämlich nicht direkt auf der Original-Datei, sondern auf einer Kopie davon. Erst wenn Du die Änderungen sichern willst, schreibt der vi die Arbeitskopie über das Original. Wenn Du kein Schreibrecht hast, musst Du das Überschreiben explizit anfordern (mit ":w!", wie Du ja selber gemerkt hast). Und dabei löscht er eben die Originaldatei und kopiert die geänderte Kopie an die Stelle, wo die alte Datei stand. (Natürlich gibt er auch Acht auf Zugriffsrechte usw.) Dazu benötigt er nirgends Schreibrecht auf die Datei, sondern lediglich Schreibrecht auf das Verzeichnis, in dem die Datei steht. Also geht alles mit rechten Dingen zu.

Jochen

Chris

Re: vi

#5 Post by Chris »

Hab's gerade mal getestet...

<blockquote><hr>
root@linux:/tmp # vi blabla
roow@linux:/tmp # ls -ltra blabla
-rw-r--r-- 1 root root 5 Apr 25 20:22 blabla
linux:/tmp # su - chris
chris@linux:/tmp> ls -ltra blabla
-rw-r--r-- 1 root root 5 Apr 25 20:22 blabla
chris@linux:/tmp> vi blabla
<hr></blockquote>
--> Ergebnis: Schreiben geht nicht! Eigentümer des Verzeichnisses ist "root:root". Rechte sind "drwxrwxrwt".
Das gleiche Ergebnis ist z.B. unter "/usr" mit Eigentümer "root:root" und Rechten "drwxr-xr-x".
Wenn ich es aber im Home von User "chris" mache:

<blockquote><hr>
root@linux:/home/cdr # vi blabla
roow@linux:/home/cdr # ls -ltra blabla
-rw-r--r-- 1 root root 5 Apr 25 20:23 blabla
linux:/tmp # su - chris
chris@linux:/~> ls -ltra blabla
-rw-r--r-- 1 root root 5 Apr 25 20:23 blabla
chris@linux:/~> vi blabla
chris@linux:/~> ls -ltra blabla
-rw-r--r-- 1 chris users 15 Apr 25 20:23 blabla
<hr></blockquote>

Funktioklappt! Die Verzeichnisrechte sind "drwxr-xr-x" Eigentümer ist "cdr:users"

Sieht also so aus, als würde der vi die Rechte des betroffenen Verzeichnis verwenden...
Scheint imho ein Bug zu sein! Ich nutze aber auch eine Beta (6.0av beta) von dem Teil!!!!

Jochen

Re: vi

#6 Post by Jochen »

Nein, kein Bug, und erst recht nicht im vi (vim)!

Um den Inhalt einer Datei zu verändern, brauchst Du Schreibrecht auf die Datei. So weit, so gut. Um in einem Verzeichnis Dateien anlegen oder löschen zu dürfen, benötigst Du Schreibrecht auf das Verzeichnis. Du kannst also eine Datei, auf die Du nur Leserechte besitzt, nicht ändern, aber Du kannst sie löschen, wenn Du für das Verzeichnis, in dem sie steht, Schreibrecht hast! Und das ist kein Bug, sondern ergibt sich aus der Tatsache, dass unter UNIX ein Verzeichnis nichts weiter als eine Tabelle ist, die Dateinamen zu I-Nodes verknüpft. Die I-Nodes stellen dann die eigentliche Datei dar: Eigentümer, Zugriffsrechte, Grösse, belegte Blöcke usw. Schreibrecht auf ein Verzeichnis zu haben bedeutet also nur, diese "Tabelle" ändern zu dürfen: Neue Einträge hinzufügen (= neue Dateien dort anlegen) oder Einträge zu entfernen (= Dateien löschen). Wenn Du nun (wie der vim es macht) von einer nur lesbaren Datei eine Kopie ziehst, diese änderst, das Original löschst uind die Kopie an die Stelle des verschwundenen Original setzst, ist alles im Rahmen der UNIX-Rechte abgelaufen. Die Original-Datei wurde nie verändert, nur ihr Namenseintrag im Verzeichnis wurde gestrichen! So funktioniert UNIX übrigens seit Urzeiten.

Jochen

Re: vi

#7 Post by Jochen »

Mist, zu früh auf Senden geklickt!

Ergänzung:

Das /tmp-Verzeichnis war da ein schlechter Ort für Deinen Test, da für das Verzeichnis das Sticky-Bit gesetzt ist (das "t" von den Zugriffsrechten "drwxrwxrwt"). Dieses bewirkt nämlich, dass nur der Eigentümer einer Datei diese auch löschen darf, selbst wenn man Schreibrecht auf das Verzeichnis besitzt. So kommen sich die Leute in /tmp nicht mehr so ins Gehege, wenn mal irgendein User ein "rm -rf /tmp/*" absetzt.

Jochen

Chris

Re: vi

#8 Post by Chris »

@Jochen:

Hmmm... Jetzt wo du es sagtst... Stimmt! Irrtum meinerseits!

Post Reply