我是Mac和Apache的新手。我的开发机器我的网站无法访问网络根目录/图像或/css文件夹下的任何文件。
apache 日志给出以下错误:
(13)权限被拒绝:文件权限拒绝服务器访问:
该网站托管在"网站"文件夹下。我在此文件夹上签入了"获取信息",似乎"每个人"都有读取访问权限。什么给?
谢谢!
问题是 Apache 运行的用户与文件所有者不同,并且 Apache 的用户没有读/写/执行权限。在我的情况下,用户是_www
并且是_www
组的成员。
我解决了将文件组更改为_www
的问题:
-
查找 apache 的用户和组。我使用了这个 php 脚本:
<?php echo exec('whoami') . '<br>'; echo exec('groups') . '<br>'; ?>
-
使用文件的用户所有者登录。
-
将文件的用户所有者添加到
_www
组。$ sudo dseditgroup -o edit -a userOwnerOfFiles -t user _www
-
更改需要
_www
的文件组$ chgrp -R _www path/containing/files
-
更改组的文件权限
$ chmod -R g+rwx path/containing/files
解决此问题的另一种方法是在MacOSX中使用扩展属性
chmod +a "_www允许列表,读取,搜索,读取,读取安全,file_inherit,directory_inherit"/path/to/document_root
是一个艰难的问题。事实证明,我需要向 Web 服务器授予对整个目录树一直到文档根的权限。
它今天出现在我身上,因为我正在使用虚拟主机并将文件存储在我的用户目录中的树上。
我不想递归更改文档目录中的所有数千个文件,所以我只是对路径中的每个文件夹进行了 chmod。在我的主目录中:
$ chmod 755 Documents
$ chmod 755 Documents/projects
$ chmod 755 Documents/projects/dev
$ chmod 755 Documents/projects/dev/someglamorousclientname/
$ chmod 755 Documents/projects/dev/someglamorousclientname/docroot
我发现有两件事对我有用(我专门试图让 apache 访问下载文件夹):
-
在"系统偏好设置"-">安全和隐私"->"隐私"中,滚动到左侧的"完全磁盘访问",确保在底部解锁,然后单击 + 以添加应用。 导航到/usr/sbin 并找到可执行
httpd
并添加它,确保它启用了完全磁盘访问权限。重新锁定首选项 -
右键单击 Finder 中的特定文件夹并选择"获取信息",然后在"共享和权限"下,允许"每个人"用户访问(或者,如果您想提高安全意识,也许只允许"_www"用户 - 但我没有测试这个)。
这为我解决了
这种方法测试安全快捷,如果不起作用,很容易切换回来(它不会把事情搞砸得更乱,这在解决这类问题时经常是一个问题:
- 找到
httpd.conf
(您可以使用终端中的httpd -V
进行操作) - 在括号或任何文本编辑器中打开此文件
- 在此文件中,找到:
User _www
Group _www
- 将其
更改为User {your username}
Group staff
也许您将不得不在User
中添加其他内容并Group
:
- 在此
httpd.conf
文件中,您还可以找到指向Web服务器的路径,只需搜索DocumentRoot
即可。复制此路径,并使用以下命令在终端中导航到它cd
例如:cd /Library/WebServer/Documents
- 当你在的时候,做一个
ls -l
。这将为您提供有关网络根文件夹所有权的信息。调整您的User
,并在httpd.conf
中Group
与此有关 - 您还可以输入webroot文件夹并使用
ls -l
检查站点所有权,并更新有关此httpd.conf
。
如果这不起作用,请不要忘记切换回:User _www
Group _www