Я изменил свой DocumentRoot на /home/user/www
. Чтобы добиться этого, я просто изменил 2 вхождения пути в /etc/apache2/sites-available/default.
Права доступа к /home/user/www — 0774. Я добавил пользователя www-data в свою группу пользователей, а владельцем является /home/user/www
мой собственный пользователь и группа (пользователь:пользователь).
Я сделал это следующим образом:
sudo chmod -R 0774 www
sudo chown -R user:user www
sudo adduser www-data user
Проблема в том, что Apache не может писать в этот каталог. Он может писать только если я установлю www-data как владельца, но если я это сделаю, я не смогу писать в каталог.
Я проверил разрешения с помощью:
sudo -u www-data ls /home/user/www
sudo -u www-data cat /home/user/www/some-file
и это работает.
Но Wordpress, который у меня есть, www
не может удалять или создавать файлы. Есть идеи?
решение1
Вам было бы лучше с каталогом www в /var/www, с владельцем www-data и группой www-data, идобавление вашего пользователя в группу www-data.
Сначала измените DocumentRoot и т. д. обратно на /var/www в конфигурации Apache.
Каталог /var/www (и все его подкаталоги) должны быть setgid, чтобы файлы и каталоги создавались с группой www-data.
Все нижеперечисленное следует запускать от имени пользователя root или с помощью sudo:
mkdir -p /var/www
если в /home/user/www есть какие-либо файлы, которые вы хотите сохранить, переместите их сейчас в /var/www с помощью:
mv /home/user/www/* /var/www/
Теперь исправьте права доступа и владельца каталога /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
В следующий раз, когда «пользователь» войдет в систему (или запустит newgrp www-data
), у него должно быть разрешение на запись в /var/www
Кстати, если вы хотите, чтобы «пользователю» было легче находить веб-файлы, просто создайте символическую ссылку в его домашнем каталоге:
ln -s /var/www/ /home/user/
решение2
Для доступа на чтение/запись важно иметь также права на выполнение родительских каталогов (в вашем случае /home/user). Проверитьэтототвечать.
Вы используете корень в /home/user/www (который попадает подпользователяДомашний каталог и домашние каталоги по умолчанию имеют права доступа 700 на момент создания. Попробуйте создать, например, корень для Apache где-нибудь в другом месте./apache/www
решение3
Если ваш дистрибутив использует что-то вроде SELinux или App Armor, то вам, скорее всего, потребуется предоставить доступ процессу Apache, чтобы ему было «разрешено» получать доступ к области домашнего каталога.
Булевы значения SELinux
Эту команду можно использовать для просмотра списка логических значений, относящихся к httpd
(Apache).
$/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
Это логическое значение необходимо включить:
httpd_enable_homedirs --> on
Контекстные метки
Кроме того, вам необходимо добавить контекст SELinux (метку) к каждому каталогу, который по сути сообщает SELinux, что к этому каталогу или файлу разрешен доступ любой службе/демону, связанному с этой меткой. Apache (httpd) использует эту метку:
httpd_sys_content_t:s0
Итак, вам нужно запустить эту команду, chcon
чтобы добавить эту метку к файлам/каталогам в /home. Только добавьте метку в каталог, из которого Apache будет обслуживать файлы.
$ chcon -R -t httpd_sys_content_t /home/user/www
Вы можете убедиться, что это сработало, переключившись -Z
на ls
, который покажет вам контекстные метки.
$ ls -Z /var/www/manual/
drwxr-xr-x root root system_u:object_r:httpd_sys_content_t:s0 mod