允许 Apache/PHP 对挂载目录进行读/写访问
Posted
技术标签:
【中文标题】允许 Apache/PHP 对挂载目录进行读/写访问【英文标题】:Allow Apache/PHP a read/write access to a mounted directory 【发布时间】:2014-03-19 16:11:48 【问题描述】:我们的网站在带有 apache httpd 和 php 的 linux 服务器上运行。在该服务器上,安装了来自 Windows 服务器的某个目录,例如 /mnt/some_directory/
。我可以使用我自己的用户帐户通过 WinSCP 或 SSH 浏览此目录。
我还可以在 SSH 中执行以下操作:
php -r "print_r(file_get_contents('/mnt/some_directory/file_name.txt'));"
并查看该文件的内容。
我们需要读取一个文件并从该目录进行解析,以便将其导入网站使用的数据库中。但是当网站上的 fopen 或 file_get_contents 我们得到一个权限被拒绝的错误。
我对 Web 服务器的访问权限有限(并且对 *nix 和 apache 配置的了解有限),但是应该解决这个问题的管理员显然也缺乏这方面的知识,我需要解决这个任务,这就是为什么我我在这里问。
管理员所做的是将挂载目录的组和所有权设置为“apache”,这是运行 httpd 进程的用户。但这没有帮助。
据我所知,默认情况下不允许访问 webroot 之外的文件。在 httpd.conf 中为/mnt/some_directory/
设置一个 DIRECTORY 指令就足够了吗?或者还有什么需要做的吗?
【问题讨论】:
你能像 /var/www/linkedtomntsomething 这样链接目录吗?真的不知道它是否有效(目前无法测试) 可能是 Selinux 权限问题。 谢谢。根据ps -ZC httpd
,httpd 进程由“unconfined_u”运行,所以我猜 Selinux 用户映射将用户“apache”映射到“unconfined_u”。为 apache 更改此映射是否会保存?
【参考方案1】:
将挂载的目录链接到您的 www 根目录并将链接命名为“share”
ln -s /mnt/some_directory /path/to/your/www/root/directory/share
比尝试读取文件
php -r "print_r(file_get_contents('/path/to/your/www/root/directory/share/file_name.txt'));"
...或者您可以允许(如果您有足够的权限来编辑网络服务器的配置)
<Directory /mnt/somedirectory >
Allow from All
</Directory>
【讨论】:
我在<Directory /mnt>
上尝试了一个指令,但它没有改变任何东西。
试试这个:在你的 我们的团队遇到了同样的问题,我的队友能够通过将context
添加到挂载选项来解决此问题。
我们使用以下格式将 windows 共享文件夹挂载到 apache 将能够访问的 linux:
mount -v -t cifs <//$hostname/$(windows shared dir)> <mount directory> -o username="<username>",password=<password>,domain=<domain name>,iocharset=utf8,file_mode=0777,dir_mode=0777,context="system_u:object_r:httpd_sys_content_t:s0"
例如:
mount -v -t cifs //192.168.1.19/sample_dir /mnt/mount_dir -o username="admin",password=adminpwd,domain=MIINTER,iocharset=utf8,file_mode=0777,dir_mode=0777,context="system_u:object_r:httpd_sys_content_t:s0"
【讨论】:
这适用于带有 debian 和 apache 的 Raspberry Pi【参考方案3】:我在 cifs 挂载上看到了同样的问题 linux/unix apache,用户可以访问已安装的卷,但不能访问 apache。
另见:EnableSendfile off
但是当关闭时,apache 可能会运行缓慢, 在 .htaccess 中,仅适用于 cifs 挂载路径,它应该可以工作...。
http://httpd.apache.org/docs/current/en/mod/core.html
最好的问候 托马斯
【讨论】:
以上是关于允许 Apache/PHP 对挂载目录进行读/写访问的主要内容,如果未能解决你的问题,请参考以下文章