我有一台 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
而且成功了。