Вы никогда не должны запускать веб-сайт из своего домашнего каталога . КОГДА-ЛИБО. В противном случае вам пришлось бы дать веб-серверу возможность/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 не работает с вашими символическими ссылками и вашим домом каталог.