为什么切换到安全文件夹(httpsdocs)会破坏 PHP 文件上传功能

为什么切换到安全文件夹(httpsdocs)会破坏 PHP 文件上传功能

服务器版本:Apache/2.4.34 (Unix)

我正在尝试将现有的 SSL 证书用于域的几个子目录,但域的架构将非安全/安全目录分为两个目录:

httpdocs
httpsdocs

我将所有内容从 httpdocs 复制到 httpsdocs,并使用 .htaccess 将流量强制转移到 https。一切都很顺利,直到我尝试了 PHP 文件上传功能。

以下是安全方面失败的代码:

$path = "uploaded_files/".$row_query[0].'/'.$file_name;
copy($temp_file, $path);

在进行一些调试时,我发现创建了临时文件:/tmp/phpanKT4N

但我在日志中看到的错误是:复制(uploaded_files/New Sub Folder/30052_testing.txt):无法打开流:/var/www/vhosts/.com/httpsdocs/demo/resource/add_resource.php 第 108 行中的权限被拒绝

我尝试将 copy() 更改为 move_uploaded_file() 但出现以下错误:

PHP Warning:  move_uploaded_file(uploaded_files/test/30054_testing.txt): failed to open stream: No such file or directory in /var/www/vhosts/<thedomain>.com/httpsdocs/demo/resource/add_resource.php on line 111
PHP Warning:  move_uploaded_file(): Unable to move '/tmp/phpOC9YEF' to 'uploaded_files/test/30054_testing.txt' in /var/www/vhosts/<thedomain>.com/httpsdocs/demo/resource/add_resource.php on line 111

我搜索了堆栈并发现所有权必须匹配,但 httpdocs 和 httpsdocs 的权限似乎相同。

/tmp 文件夹归 root:root 所有,正如我所说,这在非安全文件夹中完美运行。非安全上传文件夹和安全上传文件夹完全相同:

http文档:

drwxrwxr-x+  8 theuser apache  4096 Sep 22  2015 uploaded_files

https文档:

drwxrwxr-x+  8 theuser apache  4096 Sep 22  2015 uploaded_files

这是配置、权限问题,还是其他什么问题?

答案1

想通了...运行了以下命令:

首先找到apache的用户:

egrep -i '^user|^group' /etc/httpd/conf/httpd.conf 

结果:用户 apache 组 apache

然后运行这个,它解决了 httpsdocs 中的所有 PHP 文件上传问题:

chown -R apache:apache /var/www/vhosts/<thedomain>.com/httpsdocs/
chmod -R g+rw /var/www/vhosts/<thedomain>.com/httpsdocs/

相关内容