【问题标题】:give access to file outside www/html folder允许访问 www/html 文件夹之外的文件
【发布时间】:2018-11-27 22:36:07
【问题描述】:

我有 LAMP 服务器

服务器版本:Apache/2.4.29 (Ubuntu)

PHP:PHP 7.2.5-0ubuntu0.18.04.1

我需要授予 php SQLITE3 访问 www/html 文件夹外的 db 的权限。 现在我的文件系统看起来是这样的。

/root
    ./database
        user.db
/var
    ./www
        ./html
            index.html
            reg.php

user.db 必须位于 /root/database 中,因此仅将其放入 var/www/html 对我来说不是解决方案。

所以我需要为 Apache 或 php 授予对该文件夹的访问权限。 我在这里找到了一些信息https://httpd.apache.org/docs/2.4/urlmapping.html,但不知道它是如何工作的以及我需要把它放在哪里?

【问题讨论】:

  • 我将创建一个从/root/database/ 到您的var/www/html 目录的符号链接。
  • @fyroc 我符号链接了,但什么也没发生。然而,它看起来是渐进的方式。当我在浏览器中输入 example.com/db/helloworld.html 时,它会识别,这个 URL 存在,但是用 403 HTTP 代码回答 Forbidden You don't have permission to access /db/helloworld.html on this server. Apache/2.4.29 (Ubuntu) Server at examle.com Port 80 我如何才能授予对它的访问权限?

标签: php apache ubuntu


【解决方案1】:

这里的问题是 Linux 权限,而不是 URL 映射,因为 PHP 在后端的服务器中运行。

如果您将 PHP 作为 Apache 模块(mod_php 或类似的东西)运行,它将使用 Apache 用户和组(通常为 www-data:www-datanobody:nogroup,这取决于 LAMP 配置)运行。

因此,您应该授予 user.db 文件及其树的权限并更改所有权,例如:

chmod o+x /root
chmod o+x /root/database
chown www-data:www-data /root/database/user.db 

您可以阅读有关权限的更多信息here

【讨论】:

  • 执行此操作后,由 root 用户运行的其他应用是否也可以访问数据库?
  • Root 可以访问所有内容 :-) 问题出在其他用户上。
  • 如果另一个用户“daq”(组daq_group)是“/root/database/user.db”的所有者,应该如何修改?我们如何在不改变原始所有权的情况下授予对“www-data”的访问权限?将“daq”添加到“www-data”组并将“www-data”组作为目录的所有者仍然无法正常工作! @drmad