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 ?
vi
Re: vi
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
Jochen
Re: vi
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!!!!
<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!!!!
Re: vi
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.
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.
Re: vi
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
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