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

Chr*_*off 3 php apache mount

我们有一个使用apache httpd和php在linux服务器上运行的网站.在那台服务器上,Windows服务器上的某个目录就像我们所说的那样被挂载/mnt/some_directory/.我可以使用自己的用户帐户使用WinSCP或SSH浏览此目录.

我也可以在SSH中执行以下操作:

php -r "print_r(file_get_contents('/mnt/some_directory/file_name.txt'));"
Run Code Online (Sandbox Code Playgroud)

并查看该文件的内容.

我们需要读取一个文件并从该目录解析,以便将其导入到网站使用的数据库中.但是当网站上的fopen或file_get_contents被我们获得权限拒绝错误时.

我对Web服务器的访问权限有限(以及对*nix和apache配置的了解有限),但是应该解决这个问题的管理员也缺乏这方面的知识,我需要解决这个问题,这就是我在这里问的原因. .

管理员所做的是将挂载目录的组和所有权设置为"apache",即httpd进程正在运行的用户.但这没有帮助.

据我所知,默认情况下不允许访问webroot以外的文件.在httpd.conf中设置DIRECTORY指令是否足够/mnt/some_directory/?或者还有什么必须做的吗?

Ros*_*ngo 7

我们的团队有同样的问题,我的队友能够通过添加context挂载选项来解决这个问题.

我们使用以下格式将Windows共享文件夹挂载到linux,apache将能够访问:

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"
Run Code Online (Sandbox Code Playgroud)

例如:

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"
Run Code Online (Sandbox Code Playgroud)


ent*_*erx 1

将挂载的目录链接到您的 www 根目录并将链接命名为“share”

ln -s /mnt/some_directory /path/to/your/www/root/directory/share
Run Code Online (Sandbox Code Playgroud)

而不是尝试读取文件

php -r "print_r(file_get_contents('/path/to/your/www/root/directory/share/file_name.txt'));"
Run Code Online (Sandbox Code Playgroud)

...或者您可以允许(如果您有足够的权限来编辑网络服务器的配置)

<Directory /mnt/somedirectory >
    Allow from All
</Directory>
Run Code Online (Sandbox Code Playgroud)