Warum respektiert cp ACLs nicht?

15

Eine übliche Methode zum Einrichten eines Verzeichnisses für die Dateifreigabe innerhalb einer Gruppe ist:

$ mkdir foo
$ chgrp felles foo
$ chmod g+ws foo
$ setfacl -m group:felles:rwx foo
$ setfacl -dm group:felles:rwx foo

Dadurch wird sichergestellt, dass alle in erstellten Dateien foovon der Gruppe gelesen und geschrieben werden können felles:

$ umask
0022
$ echo hi > foo/bar
$ ls -l foo
total 4
-rw-rw-r--+ 1 bhm felles 3 2010-09-23 00:18 bar

Wenn Sie jedoch eine Datei in kopieren foo, werden die Standard-ACLs nicht angewendet:

$ echo you > baz
$ cp baz foo/
$ ls -l foo
total 8
-rw-rw-r--+ 1 bhm felles 3 2010-09-23 00:18 bar
-rw-r--r--+ 1 bhm felles 4 2010-09-23 00:19 baz
$ getfacl foo/baz
# file: foo/baz
# owner: bhm
# group: felles
user::rw-
group::rwx          #effective:r--
group:felles:rwx        #effective:r--
mask::r--
other::r--

Warum passiert das und gibt es einen Ausweg?

( Wenn Sie eine Datei in das Verzeichnis verschieben, werden weder die Zugriffssteuerungslisten noch die Gruppenzugehörigkeit berücksichtigt. Ich kann jedoch nachvollziehen, warum: Sie möchten möglicherweise nicht, dass sich die Berechtigungen einer Datei ändern, nur weil Sie ihren Namen ändern.)

bhm
quelle
serverfault.com/a/452678/46333 Diese Antwort enthält eine gute Erklärung.
Kaan

Antworten:

11

Wenn cpdie Zieldatei erstellt wird, werden die Berechtigungen der Quelldatei mit Ausnahme der in der umask festgelegten Bits repliziert. Dies ist ein Standardverhalten (siehe z. B. Schritt 3.b in der Spezifikation für Single Unix v3 (POSIX 2001) .

Warum wurde cp so entworfen? In vielen Fällen ist dieses Verhalten wünschenswert, z. B. wenn die ursprünglichen Berechtigungen eingeschränkt sind und die Ausführbarkeit fast immer erhalten bleibt. Es ist jedoch bedauerlich, dass nicht einmal GNU cp die Option hat, dieses Verhalten auszuschalten.

Die meisten Kopierwerkzeuge (z. B. pax, rsync) verhalten sich genauso. Sie können sicherstellen, dass die Datei mit der Standardberechtigung erstellt wird, indem Sie die Quelle vom Ziel entkoppeln, z. B. mit cat <baz >foo/baz.

Gilles 'SO - hör auf böse zu sein'
quelle
Nun, das erklärt zumindest die Motivation dafür. (Seltsamerweise darf die Gruppeneigentümerschaft in "felles" geändert werden, wodurch möglicherweise mehr Personen lesend auf die Datei zugreifen können.)
bhm
3

Naja, eine dreijährige und noch aktuellere Frage. Für zukünftige Leser möchte ich hinzufügen, dass erwartet wird, dass MV-, CP-Befehle nicht der ACL des Zielverzeichnisses folgen. Gilles Antwort ist alles in Ordnung, aber der letzte Satz. Der bessere Weg, die ACL des Ziels auf die kopierte / verschobene Datei anzuwenden, ist der hier erwähnte Weg:

http://www.commandlinefu.com/commands/view/4281/copy-acl-of-one-file-to-another-using-getfacl-and-setfacl

Falls der Link in Zukunft nicht mehr funktioniert, füge ich den Inhalt hier ein:

getfacl <file-with-acl> | setfacl -f - <file-with-no-acl>

Kopieren Sie die Zugriffssteuerungsliste einer Datei mit getfacl und setfacl in eine andere

WARNUNG: Vorhandene ACL gehen verloren.

Biocyberman
quelle
1

Ich hatte ein ähnliches Problem mit Rsynced-Dateien, denen die richtigen Standard-ACLs im Ziel-Unterverzeichnis fehlen. Cp hat keine Möglichkeit, die Berechtigungen für das Ziel festzulegen. Aber rsync verwendet das --chmod=ugo=rwxFlag. Siehe meine Antwort hier .

Eric.chowanski
quelle
0

Sie müssen -poder --preservemit verwenden cp.

Von man 5 acl:

ÄNDERUNGEN AN DEN DATEI-DIENSTPROGRAMMEN

 On a system that supports ACLs, the file utilities ls(1), cp(1), and
 mv(1) change their behavior in the following way:

 ·   For files that have a default ACL or an access ACL that contains more
     than the three required ACL entries, the ls(1) utility in the long
     form produced by ls -l displays a plus sign (+) after the permission
     string.

 ·   If the -p flag is specified, the cp(1) utility also preserves ACLs.
     If this is not possible, a warning is produced.

 ·     The mv(1) utility always preserves ACLs. If this is not possible, a
     warning is produced.

 The effect of the chmod(1) utility, and of the chmod(2) system call, on
 the access ACL is described in CORRESPONDENCE BETWEEN ACL ENTRIES AND
 FILE PERMISSION BITS.
Bis auf weiteres angehalten.
quelle
1
Nicht genau. Er möchte, dass die Datei dieselbe Berechtigung hat wie der Zielordner.
luckytaxi
0

Die ACLs werden korrekt weitergegeben, aber die Standardmaske scheint nicht korrekt zu sein. Sie möchten wahrscheinlich, dass Ihre Standardmaske rwX ist.

setfacl -dm m::rwX foo

Wenn das nicht funktioniert, poste bitte die ACL für foo.

Ryan Bair
quelle
Das hat nicht funktioniert. Die ACL für foo (sowohl vor als auch nach Ihrem Befehl) lautet # file: foo # owner: bhm # group: felles # flags: -s- user :: rwx group :: rwx group: felles: rwx mask :: rwx other: : rx default: user :: rwx default: group :: rwx default: group: felles: rwx default: mask :: rwx default: other :: rx
bhm
-1

Ist Ihr Dateisystem mit aktivierter "ACL" -Option gemountet?

/dev/sda4        /wherefolderislocated         ext3        defaults,acl     1   2

Wenn nicht, nehmen Sie die Änderung vor und hängen Sie sie erneut ein.

mount -o remount /wherefolderislocated
luckytaxi
quelle
Es wurde mit der Option acl gemountet, ja.
Bhm
-1

Soweit ich weiß, sind Sie der Eigentümer der Dateien (bhm) vor und nach dem CP. Wie die Verzeichnisliste zeigt, hat der Eigentümer Lese- und Schreibrechte!

Niko
quelle
Vielleicht war mir unklar: Ich möchte, dass die Gruppe ("Felles") die Datei lesen und schreiben kann.
Bhm