在你提问之前,我试图搜索类似的问题,其中没有一个问题确切存在。
我是新手,我在运行Raspbian的RasPi上安装了Apache2,PHP5和MySQL5。
根据需要,我将index.html
放在/var/www/html
中,当我单独键入我的Pi的IP或后跟/index.html
时,index.html
正确运行其代码和所有元素出现。
问题:此外,我将我的JS和CSS文件放在同一个文件夹中,还有几张照片要显示。
浏览器彻底读取HTML,但不加载由此链接的JS和CSS文件,也不加载图像。 将文件放在子文件夹中也没有帮助。
当我输入IP后跟/style.css
(我链接的CSS文件的名称)时,我得到 403 Forbidden 。错误日志也显示了这一点:
file permissions deny server access: /var/www/html/photo.jpg, referer: http://192.168.178.120/
access to /images/dark.jpg denied because search permissions are missing on a component of the path, referer: http://192.168.178.120/
我试过研究这个,但没有任何帮助。当我的JS和CSS在我的HTML中时,除了图像之外,一切正常
结论: Apache不允许浏览器加载index.html
以外的文件。
你知道这个问题是什么吗?是否有一个特定的文件夹,我应该把我的其他文件?提前谢谢。
答案 0 :(得分:1)
根据ls
的结果,Apache无法访问您的文件。
运行以下两个命令:
find /var/www/html -type f -exec chmod 644 {} \;
find /var/www/html -type d -exec chmod 755 {} \;
pi@raspberrypi:~ $ ls -l /var/www/html
total 2976
-rw------- 1 pi pi 60146 Jul 23 22:11 bnw.jpg
-rw------- 1 pi pi 202851 Jul 23 22:11 color.jpg
-rw------- 1 pi pi 617185 Jul 23 21:27 dark.jpg
-rw------- 1 pi pi 2028727 Jul 23 22:11 effect.jpg
drwx------ 2 pi pi 4096 Jul 23 21:33 images
-rw------- 1 pi pi 2238 Jul 23 22:11 index.css
-rw-r--r-- 1 pi root 1261 Jul 23 22:11 index.html
-rw------- 1 pi pi 108397 Jul 23 22:11 photo.jpg
-rw------- 1 pi pi 538 Jul 23 22:11 script.js
-rw------- 1 pi pi 2238 Jul 23 21:33 style.css
该行开头的符号具有以下含义:
d: indicates a directory
r: means the file/directory is readable
w: means the file/directory is writable
x: means the file/directory is executable
-: means none of the above apply
这些符号分组如下:
drwxrwxrwx
^^^ apply to all users on the system
^^^--- apply to all users in the group that owns the file
^^^------ apply to the user that owns the file
它所指的pi pi
指的是文件的所有者:组pi
中的用户pi
。您的index.html
文件是一个例外,因为它由组root
拥有。
现在这不是很重要,除此之外你需要意识到Apache通常作为组www-data
中的用户www-data
运行。这在系统与系统之间略有不同,但这是最常见的。这意味着,为了使Apache能够访问文件,必须使www-data
用户或www-data
组(或两者)都可以使用该文件。
在您的情况下,文件归用户pi
和组pi
所有(index.html除外,它由组root
拥有。不是那个用户,很可能不在这两个组中,这意味着必须正确设置"系统上所有用户的文件权限,以便Apache能够访问该文件。
如您所见,index.html
设置为系统上所有用户都可读:
-rw-r--r-- 1 pi root 1261 Jul 23 22:11 index.html
^^^ all users on the system may read from this file, but may not write and may not execute the file
^^^--- all users in the group "root" may read from this file, but may not write and may not execute the file
^^^------ the user "pi" may read from and write to this file, but may not execute the file
所有其他文件,包括images
目录,只能由" pi"用户:
-rw------- 1 pi pi 2028727 Jul 23 22:11 effect.jpg
^^^ all users on the system may not read from, write to or execute this file
^^^--- all users in the group "pi" may not read from, write to or execute this file
^^^------ the user "pi" may read from and write to this file, but may not execute it
因此,要让effect.jpg
可供Apache使用,您需要将文件权限更改为:
-rw----r-- 1 pi pi 2028727 Jul 23 22:11 effect.jpg
^^^ all users on the system (including Apache) may read from this file
为此,您可以使用chmod
命令。有两种方法可以翻转该权限:
chmod o+r effect.jpg
chmod 604 effect.jpg
chmod o+r
表示"添加' r'允许其他用户使用'类别" (您使用u+r
或g+r
更改用户或群组权限)。
chmod 604
表示"将用户的权限设置为6,组为0,其他为4" - 数字是权限的二进制和:1(可执行),2(可写),4(可读)。
目录需要更多的工作:
drwx------ 2 pi pi 4096 Jul 23 21:33 images
要允许文件系统实际打开目录并读取其中的文件,对于尝试访问其内容的用户,它必须是可执行的。因此,为了允许Apache从该文件夹中读取任何文件,它需要具有以下权限:
drwx---r-x 2 pi pi 4096 Jul 23 21:33 images
^^^ all users on the system may read from this directory and execute it
为此,请使用相同的原则:
chmod o+rx images
(其他用户,添加可读和可执行权限)
chmod 705 images
(为所有者设置read(4)+ write(2)+ execute(1),为所有其他用户设置read(4)+ execute(1))
现在,虽然如果所有者和群组是相同的并不是绝对必要的,但最佳做法是确保该群组具有与"所有其他用户相同的权限。类别。因此,不是提供文件604
(-rw----r--
)和文件夹705
(drwx---r-x
),而是给他们644
{{{ 1}})和-rw-r--r--
(755
)。如果您在多个开发人员需要能够修改文件的环境中工作,那么它们应该位于同一个用户组中,最佳做法是为该组授予与所有者相同的权限,因此{{1} (drwxr-xr-x
)和644
(-rw-rw-r--
)。
最后,您不希望手动更改所有文件权限。这个特别的项目似乎相对较小,但它仍然令人烦恼。幸运的是,我们可以使用775
命令执行批量更新。
drwxrwxr-x
将列出给定文件夹的完整内容,包括子文件夹,然后您可以对其进行过滤或执行操作。
find
这将列出find
或所有常规文件子文件夹中的所有条目。
find /var/www/html -type f
这将列出/var/www/html
或任何目录子文件夹中的所有条目。
我们可以使用find /var/www/html -type d
告诉/var/www/html
在找到的每个文件/文件夹上自动执行某个命令:
-exec
find
是一个占位符,其中find /var/www/html -type f -exec chmod 644 {} \;
将放置每个文件名。需要{}
来通知find
不会提供\;
命令的其他参数,因此我们可以选择为find
本身添加其他参数。
因此上面的命令将修复所有文件的权限,以下命令将修复所有文件夹的权限:
-exec
之后,Apache应该可以访问find
中的所有文件和文件夹。请记住,每次在该文件夹中创建新文件时,都需要检查权限并在必要时进行修复。