Вам никогда не придется запускать веб-сайт из вашего домашнего каталога. когда-либо. В противном случае вам пришлось бы предоставить веб-серверу возможность проходить через /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/htmlsudo find /var/www/html -type d -exec chmod g+rx {} +sudo find /var/www/html -type f -exec chmod g+r {} +
Это рекурсивно устанавливает 'group' равным 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
.
sudo chown -R www-data:www-data /var/www/html
- Рекурсивно предоставлять вам доступ к файлам для чтения / записи, одновременно предоставляя другим пользователям (исключая
www-data
и root
конечно) нет доступа к файлам.
sudo find /var/www/html -type f -exec setfacl -m u:YOURUSERNAME:rw -m other::--- {} \;
- Рекурсивно дайте себе возможность чтения / записи / обхода каталогов, удалите доступ к папкам для других пользователей (исключая
www-data
и root
) и установите это в качестве ACL по умолчанию для новых файлов в каталогах.
sudo find /var/www/html -type d -exec setfacl -d -m u:YOURUSERNAME:rwx -m o::--- {} \;
- Нам также необходимо установить
setgid
бит для всех каталогов, так что, если вы создадите файл, веб-сервер все равно сможет получить к нему доступ как www-data
через групповые разрешения.
sudo find /var/www/html -введите d -exec chmod g+x {} \;
И теперь у вас есть доступ ко всем каталогам, и вам не нужно было лишать доступа от www-data
что помогает, поскольку веб-сервер по-прежнему может создавать файлы везде, где это необходимо (например, интерфейсы на основе PHP, имеющие свои собственные каталоги кэша, и такие, которые необходимо создавать и записывать для правильной работы).
Единственное предостережение: если вы вручную создаете новые файлы, вам необходимо соответствующим образом настроить их, чтобы передать право собственности веб-серверу. Это простой sudo chown www-data:www-data filename
, и списки контроля доступа по-прежнему должны позволять вам иметь действительные права владельца на файл.
Есть несколько случаев, когда мне приходилось делать это как системному администратору для какого-то нестандартного доступа без изменения владельцев данного файла. Это работает, но имеет свои собственные головные боли, так как не каждая файловая система поддерживает списки доступа к файлам.