Я пытаюсь не давать разрешения 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 Запрещенную ошибку.
Что я здесь не так делаю?
Вам никогда не придется выполнять веб-сайт из Вашего корневого каталога. КОГДА-ЛИБО. Необходимо было бы иначе дать веб-серверу способность пересечь через /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
:
www-data
.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
группа установила правильно.
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
объект на объектах каталога). Мы затем устанавливаем все файлы, чтобы иметь полномочия чтения-записи для владельца, которого мы просто устанавливаем.
www-data
как пользователь 'доступа'.sudo find /var/www/html -type d -exec chmod g+s {} +
Это устанавливает "ценуроз набора", укусил для группы в каталоги. Файлы и папки, созданные в этих каталогах, будут всегда иметь www-data
как группа, разрешая доступ веб-сервера.
Нам нужен Ваш пользователь для наблюдения каталогов и файлов. Нам нужен веб-сервер, чтобы сделать так также. Мы не можем хотеть, чтобы другие пользователи системы (кроме корня) видели данные. Так позволяет не, дают им, что доступ, и делает его поэтому, только Ваш пользователь и веб-сервер видят данные.
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/
, и мы не хотим отслеживать пользователей кроме нас и системы (и базируемся, конечно) для наблюдения наших данных, мы должны будем сделать следующие вещи:
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 -type d -exec chmod g+x {} \;
И теперь у Вас есть доступ ко всем каталогам, и Вы не должны были устранять доступ из www-data
который помогает, поскольку веб-сервер может все еще создать файлы везде, поскольку ему нужно к (такие как PHP базирующийся frontends наличие их собственных каталогов кэша и такая необходимость быть созданным и записанным в для правильного функционирования).
Единственный протест: при ручном создании новых файлов Вам нужны к показанному они соответственно для предоставления владения веб-серверу. Это - простое sudo chown www-data:www-data filename
, и списки управления доступом должны все еще позволить Вам иметь эффективные права владельца на файл.
Существует несколько случаев, где я должен был сделать это как системный администратор для некоторого типа нестандартного доступа, не изменяя владельцев данного файла. Это работает, но страдает от его собственных головных болей, как не каждый доступ к файлу поддержки файловой системы списки.
Идея использования символических ссылок для решения проблемы с разрешениями ошибочна и не может работать. Разрешения, которые показаны для самой символической ссылки, в основном не имеют значения, их нельзя использовать для обхода разрешений «реального» каталога. Создание символической ссылки из /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) могут потребоваться другие разрешения, вам нужно обратиться к его документации.
Превосходный ответ опекой 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/