Проблемы с разрешениями для /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 -la
total 8
drwxr-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 -la
total 28
drwxrwxr-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 Запрещенную ошибку.

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

3 ответа

Решение

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

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

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

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

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

Отличный ответ Томас Уорд /questions/290929/problemyi-s-razresheniyami-dlya-varwwwhtml-i-moego-sobstvennogo-domashnego-katal/290938#290938

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

3 команды:

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

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

sudo chgrp -R www-data /var/www
sudo 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 0
drwxr-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) могут потребоваться другие разрешения, вам необходимо ознакомиться с его документацией.

Другие вопросы по тегам