我有一些静态资源(mp3 和图像),想要在 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-data 用户访问它吗?
答案1
目录的权限是什么/media/USER/KINGSTON/audio
?请记住,Apache 需要在其遍历的目录上使用 +x。
因此/media/
,/media/USER
、/media/USER/KINGSTON/
和/media/USER/KINGSTON/audio
需要为 world 加上 +x,以便 www-data 能够访问它。sudo chmod +x /path
对于上述每个目录,都可以使用 、 来完成。如果 KINGSTON 设备是不是unix 文件系统,您可能会遇到挑战,因为它没有传统的 Unix ACL。
此外,如果这是一个永久的解决方案,我可能会将其添加为正常挂载点。至于如何做到这一点,看看这个问答
举一个简单的例子 - 请注意,# 提示表示以 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