Ich habe da mal folgende Frage, die ich nicht verstehe:
Ich nehme eine Datei ~xin/test, die ich als User xin:xin anlege und eine Datei /root/test, die ich als User root:root. Nun kopiere ich mit Root-Rechten die Datei /root/test auf die Datei ~xin/test.
Meine Erwartungshaltung ist, dass die Datei ~xin/test nun gelöscht und überschrieben wird, also root gehört. Tatsächlich ist die Datei überschrieben, also mit dem neuen Inhalt, gehört aber weiterhin xin:xin.
Warum?
cp ohne Änderungen der Ziel-Userrechte
- Xin
- nur zu Besuch hier
- Beiträge: 8862
- Registriert: Fr Jul 04, 2008 11:10 pm
- Wohnort: /home/xin
- Kontaktdaten:
cp ohne Änderungen der Ziel-Userrechte
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.
Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.
Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.
Re: cp ohne Änderungen der Ziel-Userrechte
http://en.wikipedia.org/wiki/Cp_%28Unix%29
Richtig lustig wirds wenn man Binaries mit gesetztem setuid-Flag überschreiben kann... ^^Wikipedia hat geschrieben:The copying of a file to an existing file is performed by opening the existing file in update mode, thereby preserving the files inode, which requires write access and results in the target file retaining the permissions it had originally.
- Xin
- nur zu Besuch hier
- Beiträge: 8862
- Registriert: Fr Jul 04, 2008 11:10 pm
- Wohnort: /home/xin
- Kontaktdaten:
Re: cp ohne Änderungen der Ziel-Userrechte
Aber warum werden die Eigentumsrechte nicht mitkopiert?
Wenn ~xin/test schon existiert, dem User xin gehörend, dann bedeuten cp /root/test ~xin/test und cp /root/test ~xin/test2 ja unterschiedliche Dinge... warum?
(Ich habe das in einem Ordner ~xin/test)
Wenn ~xin/test schon existiert, dem User xin gehörend, dann bedeuten cp /root/test ~xin/test und cp /root/test ~xin/test2 ja unterschiedliche Dinge... warum?
Code: Alles auswählen
root@prgn:/home/xin# ls -la test
total 16K
drwxr-xr-x 2 xin xin 4.0K Dec 12 15:10 .
drwxr-xr-x 10 xin xin 4.0K Dec 12 14:22 ..
-rw-r--r-- 1 xin xin 4 Dec 12 14:08 test
-rw-r--r-- 1 root root 4 Dec 12 15:10 test2
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.
Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.
Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.
Re: cp ohne Änderungen der Ziel-Userrechte
Weil du im zweiten Fall ein neues Inode anlegst. Im ersten Fall änderst du die Daten eines bestehenden, aber nicht seine Metadaten (Berechtigungen).Xin hat geschrieben:Wenn ~xin/test schon existiert, dem User xin gehörend, dann bedeuten cp /root/test ~xin/test und cp /root/test ~xin/test2 ja unterschiedliche Dinge... warum?
Warum man das so implementiert hat kann ich dir aber leider auch nicht sagen ^^
- Xin
- nur zu Besuch hier
- Beiträge: 8862
- Registriert: Fr Jul 04, 2008 11:10 pm
- Wohnort: /home/xin
- Kontaktdaten:
Re: cp ohne Änderungen der Ziel-Userrechte
Man ändert doch die Metadaten. In der INode steht nun eine andere Größe als vorher. Diese wird kopiert - und entsprechend ist meine Frage, wieso die Userrechte nicht kopiert werden.dani93 hat geschrieben:Weil du im zweiten Fall ein neues Inode anlegst. Im ersten Fall änderst du die Daten eines bestehenden, aber nicht seine Metadaten (Berechtigungen).Xin hat geschrieben:Wenn ~xin/test schon existiert, dem User xin gehörend, dann bedeuten cp /root/test ~xin/test und cp /root/test ~xin/test2 ja unterschiedliche Dinge... warum?
Warum man das so implementiert hat kann ich dir aber leider auch nicht sagen ^^
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.
Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.
Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.
Re: cp ohne Änderungen der Ziel-Userrechte
Die Rechte werden nur dann mitkopiert, wenn man das explizit so bestellt (cp -a).
Das hängt mit der Art und Weise zusammen, wie cp programmiert ist.
Es macht auf die Zieldatei einen creat()-Systemaufruf, und der ist nun mal per Definition äquivalent zu "open() + ftruncate()", wenn die Datei schon existiert.
Darüber hinaus finde ich (ich bin's aber auch nicht anders gewohnt) die Vorgehensweise logisch: wenn die Datei schon da ist und bestimmte Zugriffsrechte hat, dann sind die ja nicht ohne Grund da und es ist sehr wahrscheinlich, daß man das wieder so haben will ...
Das hängt mit der Art und Weise zusammen, wie cp programmiert ist.
Es macht auf die Zieldatei einen creat()-Systemaufruf, und der ist nun mal per Definition äquivalent zu "open() + ftruncate()", wenn die Datei schon existiert.
Darüber hinaus finde ich (ich bin's aber auch nicht anders gewohnt) die Vorgehensweise logisch: wenn die Datei schon da ist und bestimmte Zugriffsrechte hat, dann sind die ja nicht ohne Grund da und es ist sehr wahrscheinlich, daß man das wieder so haben will ...
It's as simple as that. And remember, Beethoven wrote his first symphony in C.
- Xin
- nur zu Besuch hier
- Beiträge: 8862
- Registriert: Fr Jul 04, 2008 11:10 pm
- Wohnort: /home/xin
- Kontaktdaten:
Re: cp ohne Änderungen der Ziel-Userrechte
Wenn man das so haben will, kann man das mit -p ja auch klarstellen!?mfro hat geschrieben:Die Rechte werden nur dann mitkopiert, wenn man das explizit so bestellt (cp -a).
...
Darüber hinaus finde ich (ich bin's aber auch nicht anders gewohnt) die Vorgehensweise logisch: wenn die Datei schon da ist und bestimmte Zugriffsrechte hat, dann sind die ja nicht ohne Grund da und es ist sehr wahrscheinlich, daß man das wieder so haben will ...
Dann wäre das Verhalten in beiden Fällen konsistent. Konsistentes Verhalten mit einem Schalter einzufordern erscheint mir Flickschusterei zu sein.
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.
Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.
Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.
Re: cp ohne Änderungen der Ziel-Userrechte
-p macht genau das Gegenteil (bzw. dasselbe wie -a) - es gibt ("preserve") der Zieldatei die Attribute der Quelle.Xin hat geschrieben: Wenn man das so haben will, kann man das mit -p ja auch klarstellen!?
Das Verhalten "wenn die Datei schon da ist, ersetze nur den Inhalt und laß' den Rest in Ruhe" ist nur ohne Schalter erreichbar.
It's as simple as that. And remember, Beethoven wrote his first symphony in C.