Verwenden von setfacl zum Erstellen rekursiver Berechtigungen für Apache mit rsync

Verwenden von setfacl zum Erstellen rekursiver Berechtigungen für Apache mit rsync

Ich habe lokal eine Dokuwiki-Installation, die ich regelmäßig mit rsync mit meinem Server synchronisiere. Außerdem werde ich einem Freund einen SSH-Account geben und seine öffentliche Dokuwiki-Installation hosten. Allerdings habe ich ein Problem mit den Zugriffsberechtigungen – obwohl der Spiegel schreibgeschützt ist, benötigt Dokuwiki dennoch Schreibberechtigungen für das Datenverzeichnis für Cache usw. Der Apache-Server läuft als Benutzer www-data und jedes Mal, wenn ich rsync ausführe, werden die Berechtigungen zurückgesetzt.

Basierend auf einigen anderen Antworten auf dieser Site habe ich versucht, mit setfacl Standardberechtigungen festzulegen, aber das scheint nicht zu funktionieren – getfacl zeigt an, dass die Berechtigungen vorhanden sind, aber Dokuwiki wird nicht ausgeführt, und wenn ich versuche, eine Datei als Benutzer www-data zu schreiben, funktioniert es auch nicht. Was übersehe ich?

wiki/data$ sudo su www-data
$ pwd
/var/www/wiki/data
$ whoami
www-data
$ touch hi
touch: cannot touch `hi': Permission denied
$ getfacl /var/www/wiki/data
getfacl: Removing leading '/' from absolute path names
# file: var/www/wiki/data
# owner: stian
# group: admin
user::rwx
group::r-x
other::r-x
default:user::rwx
default:user:www-data:rwx
default:group::r-x
default:mask::rwx
default:other::r-x

Hier ist der Befehl, den ich zum Festlegen der Berechtigungen verwendet habe:

setfacl -R -d -m u:www-data:7 /var/www/*

Antwort1

Problem Nr. 1: Rsync löscht ACLs

Nachdem Sie die ACL-Berechtigungen angewendet haben, müssen Sie darauf achten, dass Sie bei der Ausführung entweder den Schalter oder rsyncverwenden . Dies weist Sie an, diese bei der Synchronisierung beizubehalten.-A--aclsrsync

Auszug aus der rsync-Manpage

    -A, --acls                  preserve ACLs (implies -p)

Problem Nr. 2: Keine ACL-Berechtigungen

Wenn Sie sich Ihr Beispiel ansehen, sind die folgenden Berechtigungen enthalten.

traditionelle Dauerwellen

# owner: stian
# group: admin
user::rwx
group::r-x
other::r-x

Zugriffssteuerungslisten

default:user::rwx
default:user:www-data:rwx
default:group::r-x
default:mask::rwx
default:other::r-x

Diese ACLs dienen jedoch zum Erstellen neuer Objekte und funktionieren nicht genau so, wie Sie denken. Sie müssen www-datazusätzlich zu den Standard-ACL-Berechtigungen noch einen Eintrag für den Benutzer erstellen.

Beispiel

$ pwd
/tmp/somedir

$ mkdir data
$ setfacl -R -d -m u:gopher:7 data

$ getfacl data
# file: data
# owner: root
# group: root
user::rwx
group::r-x
other::r-x
default:user::rwx
default:user:gopher:rwx
default:group::r-x
default:mask::rwx
default:other::r-x

Ein Experiment

Versuchen wir nun, dataals Benutzer eine Datei in das Verzeichnis zu schreiben gopher.

$ sudo -u gopher touch /tmp/somedir/data/afile
touch: cannot touch `/tmp/somedir/data/afile': Permission denied

Ähnlich aussehend?

Hinzufügen zusätzlicher ACL-Berechtigungen

Das liegt daran, dass Sie eine ACL für den Benutzer hinzufügen müssen www-data. Die Standardregeln gelten nicht für den Zugriff, sondern für das Erstellen neuer Dateien/Verzeichnisse.

$ setfacl -R -m u:gopher:7 data

Überprüfen Sie nun das dataVerzeichnis noch einmal:

$ getfacl data
# file: data
# owner: root
# group: root
user::rwx
user:gopher:rwx
group::r-x
mask::rwx
other::r-x
default:user::rwx
default:user:gopher:rwx
default:group::r-x
default:mask::rwx
default:other::r-x

Der einzige Unterschied besteht darin, dass wir jetzt eine ACL haben, die besagt, dass der Benutzer Zugriff gopherhat rwx:

user:gopher:rwx

Wiederholen Sie das Experiment

Versuchen Sie erneut, Daten in das Verzeichnis zu schreiben:

$ sudo -u gopher touch /tmp/somedir/data/afile
$

Es hat funktioniert!!! Überprüfen Sie die resultierende Datei noch einmal:

$ ls -l /tmp/somedir/data/afile
-rw-rw-r--+ 1 gopher gopher 0 Oct  7 21:36 /tmp/somedir/data/afile

verwandte Informationen