Merkwürdigkeiten bei der Interferenz von erweiterten Linux-ACLs und „normalen“ Berechtigungen

Merkwürdigkeiten bei der Interferenz von erweiterten Linux-ACLs und „normalen“ Berechtigungen

Ich habe einen veralteten Code, der überprüft, ob eine Datei schreibgeschützt ist und nur von ihrem Besitzer gelesen werden kann, d. h. die Berechtigungen sind auf 0400 gesetzt. Ich muss auch einem anderen Benutzer im System schreibgeschützten Zugriff auf diese Datei gewähren. Ich versuche, erweiterte ACLs festzulegen, aber dies ändert auch die „normalen“ Berechtigungsbits auf seltsame Weise:

$ ls -l hostkey.pem 
-r-------- 1 root root 0 Jun  7 23:34 hostkey.pem
$ setfacl -m user:apache:r hostkey.pem 
$ getfacl hostkey.pem 
# file: hostkey.pem
# owner: root
# group: root
user::r--
user:apache:r--
group::---
mask::r--
other::---

$ ls -l hostkey.pem 
-r--r-----+ 1 root root 0 Jun  7 23:34 hostkey.pem

Und danach beginnt der Legacy-Code zu beschweren, dass die Datei für Gruppen lesbar sei (obwohl dies tatsächlich nicht der Fall ist!).

Ist es möglich, die erweiterten ACLs so einzustellen, dass ein anderer Benutzer ebenfalls nur Lesezugriff hat, während die Datei scheinbar nur über die „normalen“ Berechtigungen 0400 verfügt?

Antwort1

Wir haben so etwas bei unseren Experimenten mit Linux-ACLs gesehen, insbesondere über Samba. Aber in den meisten Fällen funktioniert das System insgesamt immer noch wie vorgesehen, auch wenn die regulären Berechtigungs-/Dateimodusbits auf seltsame Weise geändert werden.

Ich erinnere mich, irgendwo gelesen zu haben (ich weiß leider nicht mehr, wo), dass beim Erstellen von Dateien (möglicherweise über Samba) die ACL-Berechtigungen nicht richtig in den Modusbits widergespiegelt wurden, bis Daten in die Datei geschrieben wurden. Dies würde Dateien betreffen, die beispielsweise mit touch erstellt wurden.

Sie sollten außerdem bedenken, ob Sie möglicherweise Standard-ACLs festlegen möchten.

Wir verwenden so etwas, wenn wir ein neues Verzeichnis mit ACL-geschützten Dateien erstellen. Der letzte Befehl, bei dem getfacl in setfacl weitergeleitet wird, kopiert die aktuell festgelegten ACLs, die als Standard-ACLs für neue Dateien verwendet werden sollen, die in diesem Verzeichnis erstellt werden:

chown --recursive $username:$userrole /home/data/private/$datadir
chmod --recursive u=rwx,g=,o= /home/data/private/$datadir

# remove previous ACLs
setfacl --recursive --remove-all /home/data/private/$datadir

# User/group access for owner, group leader and web server
setfacl --recursive -m u:$username:rwx /home/data/private/$datadir
setfacl --recursive -m g:RGLeader:rx /home/data/private/$datadir
setfacl --recursive -m u:www-data:rwx /home/data/private/$datadir

# Copy access modes to default access modes
getfacl --access /home/data/private/$datadir | setfacl --recursive -d -M- /home/data/private/$datadir

verwandte Informationen