如何在MAC OSx上给Apache访问文件夹的权限?

7
我对Mac和Apache都很陌生。在我的开发机上,我的网站无法访问web根目录下的/images或/css文件夹中的任何文件。
Apache日志显示以下错误:
(13)Permission denied: file permissions deny server access:
该网站托管在“Sites”文件夹下。我在此文件夹上检查了“获取信息”,似乎“每个人”都有读取权限。这是怎么回事?
谢谢!

抱歉,我对OSX不熟悉,但是当我查看“获取信息”时,我看到了三个帐户及其权限。它们是userName(我),staff和everyone。我的帐户具有读/写访问权限,其他两个帐户只有读取权限。我在这里没有看到任何关于组或所有权的提及。 - Nick
这通常意味着所有者是用户名(我),组是staff,但“获取信息”并不总是显示完整的权限。要获取完整的详细信息,请打开终端并运行命令ls -lea /path/to/folder(如果您不确定如何输入路径,可以从Finder中拖放它,它会自动粘贴路径)。 - Gordon Davisson
谢谢提供信息。看起来这两个文件夹都是由我的用户拥有,而且组确实是“staff”。 - Nick
由于列出的权限包括每个人的读取访问权限,并且似乎没有访问控制列表(可以覆盖该权限),因此 _www 用户应该具有访问权限,除非在其他地方被拒绝。该文件夹是否位于 _www 没有访问权限的父文件夹(或祖父文件夹等)中?此外,_www 是否对图像和 CSS 文件夹内的文件具有读取访问权限? - Gordon Davisson
为什么不将_www添加到staff组中呢?对我来说,问题在于我的/etc/group文件甚至没有列出staff,所以我很困惑。 - AlxVallejo
显示剩余2条评论
5个回答

26
问题在于Apache使用的用户与文件所有者不同,而且Apache的用户没有读/写/执行权限。在我的情况下,用户是_www,并且是_www组的成员。
我通过将文件的组更改为_www来解决了这个问题:
  1. Look for the apache's user and group. I used this php script:

    <?php
    echo exec('whoami') . '<br>';
    echo exec('groups') . '<br>';
    ?>
    
  2. Login with the user owner of the files.

  3. Add the user owner of files to the _www group.

    $ sudo dseditgroup -o edit -a userOwnerOfFiles -t user _www
    
  4. Change the group of files needed to _www

    $ chgrp -R _www path/containing/files
    
  5. Change file permissions for the group

    $ chmod -R g+rwx path/containing/files
    

1
第三步:“未找到记录。” - Michael
1
Michael,你是否已经用文件的实际所有者替换了'userOwnerOfFiles'? - Jay Harris

3

另一种解决此问题的替代方法是在 MacOSX 中使用扩展属性。

chmod +a "_www allow list,read,search,readattr,readsecurity,file_inherit,directory_inherit" /path/to/document_root

(注:保留 HTML 标签)

2
今天这个对我来说很棘手。结果证明我需要将整个目录树的权限授予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

2
我发现有两个方法可以解决这个问题(我特别想让apache能够访问Downloads文件夹):
  1. 在“系统偏好设置” -> “安全性与隐私” -> “隐私”中,滚动到左侧的“完全磁盘访问权限”,确保在底部解锁,然后点击“+”添加一个应用程序。导航到 /usr/sbin 并找到可执行文件 httpd,并添加它,确保启用了完全磁盘访问权限。重新锁定偏好设置。

  2. 在Finder中右键单击特定文件夹,选择“获取信息”,然后在“共享与权限”下,允许“所有人”用户访问(或者如果你想更注重安全性,也许只允许“_www”用户访问——但我没有测试过)。

这对我解决了问题。

1

这种方法测试起来安全快捷,如果有任何问题可以很容易切换回来(不会让问题变得更糟,通常在修复此类问题时这是一个问题:

  1. 找到httpd.conf文件(使用终端中的httpd -V命令可以找到)
  2. 在Brackets或任何文本编辑器中打开此文件
  3. 在该文件中查找:
    User _www
    Group _www
  4. 将其更改为
    User {您的用户名}
    Group staff

也许你需要在UserGroup中添加其他内容:

  1. 在这个httpd.conf文件中,你还可以找到你的Web服务器路径,只需搜索DocumentRoot即可。复制此路径,并使用cd命令在终端中导航到它,例如:
    cd /Library/WebServer/Documents
  2. 当你进入时,执行ls -l。这将为你提供有关Web根文件夹所有权的信息。根据此调整httpd.conf中的UserGroup
  3. 你还可以进入Web根文件夹并使用ls -l检查站点所有权,并根据此更新httpd.conf

如果这不起作用,请不要忘记切换回:
User _www
Group _www


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接