Apache2服务器PHP访问文档根目录之外的文件

Apache2服务器PHP访问文档根目录之外的文件

我有一台 Raspberry Pi,用于托管 Web 服务器。我使用的是 apache2 2.4.38、php8.1 和 MariaDB 15.1,我想添加一个Nextcloud服务器。我使用的是 Web 安装程序版本。我已经有一个带有 BTRFS 的外部 USB HDD 连接到 Raspberry Pi,并且我已将其设置为在启动时使用该/etc/fstab文件自动连接。所有这些都运行正常。我在驱动器上创建了一个目录,用于存储 nextcloud 数据。我将目录配置为 www-data 用户所有,以便 Nextcloud 可以写入它。但这就是我遇到问题的地方。nextcloud 和我制作的一个简单的 php 测试文件都给出没有权限错误。我已经通过添加以下内容启用了 Apache2 对目录的访问/etc/apache2/apache2.conf

<Directory /media/backup/nextcloud>
    Options Indexes FollowSymLinks
    AllowOverride All
    Require all granted
</Directory>

(驱动器安装在 /media/backup 上,我想要使用的目录是 /media/backup/nextcloud/data。nextcloud 目录和数据目录均归 www-data 所有,它们上面的目录归 root 所有)

我创建了一个测试文件来触发错误,而不必每次都在设置向导中重新输入 nextcloud 密码,php 错误日志只会给出权限被拒绝的错误。我使用从日志中获取了信息tail -n 20 /var/log/apache2/error.log,这就是日志的内容(当然,IP 地址已被审查):

[Sat Jun 04 22:38:46.485149 2022] [php:warn] [pid 1504] [client ____] PHP Warning:  include(/media/backup/nextcloud/data/cheese.txt): Failed to open stream: Permission denied in /var/www/html/sus.php on line 2
[Sat Jun 04 22:38:46.485437 2022] [php:warn] [pid 1504] [client ____] PHP Warning:  include(): Failed opening '/media/backup/nextcloud/data/cheese.txt' for inclusion (include_path='.:/usr/share/php') in /var/www/html/sus.php on line 2

对我来说更奇怪的是,我使用相同的 PHP 脚本从 /usr/share 读取(默认情况下对 apache2 开放)。

我不知道该怎么办。权限是 770,目录存在,可由 www-data 写入,我已测试过sudo -u www-data touch grass.txt。任何帮助都将不胜感激。提前谢谢您!

细节:

  • 操作系统:Raspbian lite 10 (buster),内核 5.10.103-v7l+
  • 设备:Raspberry Pi 4B
  • 我的 PHP 测试文件: <?php include "/media/backup/nextcloud/data/cheese.txt";?>
  • 下一个云服务器位于/var/www/nextcloud,因为我计划将来使用虚拟主机。目前,我在 /var/www/html/cloud 中使用指向 /var/www/nextcloud 的符号链接。我以为符号链接可能是问题所在,但经过一番思考,我意识到我的测试文件并且/var/www/html它有同样的问题,因此符号链接不可能是问题所在。
  • 所用软件的版本:
    • Apache2 2.4.38
    • php8.1
    • MariaDB 15.1
  • open_basedir没有设置,所以也不可能是

答案1

好吧,经过进一步挖掘,我发现了回答。我想要读取的目录上方的目录应该具有执行权限。所以我照做了,chmod +x /media /media/backup而且成功了。

相关内容