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

8

Ich habe lokal eine Dokuwiki-Installation, die ich regelmäßig mit rsync mit meinem Server synchronisiere. Ich werde auch einem Freund von mir einen SSH-Account geben und seine öffentliche Dokuwiki-Installation hosten. Ich habe jedoch ein Problem mit Zugriffsberechtigungen - obwohl der Spiegel schreibgeschützt ist, benötigt Dokuwiki weiterhin Schreibberechtigungen für das Datenverzeichnis für den Cache usw. Der Apache-Server wird jedes Mal als Benutzer-WWW-Daten ausgeführt Bei einem rsync werden die Berechtigungen zurückgesetzt.

Basierend auf einigen anderen Antworten auf dieser Site habe ich versucht, mit setfacl Standardberechtigungen festzulegen, aber es scheint nicht zu funktionieren - getfacl zeigt an, dass die Berechtigungen vorhanden sind, Dokuwiki jedoch nicht ausgeführt wird und wenn ich versuche, eine Datei als zu schreiben Benutzer www-Daten, es funktioniert auch nicht. Was vermisse 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, mit dem ich die Berechtigungen festgelegt habe:

setfacl -R -d -m u:www-data:7 /var/www/*
Stian Håklev
quelle
Welchen Befehl verwenden Sie mit rsync? Standard-ACLs sollten gelten. Bitte zeigen Sie auch die ACL einer Beispieldatei an.
Gilles 'SO - hör auf böse zu sein'

Antworten:

3

Problem Nr. 1: Rsync löscht ACLs

Nach dem Anwenden der ACL-Berechtigungen müssen Sie darauf achten, dass Sie bei der Ausführung rsyncentweder den Schalter -Aoder verwenden --acls. Dies weist Sie rsyncan, diese bei der Synchronisierung beizubehalten.

Auszug aus der rsync-Manpage

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

Problem Nr. 2: Keine ACL-Berechtigungen

Wenn Sie sich Ihr Beispiel ansehen, enthält es die folgenden Berechtigungen.

traditionelle Dauerwellen

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

ACLs

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

Dies liegt daran, dass Sie eine ACL für den Benutzer hinzufügen www-datamüssen. 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 erneut:

$ 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 haben wir jetzt eine ACL sagen , dass Benutzer gopherhat rwxZugriff:

user:gopher:rwx

Wiederholen Sie den Versuch

Versuchen Sie erneut, Daten in das Verzeichnis zu schreiben:

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

Es funktionierte!!! Überprüfen Sie die resultierende Datei:

$ ls -l /tmp/somedir/data/afile
-rw-rw-r--+ 1 gopher gopher 0 Oct  7 21:36 /tmp/somedir/data/afile
slm
quelle
Das ist sinnvoll, aber wenn Sie sich den obigen Code mit getfacl ansehen, wird aufgelistet, dass die Datei über die entsprechenden Berechtigungen verfügt.
Stian Håklev
1
@ StianHåklev Nein, die Datei verfügt nicht über die entsprechenden Berechtigungen. Es hat keine ACL über die herkömmlichen Unix-Berechtigungen hinaus und gehört dem Benutzer stian, nicht www-data. Die Standard-ACLs werden nur auf neu erstellte Dateien angewendet. rsync legt die Berechtigungen basierend auf den Berechtigungen auf der Quellseite fest. rsync -Akopiert ACLs, wenn Sie dieselben ACLs auf dem Quellcomputer haben. Ist dies der Fall?
Gilles 'SO - hör auf böse zu sein'