Вы никогда не должны запускать веб-сайт из своего домашнего каталога . КОГДА-ЛИБО. В противном случае вам пришлось бы дать веб-серверу возможность/home/просматривать структуру каталогов, а также/home/$USER/(домашний каталог вашего пользователя, где мы можем попробовать и посмотреть, что еще существует в вашем каталоге пользователей), а также любые другие подпапки. там. Плохо настроенный или неправильно настроенный или не исправленный веб-сервер может привести к такой большой утечке данных или потере учетных данных и тому подобному, что может подвергнуть риску ваши личные данные и логины. Используемый вами символьный подход также не помогает по той же причине, что и попытка предоставить Apache разрешения на чтение./home/andre/www/moodle- веб-сервер должен иметь возможность проходить по вашему домашнему каталогу, чтобы добраться до места, на которое /var/www/htmlуказывает символическая ссылка , что все еще представляет собой угрозу безопасности.
Во-первых, используйте sudo cp -r /home/andre/www/moodle/ /var/www/html/. Это скопирует ваши файлы /var/www/htmlи сохранит их вдали от вашего домашнего каталога. Затем мы переделаем разрешения, чтобы вы и веб-сервер могли получить доступ ко всему в этом каталоге, и предоставили вашему пользователю полное чтение / запись для всех файлов и каталогов. Тогда вам придется работать только /var/www/htmlдля вашего сайта.
По сути, это четыре шага после того, как вы скопировали свои данные обратно в /var/www/html:
- Предоставьте Apache доступ к папкам и файлам, чтобы он мог обслуживать сайт без 403 ошибок.
- Дайте своему пользователю «владелец» над файлами и папками, а также предоставьте себе права на чтение / запись для всех файлов и папок, а также возможность просматривать каталоги.
- (Необязательно, но рекомендуется). Настройте его так, чтобы для всех файлов или папок, созданных в дальнейшем во всей структуре каталогов, была задана группа
www-data.
- (Необязательно) Окончательная очистка безопасности, когда мы настраиваем разрешения, чтобы вы и веб-сервер могли видеть данные сайта, но другие пользователи не могут получить доступ к файлам или структуре каталогов сайта.
(1) Разрешить Apache доступ к папкам и файлам.
sudo chgrp -R www-data /var/www/html
sudo find /var/www/html -type d -exec chmod g+rx {} +
sudo find /var/www/html -type f -exec chmod g+r {} +
Это рекурсивно устанавливает «группу» www-dataдля папок и файлов. Затем это дает веб-серверу разрешение на восстановление и получение доступа к структуре корневых каталогов документов сайта ( +xтолько для каталогов). Затем он также гарантирует, что веб-сервер имеет разрешения на чтение для всех файлов, что позволяет получать данные сайта.
Могут быть случаи, когда вы должны дать веб-серверу разрешение на запись в файл или в каталог - это можно сделать, выполнив sudo chmod g+w /var/www/html/PATH(где PATHуказан путь к файлу или папке в структуре каталогов, где необходимо применить разрешения на запись для веб-сервера).
ЗАМЕЧАНИЕ . Во многих случаях это может предоставить «защищенную» информацию о конфигурации сайта (например, учетные данные для доступа к базе данных и т. Д.), И вам следует удалить «другие» права доступа к этим данным в этих отдельных файлах или каталогах с помощью следующее: sudo chmod o-rwx /var/www/html/FILEPATH(замена FILEPATHна путь относительно /var/www/htmlпапки для файла).
Также обратите внимание, что вам, возможно, придется в будущем запускать эти команды, если «новые файлы» получат 403 проблемы, чтобы дать правильные разрешения веб-серверу, чтобы иметь возможность доступа к файлам и папкам, которые созданы или скопированы, и не получают www-dataгруппу набора правильно.
(2) Предоставьте своему владельцу права на чтение / запись для папок и файлов и разрешите доступ к папкам для обхода структуры каталогов.
sudo chown -R USER /var/www/html/
sudo find /var/www/html -type d -exec chmod u+rwx {} +
sudo find /var/www/html -type f -exec chmod u+rw {} +
Замените USERв первой команде свое имя пользователя!
Мы делаем три вещи здесь. Во-первых, мы устанавливаем, что ваш пользователь является «владельцем» всех файлов и каталогов в /var/www/html. Затем мы устанавливаем разрешения на чтение и запись для папок и разрешаем вам доступ к папкам, чтобы войти в них ( +xэлемент в элементах каталога). Затем мы устанавливаем для всех файлов права на чтение / запись для владельца, которые мы только что установили.
(3) (Необязательно) Убедитесь, что каждый новый файл после этого создается с www-dataправами доступа.
sudo find /var/www/html -type d -exec chmod g+s {} +
Это устанавливает бит "set gid" для группы в каталогах. Файлы и папки, созданные внутри этих каталогов, всегда будут иметь www-dataгруппу, разрешающую доступ к веб-серверу.
(4) (Необязательно) Окончательная очистка системы безопасности, если вы не хотите, чтобы другие пользователи могли видеть данные
Нам нужен ваш пользователь, чтобы увидеть каталоги и файлы. Нам нужен веб-сервер, чтобы сделать это тоже. Мы можем не захотеть, чтобы другие пользователи системы (кроме root) видели данные. Поэтому давайте не будем предоставлять им такой доступ, а сделаем так, чтобы данные могли видеть только ваш пользователь и веб-сервер.
sudo chmod -R o-rwx /var/www/html/
ПРИМЕЧАНИЕ. Вам не нужно будет повторно запускать это позже или редактировать разрешения для «другой» категории разрешений здесь. Если «другие» пользователи не могут добраться до них /var/www/html/(у них нет необходимого +xбита /var/www/htmlдля обхода файловой структуры и структуры каталогов или +rбита для чтения списков файлов), тогда разрешения для элементов в этом каталоге для других пользователей или группы на самом деле не будут иметь большого значения.
Существует также несколько менее инвазивное решение, хотя не гарантируется работа для всех новых файлов и не гарантируется работа на всех файловых системах , включая списки управления доступом к файлам. Это позволяет вам оставить право собственности на файлы www-dataдля чего-то, но дает вам эффективные права владельца для всех намерений и целей, даже если вы сами не владеете файлами.
Это решение немного менее инвазивно, и позволяет вам иметь каталог и все файлы в пределах принадлежащих www-data:www-dataили, root:www-dataно также дать себе доступ. Он использует списки контроля доступа , которые позволяют нескольким пользователям иметь разрешения без настройки отдельных групп. Это также позволяет пользователям rootили www-dataсистемным пользователям иметь собственные файлы, но также позволяет добавлять дополнительные разрешения в каждом конкретном случае и настраивать разрешения для определенных пользователей, чтобы они могли читать, но не редактировать и тому подобное.
Предполагая, что мы все еще работаем /var/www/html/, и мы не хотим, чтобы наши пользователи, кроме нас и системы (и, конечно, root), могли видеть наши данные, нам нужно будет сделать следующее:
- Верните право собственности пользователю системы веб-сервера
www-data.
Судо Чоун -R www-данные: www-data / var / www / html
- Рекурсивно дает вам возможность чтения / записи в файлах, в то же время предоставляя другим пользователям (исключая
www-dataи, rootконечно) доступ к файлам.
sudo find / var / www / html -type f -exec setfacl -mu: ВАШЕ ИМЯ: rw -m прочее :: --- {} \;
- Рекурсивно предоставьте себя для чтения / записи / перемещения по каталогам, удалите доступ к папкам для других пользователей (кроме
www-dataи root) и установите его в качестве ACL по умолчанию для новых файлов в каталогах.
sudo find / var / www / html -type d -exec setfacl -d -mu: ВАШЕ ИМЯ: rwx -mo :: --- {} \;
- Нам также нужно установить
setgidбит для всех каталогов, чтобы при создании файла веб-сервер мог по-прежнему получать к нему доступ www-dataчерез групповые разрешения.
sudo find / var / www / html -type d -exec chmod g + x {} \;
И теперь у вас есть доступ ко всем каталогам, и вам не нужно было отказываться от доступа, www-dataкоторый помогает, поскольку веб-сервер все еще может создавать файлы везде, где это необходимо (например, основанные на PHP внешние интерфейсы, имеющие свои собственные каталоги кэша и т. Д.). необходимо создать и записать для правильной работы).
Единственное предостережение: если вы вручную создаете новые файлы, вам необходимо соответствующим образом сократить их, чтобы передать право собственности на веб-сервер. Это просто sudo chown www-data:www-data filename, и списки контроля доступа все же должны позволять вам иметь действующие права владельца файла.
Есть несколько случаев, когда мне приходилось делать это как системный администратор для какого-то нестандартного доступа без смены владельцев данного файла. Это работает, но имеет свои собственные головные боли, так как не каждая файловая система поддерживает списки доступа к файлам.
+xдля файлов дало бы исполняемые разрешения, и мы не хотим, чтобы PHP-файлы выполнялись обязательно через командную строку PHP или как исполняемый файл на самом сервере - мы хотим, чтобы они обрабатывались парсером PHP на веб-сервере (и мы не нужно иметь PHP-файлы, чтобы+xсинтаксический анализатор PHP мог их прочитать и обработать). Каталоги нужны+xдля того, чтобы разрешить обход через каталоги - то есть, если каталог не является,+xа я не являюсь пользователем root, я не могу попасть в каталог, что является проблемой, с которой у вас Apache не работает с вашими символическими ссылками и вашим домом каталог.