GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Festlegen unterschiedlicher ACLs für Verzeichnisse und Dateien

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.


Linux
  1. Eine einfache Möglichkeit, Dateien und Verzeichnisse in Linux zu verstecken

  2. Finden Sie Dateien und Verzeichnisse in Linux wie ein Profi

  3. So archivieren Sie Dateien und Verzeichnisse unter Linux [Teil 2]

  4. Finden Sie die größten Dateien und Verzeichnisse in Linux

  5. Linux Dateien und Verzeichnisse löschen

So verwenden Sie den cp-Befehl zum Kopieren von Dateien und Verzeichnissen

So synchronisieren Sie Dateien und Verzeichnisse mit Zaloha.sh

3 Möglichkeiten, Dateien und Verzeichnisse in Linux zu finden

Komprimieren und Archivieren von Dateien und Verzeichnissen

Finden Sie Dateien und Verzeichnisse unter Linux ganz einfach

Standarddateien und -verzeichnisse in cPanel