我们在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指令是否足够?或者还有什么必须要做的吗?
答案 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挂载路径,它应该可以工作......。
最好的问候 L.Tomas