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

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

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

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

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

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

Если ваши серверные документы находятся в /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/bashsudo adduser $USER www-datasudo chown -R www-data:www-data /home/$USER/public_htmlsudo chmod -R 775 /home/$USER/public_html

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

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

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

public_html_fix.sh

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

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


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

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

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

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

Чтобы проверить, видны ли ваши файлы с помощью www-root или любой другой пользователь, запускающий apache (run 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. Обновите свои символические ссылки, и все готово.

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

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

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

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

пользователь "myhome" имеет доступ на запись

777 разрешений в файле позволят всем записывать ваши файлы, что может привести к повреждению ваших страниц или взлому. Вы должны попробовать использовать 755, который обычно используется для файлов php. Убедитесь, что вам не требуется включать “разрешить выполнение” для файла, и в этом случае вы можете запустить chmod [filename] -x. Информацию о команде chmod можно получить, перейдя по следующей ссылке: The chmod command

Хорошо, я решил свою проблему с неисполнением файлов, но я сделал это, просто запустив chmod -R 777 dir в соответствующем каталоге. Я не могу отделаться от мысли, что есть лучший способ сделать это, хотя

Что показывает журнал ошибок Apache?

Я не уверен, что права доступа к файлам копируются при копировании файла, может ли кто-нибудь подтвердить это? В противном случае, можно ли было бы передать файлы какому-либо другому пользователю (или root), а затем вернуть их обратно?