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 rsync
verwenden . Dies weist Sie an, diese bei der Synchronisierung beizubehalten.-A
--acls
rsync
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-data
zusä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, data
als 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 data
Verzeichnis 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 gopher
hat 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