Проблема с разрешениями: как Apache может получить доступ к файлам в моем домашнем каталоге?

Я знаю, что права доступа к файлам были рассмотрены здесь ранее, но я изо всех сил пытаюсь разобраться в концепции моего сценария.

  • Я создал файлы на старой установке Ubuntu.
  • Я скопировал файлы в мою новую установку Ubuntu и поместил их в мой webroot.
  • Когда я пытаюсь запустить файлы (это PHP-файлы), я получаю сообщение об ошибке, касающееся разрешений

пытаясь это исправить, я предположил, что они все еще должны принадлежать предыдущему владельцу, поэтому я побежал chown -R в каталоге, с моим именем пользователя в качестве аргумента, чтобы взять на себя ответственность за все файлы в каталоге. Следует отметить, что имена пользователей между новой и старой установками Ubuntu были одинаковыми.

Когда я пытаюсь запустить файлы снова, та же проблема: ошибка 500 из-за проблем с разрешениями. Кто-нибудь может сказать мне, какие еще шаги я должен предпринять?

Webroot для моей установки apache находится внутри моей домашней папки. Если я создаю новые файлы в моем webroot, они также работают как положено, это только старые файлы, которые вызывают проблему.

4 ответа

Решение

В каталогах над вашим webroot должен быть установлен бит выполнения, чтобы позволить Apache спускаться в каталоги.

Если у вас есть webroot по адресу /home/user/htdocs, /, /home, /home/user а также /home/user/htdocs должен иметь установленный бит выполнения.


Вышеупомянутое решение "работает", но оно не идеально. Если вы создали папку, Apache не сможет написать в нее. Происходит и обратное.

Это можно "исправить", установив umask 0007 и добавив себя в группу Apache (www-data, если я не ошибаюсь), чтобы вновь созданные файлы и папки были доступны для записи группе.

Кроме того, вы можете установить альтернативный Apache MPM: Apache2 MPM ITK ( информация о настройке) и настроить его так, чтобы Apache работал под вашим пользователем.

Если ваш сервер документы находятся в /home/$USER/public_html каталог, который нужно запустить

sudo chown -R www-data:www-data /home/$USER/public_html

передать право собственности на папку DocumentRoot пользователю www-data и группа www-data,

Затем вы можете добавить себя в группу www-data

sudo adduser $USER www-data

Наконец, вам нужно сделать папку DocumentRoot доступной для записи владельцем (пользователем www-data) и самим собой (как часть www-data группа):

sudo chmod -R 775 /home/$USER/public_html

Для удобства вы можете сделать скрипт с именем public_html_fix.sh с содержанием:

#!/bin/bash

sudo adduser $USER www-data
sudo chown -R www-data:www-data /home/$USER/public_html
sudo chmod -R 775 /home/$USER/public_html

Сохраните это внутри /home/$USER/bin и сделать его исполняемым, используя:

sudo chmod +x /home/$USER/bin/public_html_fix.sh

Затем вы вызываете его всякий раз, когда вам нужно, из какой бы файловой системы вы ни оказались:

public_html_fix.sh

Лучший способ, который я нашел, - это то, как VirtualMin это делает.

создать пользователя и группу "myhome"

Сделать пользователя Apache участником группы "myhome". Не наоборот, как некоторые объяснения здесь описывают

Теперь Apache имеет доступ для чтения и выполнения к / home / myhome в дополнение к / home / myhome / www

Пользователь "myhome" имеет право на запись

Помимо chmoding файлов и редактирования apache.conf файлов, я хочу сказать, что у меня ничего не получалось, потому что мои файлы были в разделе, который я автоматически смонтировал через nautilus. Это ограничивает раздел только для вашего пользователя.

Чтобы проверить, видны ли ваши файлы www-root или любой другой пользователь запускает Apache (запустить ps -aux | grep apache2 проверить), выполните следующую команду:

sudo su -l www-data -s /bin/bash

и попробуйте прочитать файл из корня вашего документа.

Если файл не читается, проверьте, что:

1) вы установили все остальные права доступа к файлам

2) вы использовали FollowSymlinks в вашем .conf файлы при необходимости

3) вы установили DocumentRoot

3) смонтировать раздел для всех пользователей. Мне пришлось редактировать /etc/fstab и укажите мой раздел через его UUID:

UUID=afdee1d3-5bb8-4652-892f-e83a9b5ff72e /mnt/4tb      ext4    rw,nosuid,nodev,errors=remount-ro

Затем размонтируйте раздел через nautilus и выполните sudo mount -a, Если все идет хорошо, ваши файлы теперь находятся под /mnt, Обновите свои символические ссылки, и все готово.

Другие вопросы по тегам