cp ohne Änderungen der Ziel-Userrechte

Direkte Linux-Programmierung, POSIX
Antworten
Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8858
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

cp ohne Änderungen der Ziel-Userrechte

Beitrag von Xin » Fr Dez 12, 2014 2:16 pm

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?
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.

nufan
Wiki-Moderator
Beiträge: 2557
Registriert: Sa Jul 05, 2008 3:21 pm

Re: cp ohne Änderungen der Ziel-Userrechte

Beitrag von nufan » Fr Dez 12, 2014 2:47 pm

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... ^^

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8858
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: cp ohne Änderungen der Ziel-Userrechte

Beitrag von Xin » Fr Dez 12, 2014 3:12 pm

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)
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.

nufan
Wiki-Moderator
Beiträge: 2557
Registriert: Sa Jul 05, 2008 3:21 pm

Re: cp ohne Änderungen der Ziel-Userrechte

Beitrag von nufan » Fr Dez 12, 2014 3:18 pm

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 ^^

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8858
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: cp ohne Änderungen der Ziel-Userrechte

Beitrag von Xin » Fr Dez 12, 2014 3:24 pm

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.
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.

mfro
Beiträge: 346
Registriert: Mi Jan 16, 2013 4:58 pm

Re: cp ohne Änderungen der Ziel-Userrechte

Beitrag von mfro » Fr Dez 12, 2014 4:49 pm

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 ...
It's as simple as that. And remember, Beethoven wrote his first symphony in C.

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8858
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: cp ohne Änderungen der Ziel-Userrechte

Beitrag von Xin » Fr Dez 12, 2014 4:52 pm

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.
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.

mfro
Beiträge: 346
Registriert: Mi Jan 16, 2013 4:58 pm

Re: cp ohne Änderungen der Ziel-Userrechte

Beitrag von mfro » Fr Dez 12, 2014 5:15 pm

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.
It's as simple as that. And remember, Beethoven wrote his first symphony in C.

Antworten