允许Apache / PHP对已安装目录进行读/写访问

时间:2014-02-19 11:05:06

标签: php apache mount

我们在Linux服务器上运行的网站使用apache httpd和php。在该服务器上,安装了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指令是否足够?或者还有什么必须要做的吗?

3 个答案:

答案 0 :(得分:5)

我们的团队遇到了同样的问题,我的队友可以通过添加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"

答案 1 :(得分:0)

将已安装的目录链接到www root目录,并将链接命名为“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>

答案 2 :(得分:0)

我看到了与cifs挂载相同的问题 linux / unix apache,用户可以访问已安装的卷,但不能访问apache。

另见:EnableSendfile off

但是当关闭时,apache可能工作缓慢, 在.htaccess中,仅适用于cifs挂载路径,它应该可以工作......。

http://httpd.apache.org/docs/current/en/mod/core.html

最好的问候 L.Tomas