如何授予用户访问特定目录的权限?

如何授予用户访问特定目录的权限?

www当我以(apache 用户)身份登录时,我创建了符号链接:

ln -s /home/anotheruser/test /var/www/test

现在我转到我的mydomain.com/test,并收到 403 错误。

/home/anotheruser/具有权限764(组读写和公共读)其他用户和www在同一组中。

那么,我必须授予/home/anotheruser文件夹什么权限才能使其正常工作?

答案1

确保已将 apache 配置为遵循符号链接

示例配置:

<VirtualHost *:80>
    ServerAdmin [email protected]

    DocumentRoot /var/www/test
    <Directory />
        Options FollowSymLinks
        AllowOverride None
    </Directory>
<VirtualHost>

答案2

此 HTTP 错误可能与文件系统本身无关,您可以选择列出所有文件(通常):

   <VirtualHost *:80>
     ...
     <Directory>
       Options +Indexes
     </Directory>   
     ...
   </VirtualHost>

可以解决问题,否则,如果没有诸如 chroot 之类的安全设置,您可以尝试直接从该目录访问文件。

答案3

这个答案有点长,但我认为背景在这里很重要,所以请耐心听完。

问题原因

当您使用符号链接时,您所说的内容本质上是“您不应该查看这里 (/var/www/test),而应该查看那里的目录 (/home/anotheruser/test)”。为了在提供 Web 文件时实现此功能,您需要做两件事:

  • 运行 apache 的用户必须被允许读取该目录 - 在其他人的帮助下你已经正确完成了这一部分
  • 必须配置 apache 以允许它从该目录提供文件 - 而这是缺少的部分。

举个例子:文件 /etc/passwd 是每个人都可以读取的。但是,您可能不希望它对整个世界都可读 - 因此,即使您要创建一个符号链接 ( ln -s /etc/passwd /var/www/test/passwd),它仍然不可读,除非您明确告诉 apache 允许它从 /etc 访问文件。

如何修复此问题

您需要将文件移动到允许 apache 从中提供页面服务的目录,或者您需要允许 apache 从文件所在的目录提供页面服务。

解决方案 1 - 移动文件

最快的解决方案是转换符号链接 - 创建目录/var/www/test,将 anotheruser 设为所有者,然后执行ln -s /var/www/test /home/anotheruser/。这样,所有文件实际上都存储在下/var/www,因此 apache 可以为它们提供服务。

解决方案 2 - 允许目录

在 httpd.conf 中添加一条指令,允许 apache 从 提供内容/home/anotheruser/test。然后只需删除符号链接并设置一个别名即可。如下所示:

Alias /test /home/anotheruser/test

<Directory /home/anotheruser/test>
    Order allow,deny
    Allow from all
</Directory>

相关内容