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 foo
von 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.)
Antworten:
Wenn
cp
die 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
.quelle
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:
Kopieren Sie die Zugriffssteuerungsliste einer Datei mit getfacl und setfacl in eine andere
WARNUNG: Vorhandene ACL gehen verloren.
quelle
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=rwx
Flag. Siehe meine Antwort hier .quelle
Sie müssen
-p
oder--preserve
mit verwendencp
.Von
man 5 acl
:quelle
Die ACLs werden korrekt weitergegeben, aber die Standardmaske scheint nicht korrekt zu sein. Sie möchten wahrscheinlich, dass Ihre Standardmaske rwX ist.
Wenn das nicht funktioniert, poste bitte die ACL für foo.
quelle
Ist Ihr Dateisystem mit aktivierter "ACL" -Option gemountet?
Wenn nicht, nehmen Sie die Änderung vor und hängen Sie sie erneut ein.
quelle
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!
quelle