Ich habe mein DocumentRoot in geändert /home/user/www
. Dazu habe ich einfach die beiden Vorkommen des Pfads unter /etc/apache2/sites-available/default geändert.
Die Berechtigungen von /home/user/www sind 0774. Ich habe den Benutzer www-data zu meiner Benutzergruppe hinzugefügt und der Besitzer /home/user/www
ist mein eigener Benutzer und meine eigene Gruppe (Benutzer:Benutzer).
Ich habe das getan, indem ich:
sudo chmod -R 0774 www
sudo chown -R user:user www
sudo adduser www-data user
Das Problem ist, dass Apache nicht in dieses Verzeichnis schreiben kann. Es kann nur schreiben, wenn ich www-data als Besitzer einstelle. Wenn ich das mache, kann ich aber nicht in das Verzeichnis schreiben.
Ich habe die Berechtigungen getestet mit:
sudo -u www-data ls /home/user/www
sudo -u www-data cat /home/user/www/some-file
und es funktioniert.
Aber das Wordpress, das ich habe, www
kann keine Dateien löschen oder erstellen. Irgendwelche Ideen?
Antwort1
Besser wäre das www-Verzeichnis unter /var/www gewesen, mit dem Besitzer www-data und der Gruppe www-data, undHinzufügen Ihres Benutzers zur WWW-Datengruppe.
Ändern Sie zunächst in der Apache-Konfiguration DocumentRoot usw. zurück in /var/www.
Das Verzeichnis /var/www (und alle darin enthaltenen Unterverzeichnisse) sollte setgid sein, sodass Dateien und Verzeichnisse mit der Gruppe www-data erstellt werden.
Alles Folgende sollte als Root oder mit sudo ausgeführt werden:
mkdir -p /var/www
Wenn sich in /home/user/www Dateien befanden, die Sie behalten möchten, verschieben Sie diese jetzt mit folgendem Befehl nach /var/www:
mv /home/user/www/* /var/www/
Korrigieren Sie nun die Berechtigungen und den Besitz des Verzeichnisses /var/www.
chown -R www-data:www-data /var/www
chmod -R 775 /var/www
find /var/www -type d -print0 | xargs -0r chmod g+s
adduser user www-data
Wenn sich der Benutzer das nächste Mal anmeldet (oder ausführt newgrp www-data
), sollte er Schreibberechtigung für /var/www haben.
Übrigens, wenn Sie es „Benutzern“ leicht machen möchten, die Webdateien zu finden, erstellen Sie einfach einen symbolischen Link in ihrem Home-Verzeichnis:
ln -s /var/www/ /home/user/
Antwort2
Für den Lese-/Schreibzugriff ist es wichtig, auch Ausführungsberechtigungen für übergeordnete Verzeichnisse zu haben (in Ihrem Fall /home/user). Überprüfen SieDasAntwort.
Sie verwenden das Stammverzeichnis unter /home/user/www (das unterBenutzerDie Berechtigungen für das Home-Verzeichnis und die Home-Verzeichnisse sind zum Zeitpunkt der Erstellung standardmäßig auf 700 festgelegt. Versuchen Sie beispielsweise, das Root-Verzeichnis für Apache woanders zu erstellen./apache/www
Antwort3
Wenn Ihre Distribution beispielsweise SELinux oder App Armor verwendet, müssen Sie dem Apache-Prozess wahrscheinlich Zugriff gewähren, damit dieser auf den Home-Verzeichnisbereich „zugreifen“ darf.
SELinux-Boolesche Werte
httpd
Mit diesem Befehl können Sie die Liste der mit (Apache) verbundenen Booleschen Werte anzeigen .
$/usr/sbin/getsebool -a | grep httpd
allow_httpd_anon_write --> off
allow_httpd_bugzilla_script_anon_write --> off
allow_httpd_mod_auth_pam --> off
allow_httpd_nagios_script_anon_write --> off
allow_httpd_squid_script_anon_write --> off
allow_httpd_sys_script_anon_write --> off
httpd_builtin_scripting --> on
httpd_can_network_connect --> off
httpd_can_network_connect_db --> off
httpd_can_network_relay --> off
httpd_disable_trans --> off
httpd_enable_cgi --> on
httpd_enable_ftp_server --> off
httpd_enable_homedirs --> on
httpd_rotatelogs_disable_trans --> off
httpd_ssi_exec --> off
httpd_suexec_disable_trans --> off
httpd_tty_comm --> on
httpd_unified --> on
Dieser Boolesche Wert muss aktiviert werden:
httpd_enable_homedirs --> on
Kontextbeschriftungen
Zusätzlich müssen Sie jedem Verzeichnis einen SELinux-Kontext (ein Label) hinzufügen, der SELinux im Wesentlichen mitteilt, dass auf dieses Verzeichnis oder diese Datei von jedem Dienst/Daemon zugegriffen werden darf, der diesem Label zugeordnet ist. Apache (httpd) verwendet dieses Label:
httpd_sys_content_t:s0
Sie müssen also diesen Befehl ausführen, chcon
um dieses Label den Dateien/Verzeichnissen unter /home hinzuzufügen. Fügen Sie das Label nur dem Verzeichnis hinzu, aus dem Apache die Dateien bereitstellt.
$ chcon -R -t httpd_sys_content_t /home/user/www
Sie können dies bestätigen, indem Sie -Z
auf wechseln ls
. Dadurch werden Ihnen die Kontextbeschriftungen angezeigt.
$ ls -Z /var/www/manual/
drwxr-xr-x root root system_u:object_r:httpd_sys_content_t:s0 mod