Проблема с разрешениями Apache2

Проблема с разрешениями Apache2

Я изменил свой 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

Рекомендации

Связанный контент