Wie Gilles betont, setfacl
Standardberechtigungen geben die maximalen Berechtigungen an und ersetzen im Grunde die umask
. Neu erstellte Dateien werden also rw
sein es sei denn, die Anwendung, die die Datei erstellt hat, hat ausdrücklich verlangt, dass sie ausführbar ist.
$ mkdir test
$ touch test/oldfile
$ getfacl test/oldfile
# file: test/oldfile
# owner: myuser
# group: myuser
user::rw-
group::r--
other::r--
$ setfacl -m d:g:mygroup:rwx test
$ touch test/newfile
$ getfacl test/newfile
# file: test/newfile
# owner: myuser
# group: myuser
user::rw-
group::r-x #effective:r--
group:mygroup:rwx #effective:rw-
mask::rw-
other::r--
Beachten Sie die effektiven Perms oben. (Es gibt nur wenige Programme, die Sie auffordern, das Ausführungsbit für Dateien zu setzen, die es erstellt, z. B. gcc
für ausführbare Dateien und cp
wenn die kopierte Datei ausführbar war.)
Oder meinten Sie, dass der erste setfacl-Befehl so funktionierte, wie Sie es wollten, der zweite jedoch nicht? Mit anderen Worten, Sie möchten die Berechtigungen für die alten Dateien korrigieren und sicherstellen, dass Verzeichnisse durchquert werden können, ohne anderen regulären Dateien Ausführungsberechtigungen zu erteilen?
Meine Version von setfacl
erlaubt X
genau wie Sie wollen, z.B.:
setfacl g:mygroup:rwX
$ setfacl --version
setfacl 2.2.49
$ rm -r test
$ mkdir test
$ mkdir test/olddir
$ touch test/oldfile
$ find test -ls
107513 4 drwxr-xr-x 3 myuser myuser 4096 Dec 22 01:56 test
107539 0 -rw-r--r-- 1 myuser myuser 0 Dec 22 01:56 test/oldfile
107529 4 drwxr-xr-x 2 myuser myuser 4096 Dec 22 01:56 test/olddir
$ setfacl -Rm g:somegroup:rwx test
$ find test -ls
107513 4 drwxrwxr-x 3 myuser myuser 4096 Dec 22 01:56 test
107539 0 -rw-rwxr-- 1 myuser myuser 0 Dec 22 01:56 test/oldfile
107529 4 drwxrwxr-x 2 myuser myuser 4096 Dec 22 01:56 test/olddir
$ rm -r test
$ mkdir test
$ mkdir test/olddir
$ touch test/oldfile
$ setfacl -Rm g:somegroup:rwX test
$ find test -ls
107513 4 drwxrwxr-x 3 myuser myuser 4096 Dec 22 01:56 test
107539 0 -rw-rw-r-- 1 myuser myuser 0 Dec 22 01:56 test/oldfile
107529 4 drwxrwxr-x 2 myuser myuser 4096 Dec 22 01:56 test/olddir
Wenn Ihre Version von setfacl
unterstützt das nicht, warum nicht find
verwenden ?
Berechtigungen überschreiben, sie auf rw für Dateien und rwx für Verzeichnisse setzen
$ find . \( -type f -exec setfacl -m g:mygroup:rw '{}' ';' \) \
-o \( -type d -exec setfacl -m g:mygroup:rwx '{}' ';' \)
mygroup ACL-Berechtigungen basierend auf bestehenden Gruppenberechtigungen festlegen
$ find . \( -perm -g+x -exec setfacl -m g:mygroup:rw '{}' ';' \) \
-o \( -exec setfacl -m g:mygroup:rwx '{}' ';' \)
Wahrscheinlich möchten Sie überprüfen, ob die Gruppenmaske effektive Berechtigungen bietet. Wenn nicht, müssen Sie auch Folgendes ausführen:
$ find . -type d -exec chmod g+rwX '{}' ';'
Für zukünftige Leser, um setfacl
zu verwenden für vorhandene Dateien/Ordner, ohne das ausführbare Bit zu Ihren Dateien hinzuzufügen, ist die Lösung dieser Teil von @Mikels Antwort:
Meine Version von setfacl erlaubt X genau so, wie Sie es wollen, zB:
setfacl g:mygroup:rwX
Relevanter Auszug aus setfacl
Dokumentation:
Das Perms-Feld ist eine Kombination von Zeichen, die die Berechtigungen angeben:Lesen (r), Schreiben (w), Ausführen (x), nur ausführen, wenn die Datei ein Verzeichnis ist oder bereits Ausführungsberechtigung für einen Benutzer hat (X) .
Soweit ich Linux-ACLs verstehe, setfacl -Rdm g:mygroup:rwx share_name
macht genau das was du willst. Versuch:
umask 007
mkdir foo
chgrp mygroup foo
chmod 2700 foo
setfacl -d -m group:mygroup:rwx foo
setfacl -m group:mygroup:rwx foo
touch foo/data
echo '#!/bin/ls' >foo/exec
chmod +x foo/exec
Dann als anderer Benutzer in der Gruppe mygroup
:
$ cat foo/*
#!/bin/ls
#!/bin/ls
$ ./foo/data
ash: ./foo/data: Permission denied
$ ./foo/exec
./foo/exec
Was ist los?
$ getfacl foo/data
# file: foo/data
# owner: myuser
# group: mygroup
user::rw-
group::---
group:mygroup:rwx #effective:rw-
mask::rw-
other::---
Die effektive ACL für mygroup
ist das Ergebnis des And'ing von ACL_GROUP
Eintrag für mygroup
(rwx
) mit dem ACL_MASK-Eintrag (rw-
).
Die acl(5) Manpage erklärt diese Berechnung unter „Access check algorithms“. Es erklärt nicht, wie ACL_MASK
Einträge werden generiert, aber in der Praxis scheint das Richtige zu passieren.