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

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

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

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

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

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

33
задан 19 February 2011 в 14:31

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 работал под вашим пользователем.

0
ответ дан 19 February 2011 в 14:31

Если ваши серверные документы находятся в каталоге /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 group):

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 и сделать его исполняемым, используя: [ 1118]

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

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

public_html_fix.sh
0
ответ дан 19 February 2011 в 14:31

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

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

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

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

пользователю «myhome» имеет доступ для записи

0
ответ дан 19 February 2011 в 14:31

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

0
ответ дан 19 February 2011 в 14:31

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

Похожие вопросы: