Я пытаюсь не давать 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 Запретную ошибку.
Что я делаю неправильно здесь?
Вся идея использования символических ссылок для решения проблемы разрешения является ошибочной и не может работать. Разрешения, которые показаны для самой символической ссылки, в основном неактуальны, они не могут использоваться для обхода разрешений «реального» каталога. Создание символической ссылки от /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/ действительно имело эффект, но отличается от что вы считали, что это не изменило разрешение символической ссылки, а цели symlink /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 ward 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 {} +
3 команды:
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 /