允许 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>

【讨论】:

我在&lt;Directory /mnt&gt; 上尝试了一个指令,但它没有改变任何东西。 试试这个:在你的 里面应该是 里面应该是 Options +FollowSymLinks 指令。【参考方案2】:

我们的团队遇到了同样的问题,我的队友能够通过将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 对挂载目录进行读/写访问的主要内容,如果未能解决你的问题,请参考以下文章

Vsftpd设置允许匿名访问资源(公共读)的问题

CreateFile打开文件或者打开目录

windows 配置 apache + php

stm32中GPIOx_BSRR和 GPIO_xBRR寄存允许对任何GPIOx进行读\更改的独立访问;

chmodchgrpchown详解

Linux - chmod