У меня есть статические ресурсы (mp3s и изображения), которые я хочу использовать на веб-сайте, размещенном на виртуальном хосте Apache, со следующими конфигурациями:
<VirtualHost *:80>
ServerName example.com
serverAlias myexample.loc
DocumentRoot /home/USER/www/yii2/web
<Directory "/home/USER/www/yii2/web">
AllowOverride All
Options Indexes FollowSymLinks MultiViews
Require all granted
</Directory>
</VirtualHost>
Ресурсы находятся во флэш-памяти по пути, подобному следующее:
/media/USER/KINGSTON/audio
Я создал символическую ссылку для вышеуказанного каталога в корне документа сайта, используя ls -s
, например, следующее:
sudo ln -s /media/USER/KINGSTON/audio /home/USER/www/yii2/web
Однако, пытаясь получить доступ к любому ресурс приводит к 403 Forbidden
ошибке. Как я мог дать безопасные разрешения , которые позволяют пользователю www-данных получить к нему доступ?
Каковы права доступа к каталогу /media/USER/KINGSTON/audio
? Помните, что Apache требуется + x в каталогах, которые он проходит.
Таким образом, /media/
, /media/USER
, /media/USER/KINGSTON/
и /media/USER/KINGSTON/audio
должны иметь + x для мира, чтобы www-данные могли иметь к ним доступ. Это можно сделать с помощью sudo chmod +x /path
для каждого из каталогов, указанных выше. Если устройство KINGSTON не является файловой системой Unix, вы можете столкнуться с проблемами, поскольку оно не имеет традиционных списков ACL Unix.
Кроме того, я бы, вероятно, добавил его как обычную точку монтирования, если это постоянное решение. Чтобы узнать, как это сделать, взгляните на этот вопрос & amp; A
. В качестве краткого примера отметим, что # as prompt обозначает команды, запускаемые от имени root, $ обозначает обычного пользователя.
/tmp # mkdir foo
/tmp # chmod 754 foo
/tmp # cd foo
/tmp/foo # mkdir bar
/tmp/foo # chmod 755 bar
/tmp/foo # ls -la
total 20
drwxr-xr-- 3 root root 4096 Dec 24 14:24 .
drwxrwxrwt 57 root root 12288 Dec 24 14:23 ..
drwxr-xr-x 2 root root 4096 Dec 24 14:24 bar
# Note that the directory bar has read and execute permissions for everyone, but /tmp/foo has only read for others than group and user.
/tmp/foo # echo "foo" > bar/foo
$ cd /tmp/foo/bar
bash: cd: /tmp/foo/bar: Permission denied
$ cat /tmp/foo/bar/foo
cat: /tmp/foo/bar/foo: Permission denied
/tmp/foo # chmod +x . #Add execute permission for world to /tmp/foo
$ cat /tmp/foo/bar/foo
foo