【问题标题】:How do I give Apache Access to folders on MAC OSx?如何让 Apache 访问 MAC OSx 上的文件夹?
【发布时间】:2021-09-04 01:37:27
【问题描述】:

我是 Mac 和 Apache 的新手。我的开发机器我的网站无法访问网络根目录 /images 或 /css 文件夹下的任何文件。

apache 日志给出以下错误:

(13)Permission denied:文件权限拒绝服务器访问:

该站点托管在“站点”文件夹下。我检查了这个文件夹的“获取信息”,似乎“每个人”都有读取权限。是什么赋予了?

谢谢!

【问题讨论】:

  • 对不起,我是 OSX 的新手,但是当我查看获取信息时,我看到了三个帐户及其权限。他们是用户名(我),员工,每个人。我的帐户具有读/写访问权限,而其他两个已读取。我在这里没有看到任何关于群组或所有权的提及。
  • 这通常意味着所有者是用户名(我),组是员工,但获取信息并不总是显示完整的权限。要获得完整的详细信息,请打开终端并运行命令ls -lea /path/to/folder(如果您不确定如何输入路径,您可以从 Finder 中拖放它,它会为您粘贴到路径中)。
  • 感谢您的信息。看来这两个文件夹都归我的用户所有,并且该组确实是“员工”。
  • drwxr-xr-x 是两个文件夹的权限吗?
  • 这是否意味着我需要为员工添加 www?我相信这是apache使用的默认帐户吧?

标签: php apache macos


【解决方案1】:

问题在于 Apache 使用不同于文件用户所有者的用户运行,并且 Apache 的用户没有读/写/执行权限。在我的例子中,用户是 _www 并且是 _www 组的成员。

我解决了这个问题,将文件组更改为_www

  1. 查找 apache 的用户和组。我使用了这个 php 脚本:

    <?php
    echo exec('whoami') . '<br>';
    echo exec('groups') . '<br>';
    ?>
    
  2. 以文件的用户所有者登录。

  3. 将文件的用户所有者添加到_www 组。

    $ sudo dseditgroup -o edit -a userOwnerOfFiles -t user _www
    
  4. 将需要的文件组改为_www

    $ chgrp -R _www path/containing/files
    
  5. 更改组的文件权限

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

【讨论】:

  • 第 3 步:“未找到记录。”
  • Michael,您是否将“userOwnerOfFiles”替换为文件的实际所有者?
【解决方案2】:

今天这对我来说很艰难。事实证明,我需要将整个目录树的权限授予 Web 服务器,一直到文档根目录。

我今天遇到了这个问题,因为我正在使用虚拟主机并将文件存储在我的用户目录中很远的树上。

我不想递归地更改我的 Documents 目录中的所有数千个文件,所以我只是 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

【讨论】:

    【解决方案3】:

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

    chmod +a "_www 允许列表,读取,搜索,readattr,readsecurity,file_inherit,directory_inherit" /path/to/document_root

    【讨论】:

      【解决方案4】:

      我发现 2 件事对我有用(我专门试图让 apache 访问下载文件夹):

      1. 在系统偏好设置 -> 安全和隐私 -> 隐私中滚动到左侧的全盘访问,确保您在底部解锁,然后单击 + 添加应用程序。导航到 /usr/sbin 并找到可执行文件 httpd 并添加它,确保它启用了完整的磁盘访问。重新锁定偏好

      2. 右键单击 Finder 中的特定文件夹并选择“获取信息”,然后在“共享和权限”下,允许“每个人”用户访问(或者如果您想提高安全意识,也许只允许“_www”用户 -但我没有对此进行测试)。

      这帮我解决了

      【讨论】:

        【解决方案5】:

        这种方法测试安全且快速,如果它不起作用,也很容易切换回来(它不会更加混乱,这在解决此类问题时通常是一个问题:

        1. 找到httpd.conf(您可以在终端中使用httpd -V
        2. 在括号或任何文本编辑器中打开此文件
        3. 在此文件中,找到:
          User _www
          Group _www
        4. 改成
          User {your username}
          Group staff

        也许您必须在 UserGroup 中添加其他内容:

        1. 在这个httpd.conf 文件中,您还可以找到您的网络服务器的路径,只需搜索DocumentRoot。复制此路径,并在终端中使用cd 命令导航到该路径,例如:
          cd /Library/WebServer/Documents
        2. 当您进入时,请发送ls -l。这将为您提供有关 webroot 文件夹所有权的信息。调整你的UserGrouphttpd.conf 关于这个
        3. 您也可以进入 webroot 文件夹并使用ls -l 检查网站所有权,并更新httpd.conf

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

        【讨论】:

          猜你喜欢
          • 2014-08-01
          • 1970-01-01
          • 2021-06-14
          • 2010-09-28
          • 2019-01-10
          • 1970-01-01
          • 1970-01-01
          • 2013-10-31
          • 2018-10-27
          相关资源
          最近更新 更多