![权限问题:Apache 如何访问我的主目录中的文件?](https://linux22.com/image/808140/%E6%9D%83%E9%99%90%E9%97%AE%E9%A2%98%EF%BC%9AApache%20%E5%A6%82%E4%BD%95%E8%AE%BF%E9%97%AE%E6%88%91%E7%9A%84%E4%B8%BB%E7%9B%AE%E5%BD%95%E4%B8%AD%E7%9A%84%E6%96%87%E4%BB%B6%EF%BC%9F.png)
我知道这里之前已经介绍过文件权限,但我还是很难理解我的场景中这个概念。
- 我在旧的 ubuntu 安装上创建了这些文件。
- 我已将文件复制到我的新 ubuntu 安装中,并将它们放在我的 webroot 中。
- 当我尝试运行这些文件(它们是 PHP 文件)时,我收到与权限相关的错误
为了解决这个问题,我假设它们仍归前一个所有者所有,所以我chown -R
以我的用户名作为参数在目录中运行,以便获得目录中所有文件的所有权。需要注意的是,新旧 ubuntu 安装之间的用户名是相同的。
当我尝试再次运行文件时,出现了同样的问题:由于权限问题导致 500 错误。有人能告诉我还应该采取哪些步骤吗?
我的 Apache 安装的 webroot 位于我的主文件夹中。如果我在 webroot 中创建新文件,它们也会按预期工作,只有旧文件才会引发问题。
答案1
如果您的服务器文档位于/home/$USER/public_html
目录中,您需要运行
sudo chown -R www-data:www-data /home/$USER/public_html
将 DocumentRoot 文件夹的所有权授予用户www-data
和组www-data
。
然后你可以将自己添加到群组中www-data
sudo adduser $USER www-data
最后,您需要使 DocumentRoot 文件夹可由所有者(www-data 用户)和您自己(作为组的一部分www-data
)写入:
sudo chmod -R 775 /home/$USER/public_html
为了方便起见,你可以使用public_html_fix.sh
以下内容命名脚本:
#!/bin/bash
sudo adduser $USER www-data
sudo chown -R www-data:www-data /home/$USER/public_html
sudo chmod -R 775 /home/$USER/public_html
将其保存在里面/home/$USER/bin
并使用以下命令使其可执行:
sudo chmod +x /home/$USER/bin/public_html_fix.sh
然后,您可以在需要时随时调用它,无论在文件系统的哪个位置,您都会发现自己像这样:
public_html_fix.sh
答案2
您的 webroot 上的目录应该设置执行位,以允许 Apache 进入目录。
如果您的 webroot 位于/home/user/htdocs
,则/
、/home
和/home/user
应该/home/user/htdocs
已设置执行位。
上述解决方案“有效”,但并不理想。如果您创建了一个文件夹,Apache 就无法写入该文件夹。反之亦然。
可以通过设置 umask 0007 并将自己添加到 Apache 组(如果我没记错的话是 www-data)来“修复”这个问题,以便该组可以写入新创建的文件和文件夹。
或者,您可以安装备用 Apache MPM:Apache2 MPM ITK(配置信息) 并调整配置以便 Apache 在您的用户下运行。
答案3
除了修改文件权限和编辑 apache .conf 文件之外,我想说的是,我什么都做不了,因为我的文件位于我通过 nautilus 自动挂载的分区上。这会将分区限制为您的用户。
www-root
要检查您的文件是否可被任何运行 apache 的用户看到(运行ps -aux | grep apache2
检查),请运行以下命令:
sudo su -l www-data -s /bin/bash
并尝试从文档根目录读取文件。
如果文件不可读,请检查:
1)您已设置所有其他文件权限
2)如果需要的话,你已经FollowSymlinks
在你的.conf
文件中使用了
3)您已经设置了 DocumentRoot
3) 为所有用户挂载您的分区。我必须/etc/fstab
通过其 UUID 编辑并指定我的分区:
UUID=afdee1d3-5bb8-4652-892f-e83a9b5ff72e /mnt/4tb ext4 rw,nosuid,nodev,errors=remount-ro
然后通过 nautilus 卸载您的分区并执行sudo mount -a
。如果一切顺利,您的文件现在位于 下/mnt
。更新您的符号链接,您就可以开始了。
答案4
我发现设置此功能的最佳方式是 VirtualMin 的方式。
创建用户和组“myhome”
让 apache 用户成为“myhome”组的成员。而不是像这里的一些解释所描述的那样反过来
因此现在 apache 除了对 /home/myhome/www 有读取和执行权限外,还对 /home/myhome 有读取和执行权限
“myhome”用户有写权限