So legen Sie Linux-Standard-ACLs für Verzeichnisse und Dateien unterschiedlich fest

9

Ich habe einige ACLs in einem Verzeichnis wie folgt definiert:

# owner: root
# group: root
user::rwx
group::r--
mask::r-x
other::r--
default:user::r--
default:group::r--
default:mask::r-x
default:other::r--

Ich möchte, dass alle neuen Dateien, die in diesem Ordner erstellt werden, u: apache: r-- und alle neuen Verzeichnisse u: apache: rx sind. Wie spezifiziere ich diese Absicht mithilfe von ACLs?

Ich habe es versucht -dm u:apache:rXund es scheint nichts anderes zu tun als nurrx

overt htdocs # getfacl .
# file: .
# owner: root
# group: root
user::rwx
user:apache:r--
group::r--
mask::r-x
other::r--
default:user::r--
default:user:apache:r--
default:group::r--
default:mask::r--
default:other::r--

overt htdocs # setfacl -dm u:apache:rx .
overt htdocs # touch blah.txt
overt htdocs # getfacl blah.txt
# file: blah.txt
# owner: root
# group: root
user::r--
user:apache:r-x                 #effective:r--
group::r--
mask::r--
other::r--

overt htdocs # rm blah.txt
overt htdocs # setfacl -dm u:apache:rX .
overt htdocs # touch blah.txt
overt htdocs # getfacl blah.txt
# file: blah.txt
# owner: root
# group: root
user::r--
user:apache:r-x                 #effective:r--
group::r--
mask::r--
other::r--

Die Großbuchstaben-X-Berechtigung scheint nur zum Festlegen aktueller Berechtigungen nützlich zu sein, nicht zum Festlegen von Standardberechtigungen:

overt htdocs # setfacl -x u:apache blah.txt
overt htdocs # getfacl blah.txt
# file: blah.txt
# owner: root
# group: root
user::r--
group::r--
mask::r--
other::r--

overt htdocs # setfacl -m u:apache:rX blah.txt
overt htdocs # getfacl blah.txt
# file: blah.txt
# owner: root
# group: root
user::r--
user:apache:r--
group::r--
mask::r--
other::r--
Joshperry
quelle

Antworten:

6

Na ja, aber dein Beispiel macht genau das, was du willst;)

Schauen Sie sich den zweiten an:

offen htdocs # setfacl -dm u: apache: rx.
offen htdocs # touch blah.txt
offen htdocs # getfacl blah.txt
# file: blah.txt
# Besitzer: root
# group: root
user :: r--
user: apache: rx #effective: r--
group :: r--
mask :: r--
other :: r--

Die wichtige Zeile lautet:

user:apache:r-x #effective:r--

Obwohl acl auf rx gesetzt ist, ist es effektiv r-- für Dateien. Es liegt an der Maske.

Und die Maske ist immer nur rw- für Dateien, wenn der Benutzer sie mit den rw-Berechtigungen für Benutzer erstellt hat. (Ich bin nicht 100% sicher, aber die Maske kann nicht weniger restriktiv sein als die Grundberechtigungen).

So effektiv erhalten Sie r-- für Dateien und rx für Verzeichnisse.
Da erstellte Verzeichnisse den Benutzer haben: rx -> Maske ist rx -> effektive Berechtigung ist rx.
Für Dateien: Sie haben r--, also ist mask r-- und effektive Berechtigungen für ACLs sind auch r--. (Wenn Sie eine Datei erstellen und ihr die Berechtigung user :: rx erteilen, wird die Maske geändert und Benutzer von acls erhalten auch das x.)

die Seide
quelle
Ich habe den #effectiveText total verpasst ! Vielen Dank für die Erklärung, wie sich die Masken auf effektive Berechtigungen auswirken.
Joshperry
2

Leider gibt es mit Linux-ACLs keine Möglichkeit, dies zu tun. Es ist wahr, dass die Maske genau das zu tun scheint, was Sie wollen, was effektive Berechtigungen betrifft. Wenn Sie jedoch das nächste Mal einen Vorgang ausführen, bei dem die Rechte-Maske bam neu berechnet wird , werden alle Ihre Dateien ausführbar gemacht.

Sie können sich auch einfach damit abfinden, dass alle Dateien in einer ACL ausführbar sind. Das ist eigentlich nur eine Annehmlichkeit und keine Sicherheitsfunktion, und solange Sie diese Ordner nicht in Ihrem $ PATH ablegen, sollte dies kein Problem sein. Wenn es Sie immer noch stört, besteht die einzige Möglichkeit darin, Ihre ACL-gesteuerten Ordner in einem Dateisystem abzulegen, das ohne Ausführungsoption bereitgestellt wird.

Rashkae
quelle
1

-d (oder --default) wird verwendet, um die Standardeinstellungen für das Verzeichnis so festzulegen, dass die darin erstellten Elemente die Dauerwellen erben (wie Sie es anscheinend tun).

Hier ist eine kurze Übersicht. http://www.vanemery.com/Linux/ACL/linux-acl.html#default

Es ist nicht möglich, dass Dateien einen Standard haben und Verzeichnisse einen anderen Standard haben.

Sie könnten ein Skript ohne Cron ausführen, das jede Minute ein Setfacl für alle Verzeichnisse ausführt - obwohl dies weniger als ideal für eine Lösung ist.

find / path / to / top / dir -typ d -exec setfacl -dm u: apache: rx {} \;

oder

find / path / to / top / dir -typ d | xargs setfacl -dm u: apache: rx

Aspitzer
quelle
1

Dieser Beitrag über ACLs und Masken hat mir wirklich geholfen zu verstehen, wie ich tun soll, was ich wollte und warum.

Der fehlende Teil meines Verständnisses war, dass der Kernel beim Erstellen einer Datei einen Standardberechtigungssatz von 0666 und für neue Verzeichnisse von 0777 verwendet. Standardmäßig wird für Verzeichnisse das Ausführungsbit (Traverse) gesetzt.

Die ACL-Maske ist im Grunde eine Möglichkeit, eine umaskauf Verzeichnis- / Datei- / Benutzerebene festzulegen.

Joshperry
quelle