Проблемы с разрешениями для /var/www/html и моего собственного домашнего каталога для корневого документа веб-сайта

Я пытаюсь нет дайте 777 разрешение в моем /var/www/html папку, но я хочу редактировать свои файлы без sudo. Итак, я, хотя и создаю символическую ссылку на папку в моем домашнем каталоге внутри /var/www/html. Я создал его с помощью sudo ln -sT /home/andre/www/moodle/ moodle , и в ls -la результат таков:

andre@andre-270E5G:/var/www/html$ ls -latotal 8drwxr-xr-x 2 root root 4096 Mai  4 10:20 .drwxr-xr-x 4 root root 4096 Abr 29 14:29 ..lrwxrwxrwx 1 root root   23 Mai  4 10:20 moodle -> /home/andre/www/moodle/

Итак, моя папка moodle имеет права на чтение, запись и выполнение для всех, а это не то, чего я хочу. Я использовал команду sudo chmod -R 775 moodle/ пытался изменить его, но он остался с разрешениями на чтение, запись и выполнение для всех. Я попробовал то же самое с папкой moodle в /home/andre/www/moodle, но все осталось по-прежнему. Выход из ls -la в /home/andre/www/ является:

andre@andre-270E5G:~/www$ ls -latotal 28drwxrwxr-x  3 andre andre  4096 Mai  4 10:02 .drwx------ 49 andre andre 20480 Mai  4 10:01 ..drwxrwxr-x 41 andre andre  4096 Mai  4 10:02 moodle

Итак, папка moodle в /home/andre/www/ имеет нужные мне разрешения.

В качестве дополнительной проблемы, когда я получаю доступ localhost/moodle Я получаю 403 Запрещенную ошибку.

Что я здесь делаю не так?

Вам никогда не придется запускать веб-сайт из вашего домашнего каталога. когда-либо. В противном случае вам пришлось бы предоставить веб-серверу возможность проходить через /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:

  1. Предоставьте Apache доступ к папкам и файлам, чтобы он мог обслуживать сайт без ошибок 403.
  2. Дайте вашему пользователю "владельца" над файлами и папками и предоставьте себе право чтения / записи для всех файлов и папок, а также возможность перемещаться по каталогам.
  3. (Необязательно, но рекомендуется) Настройте его таким образом, чтобы для любых файлов или папок, созданных отсюда, во всей структуре каталогов была установлена группа, равная www-data.
  4. (Необязательно) Заключительная очистка безопасности, при которой мы настраиваем разрешения, чтобы вы и веб-сервер могли видеть данные сайта, но другие пользователи не могли получить доступ к файлам или структуре каталогов сайта.

(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, конечно), видели наши данные, нам нужно будет выполнить следующие действия:

  1. Верните право собственности пользователю системы веб-сервера www-data.
sudo chown -R www-data:www-data /var/www/html
  1. Рекурсивно предоставлять вам доступ к файлам для чтения / записи, одновременно предоставляя другим пользователям (исключая www-data и root конечно) нет доступа к файлам.
sudo find /var/www/html -type f -exec setfacl -m u:YOURUSERNAME:rw -m other::--- {} \;
  1. Рекурсивно дайте себе возможность чтения / записи / обхода каталогов, удалите доступ к папкам для других пользователей (исключая www-data и root) и установите это в качестве ACL по умолчанию для новых файлов в каталогах.
sudo find /var/www/html -type d -exec setfacl -d -m u:YOURUSERNAME:rwx -m o::--- {} \;
  1. Нам также необходимо установить setgid бит для всех каталогов, так что, если вы создадите файл, веб-сервер все равно сможет получить к нему доступ как www-data через групповые разрешения.
sudo find /var/www/html -введите d -exec chmod g+x {} \;

И теперь у вас есть доступ ко всем каталогам, и вам не нужно было лишать доступа от www-data что помогает, поскольку веб-сервер по-прежнему может создавать файлы везде, где это необходимо (например, интерфейсы на основе PHP, имеющие свои собственные каталоги кэша, и такие, которые необходимо создавать и записывать для правильной работы).

Единственное предостережение: если вы вручную создаете новые файлы, вам необходимо соответствующим образом настроить их, чтобы передать право собственности веб-серверу. Это простой sudo chown www-data:www-data filename, и списки контроля доступа по-прежнему должны позволять вам иметь действительные права владельца на файл.

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

Отличный ответ Томаса Уорда https://askubuntu.com/a/767534/717860

Вы можете выполнить все рекомендуемые шаги всего за 3 команды вместо 8 команд:

3 команды:

sudo chown -R ubuntu:www-data /var/wwwsudo find /var/www -type d -exec chmod 2750 {} \+sudo find /var/www -type f -exec chmod 640 {} \+

выполните ту же работу, что и следующие 8 команд:

sudo chgrp -R www-data /var/wwwsudo find /var/www -type d -exec chmod g+rx {} +sudo find /var/www -type f -exec chmod g+r {} +sudo chown -R ubuntu /var/www/sudo find /var/www -type d -exec chmod u+rwx {} +sudo find /var/www -type f -exec chmod u+rw {} +sudo find /var/www -type d -exec chmod g+s {} +sudo chmod -R o-rwx /var/www/

Вся идея использования символических ссылок для решения проблемы с разрешениями ошибочна и не может работать. Разрешения, которые отображаются для самой символической ссылки, в основном не имеют значения, они не могут быть использованы для обхода разрешений "реального" каталога. Создание символической ссылки из /var/www/html/moodle к /home/andre/www/moodle/ не обходит разрешения для /home/andre/www/moodle/. Любой, кто хочет заниматься чем-то в /var/www/html/moodle может сделать это только в том случае, если у него есть необходимые разрешения для /home/andre/www/moodle/.

Ваше исполнение sudo chmod -R 775 moodle/ на самом деле сделал иметь эффект, но в отличие от того, что вы думали, это изменило разрешение не символической ссылки, а цели символической ссылки /home/andre/www/moodle/.

Ошибка 403, которую вы получаете на веб-сервере, вероятно, связана с тем, что ваш веб-сервер не имеет необходимых разрешений для входа /home/andre. Это не "дополнительная проблема", а из-за той же проблемы с разрешением.

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

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

Пример разрешения (который может не работать для вашего варианта использования из-за отсутствия информации):

andre@fermat:/var/www/html$ ls -al moodle/total 0drwxr-x--- 2 andre www-data 60 mai  4 16:20 .drwxr-xr-x 3 root  root     80 mai  4 16:20 ..-rw-r----- 1 andre www-data  0 mai  4 16:20 index.html

Вы можете видеть, что у каталога достаточно доступа для вас как владельца, чтобы войти в него и изменить его содержимое, веб-сервер (в группе www-data) можно вводить и читать. Сами файлы доступны для чтения и записи для вас (владельца) и доступны для чтения на веб-сервере (в группе www-data). Все остальные пользователи не имеют никакого доступа вообще.

Опять же, пожалуйста, возьмите это только в качестве примера. Точный пользователь / группа вашего веб-сервера зависит от вашей конфигурации. И вашему приложению (moodle) могут потребоваться другие разрешения, вы должны ознакомиться с его документацией.