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

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

34
задан 19 March 2017 в 12:02

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 {} +

Это устанавливает "ценуроз набора", укусил для группы в каталоги. Файлы и папки, созданные в этих каталогах, будут всегда иметь www-data как группа, разрешая доступ веб-сервера.


(4) (дополнительно) Заключительная очистка безопасности, если Вы не хотите, чтобы другие пользователи смогли видеть данные

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

sudo chmod -R o-rwx /var/www/html/

Примечание: Вы не должны будете повторно выполнять это в более позднее время или редактировать полномочия для 'другой' категории полномочий здесь. Если 'другие' пользователи не могут добраться до /var/www/html/ (у них нет необходимого +x обдумал /var/www/html пересекать filestructure и структуру каталогов, ни +r бит для чтения списков файлов), затем полномочия на объектах под тем каталогом для других пользователей или групп действительно не собираются иметь значение слишком много.


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

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

Принятие мы все еще работаем с /var/www/html/, и мы не хотим отслеживать пользователей кроме нас и системы (и базируемся, конечно) для наблюдения наших данных, мы должны будем сделать следующие вещи:

  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 -type d -exec chmod g+x {} \;

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

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

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

63
ответ дан 19 March 2017 в 22:02

Идея использования символических ссылок для решения проблемы с разрешениями ошибочна и не может работать. Разрешения, которые показаны для самой символической ссылки, в основном не имеют значения, их нельзя использовать для обхода разрешений «реального» каталога. Создание символической ссылки из /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) могут потребоваться другие разрешения, вам нужно обратиться к его документации.

0
ответ дан 19 March 2017 в 12:02

Превосходный ответ опекой Thomas https://askubuntu.com/a/767534/717860

можно сделать все рекомендуемые шаги во всего 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/
2
ответ дан 19 March 2017 в 22:02
  • 1
    Я уже знал о youtube-dl, но мне didn' t, что Вы могли это. Спасибо за ответ:) – Sol33t303 15 October 2017 в 01:27

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

Похожие вопросы: