Я знаю, что права доступа к файлам уже рассматривались здесь, но я изо всех сил пытаюсь разобраться в концепции моего сценария.
, пытаясь это исправить, я предполагал, что они все еще должны принадлежать предыдущему владельцу Таким образом, я запустил chown -R
в каталоге с моим именем пользователя в качестве аргумента, чтобы взять на себя ответственность за все файлы в каталоге. Следует отметить, что имена пользователей между новой и старой установками Ubuntu были одинаковыми.
Когда я пытаюсь снова запустить файлы, возникает та же проблема: ошибка 500 из-за проблем с разрешениями. Может кто-нибудь сказать мне, какие еще шаги я должен предпринять?
Webroot для моей установки apache находится внутри моей домашней папки. Если я создаю новые файлы в своем webroot, они также работают как положено, только старые файлы, которые вызывают проблему.
В каталогах над вашим 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
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
Лучший способ, который я нашел, - это то, как 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
. Обновите свои символические ссылки, и все готово.