我最近发现,只要我提供完整路径,我的 Web 服务器就会为我的文件系统上它具有读取权限的任何文件提供服务。换句话说,像
http://www.example.com/Users/john/Desktop/Costa%20Rica/DSC_0058.jpg
将很高兴由 Web 服务器提供服务。尽管每个设置都DocumentRoot
指向 only /Library/WebServer/Documents
。
为什么 Apache 服务于整个文件系统?可以关闭吗?
我最近发现,只要我提供完整路径,我的 Web 服务器就会为我的文件系统上它具有读取权限的任何文件提供服务。换句话说,像
http://www.example.com/Users/john/Desktop/Costa%20Rica/DSC_0058.jpg
将很高兴由 Web 服务器提供服务。尽管每个设置都DocumentRoot
指向 only /Library/WebServer/Documents
。
为什么 Apache 服务于整个文件系统?可以关闭吗?
尝试查找一个
<Directory />
部分并确保该标签中的任何设置都是限制性的。还要检查 mod_userdir 是否已启用和配置。寻找类似的标签
UserDir
我仍然不知道是什么原因造成的。
我发现它只是从
/Users/john
文件系统的其余部分而不是从文件系统的其余部分提供文件(除了服务器的正确文档根目录),所以我认为它与一些聪明的 OS X 文件共享某些东西有关。我检查了
mod_userdir
,没有启用。我检查了所有Directory
和Location
部分,似乎没有一个允许访问/Users/john
. 配置中没有具体提及john
,我也找不到任何匹配的正则表达式。它似乎与文件扩展名无关(“提供所有图像”或其他东西是有道理的,但也不是这样。)所以我在几个小时后最终做的是在
<Location /Users>
我的全局httpd.conf
中添加一个部分,我禁用了每个人的访问权限,如下所示:(这正是我的
<Directory />
部分的样子,为了记录。)这不是最好的解决方案,但它似乎拒绝访问不应提供的文件。
因为这对我有用,所以我会接受它作为答案。感谢Safado给我的帮助,如果以后有其他人过来有什么线索,请贴出来!这台服务器很可能至少会再服务一段时间,如果有的话,我很乐意尝试更合适的解决方案。
编辑:显然有人
Users -> /Users
在文档根目录中放置了一个符号链接(我之前已经排除了这一点,因为它不提供除 之外的任何用户目录john
)。我猜可能出于某种原因www-data
,运行 Apache 的用户具有读取文件系统权限,/Users/john
但没有读取其中的其他目录/Users
,但无论哪种方式,删除符号链接都解决了我的问题。