Проблема с разрешениями: как 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
, Обновите свои символические ссылки, и все готово.