Я сделал символическую ссылку, когда вошел как www (пользователь apache):

ln -s /home/anotheruser/test /var/www/test

Теперь я захожу на mydomain.com/test и получаю ошибку 403.

/home/anotheruser/ имеет права доступа 764 (чтение группы + запись и публичное чтение) otheruser и www находятся в одной группе.

Итак, какие разрешения я должен дать папке /home/anotheruser чтобы это работало?

3 ответа3

1

Убедитесь, что у вас есть Apache, настроенный на использование символических ссылок

Пример конфигурации:

<VirtualHost *:80>
    ServerAdmin SomeUser@SuperUser.com

    DocumentRoot /var/www/test
    <Directory />
        Options FollowSymLinks
        AllowOverride None
    </Directory>
<VirtualHost>
0

Эта ошибка HTTP не может быть связана с файловой системой как таковой, вы можете выбрать список всех файлов, как правило:

   <VirtualHost *:80>
     ...
     <Directory>
       Options +Indexes
     </Directory>   
     ...
   </VirtualHost>

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

0

Этот ответ немного длинный, но я думаю, что фон здесь важен, поэтому, пожалуйста, потерпите меня.

Причина проблемы

Когда вы используете символическую ссылку, то, что вы говорите, по сути «вместо того, чтобы искать здесь (/var/www/test), вы должны посмотреть на этот каталог там (/home/anotheruser/test)». Чтобы это работало при обслуживании веб-файлов, вам нужно две вещи:

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

Для примера: файл /etc /passwd доступен для чтения всем. Тем не менее, вы, вероятно, не хотите, чтобы он читался для всего мира, поэтому даже если вы создадите символическую ссылку (ln -s /etc/passwd /var/www/test/passwd), она все равно не будет доступна для чтения, если вы в частности, сообщите apache, что он разрешает сервировать файлы из /etc.

Как это исправить

Вам нужно либо переместить файлы в каталог, из которого apache разрешено использовать серверные страницы, либо разрешить apache обслуживать страницы из каталога, в котором находятся файлы.

Решение 1 - переместить файлы

Самое быстрое решение - перевернуть символическую ссылку - создайте каталог /var/www/test , сделайте другого пользователя владельцем и выполните ln -s /var/www/test /home/anotheruser/ . Таким образом, все файлы на самом деле хранятся в /var/www , поэтому apache может их обслуживать.

Решение 2 - разрешить каталог

Добавьте директиву в httpd.conf, чтобы позволить apache обслуживать контент из /home/anotheruser/test . Затем просто удалите символическую ссылку и установите вместо нее псевдоним. Как это:

Alias /test /home/anotheruser/test

<Directory /home/anotheruser/test>
    Order allow,deny
    Allow from all
</Directory>

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .