Seite 1 von 1

cp ohne Änderungen der Ziel-Userrechte

Verfasst: Fr Dez 12, 2014 2:16 pm
von Xin
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?

Re: cp ohne Änderungen der Ziel-Userrechte

Verfasst: Fr Dez 12, 2014 2:47 pm
von nufan
http://en.wikipedia.org/wiki/Cp_%28Unix%29
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.
Richtig lustig wirds wenn man Binaries mit gesetztem setuid-Flag überschreiben kann... ^^

Re: cp ohne Änderungen der Ziel-Userrechte

Verfasst: Fr Dez 12, 2014 3:12 pm
von Xin
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?

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
(Ich habe das in einem Ordner ~xin/test)

Re: cp ohne Änderungen der Ziel-Userrechte

Verfasst: Fr Dez 12, 2014 3:18 pm
von nufan
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?
Weil du im zweiten Fall ein neues Inode anlegst. Im ersten Fall änderst du die Daten eines bestehenden, aber nicht seine Metadaten (Berechtigungen).
Warum man das so implementiert hat kann ich dir aber leider auch nicht sagen ^^

Re: cp ohne Änderungen der Ziel-Userrechte

Verfasst: Fr Dez 12, 2014 3:24 pm
von Xin
dani93 hat geschrieben:
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?
Weil du im zweiten Fall ein neues Inode anlegst. Im ersten Fall änderst du die Daten eines bestehenden, aber nicht seine Metadaten (Berechtigungen).
Warum man das so implementiert hat kann ich dir aber leider auch nicht sagen ^^
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.

Re: cp ohne Änderungen der Ziel-Userrechte

Verfasst: Fr Dez 12, 2014 4:49 pm
von mfro
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 ...

Re: cp ohne Änderungen der Ziel-Userrechte

Verfasst: Fr Dez 12, 2014 4:52 pm
von Xin
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 ...
Wenn man das so haben will, kann man das mit -p ja auch klarstellen!?
Dann wäre das Verhalten in beiden Fällen konsistent. Konsistentes Verhalten mit einem Schalter einzufordern erscheint mir Flickschusterei zu sein.

Re: cp ohne Änderungen der Ziel-Userrechte

Verfasst: Fr Dez 12, 2014 5:15 pm
von mfro
Xin hat geschrieben: Wenn man das so haben will, kann man das mit -p ja auch klarstellen!?
-p macht genau das Gegenteil (bzw. dasselbe wie -a) - es gibt ("preserve") der Zieldatei die Attribute der Quelle.

Das Verhalten "wenn die Datei schon da ist, ersetze nur den Inhalt und laß' den Rest in Ruhe" ist nur ohne Schalter erreichbar.