【问题标题】:All permission and users are correct still getting failed to open stream: Permission denied所有权限和用户都正确仍然无法打开流:权限被拒绝
【发布时间】:2013-10-19 22:49:24
【问题描述】:

更新:在我的 php 中它是 .com 而不是 .org,这么小的东西太痛苦了

这让我发疯了,我已经在这个网站、谷歌以及在寻找解决方案之间的所有地方都试过了。目前在这里:

CentOS 6,阿帕奇 2

iptables 已关闭 用户组:ftpdir 组中的用户:root、apache、fwf(我的 ftp 用户,ftp 工作正常) 目录权限,全部启用用于测试目的

rxwrxwrxw on /srv/www/floridawinefest.com/public_html/
rxwrxwrxw on /etc/tmp/

php.ini 禁用了安全模式,启用了文件上传,临时目录设置为 /etc/tmp,最大文件大小 5mb 正在使用 200k 文件进行测试

使用 apache:ftpdir 在 public_html 目录上运行 chown

使用 apache:ftpdir 在 etc/tmp 目录上运行 chown

在 /public_html 中的所有文件和目录上递归运行 chmod

尝试上传文件时仍然出现以下错误

Warning: move_uploaded_file(/srv/www/floridawinefest.com/public_html/topBG.jpg): failed to open stream: Permission denied in /srv/www/floridawinefest.org/public_html/uploader.php on line 11 Warning: move_uploaded_file(): Unable to move '/etc/tmp/php9TTyoR' to '/srv/www/floridawinefest.com/public_html/topBG.jpg' in /srv/www/floridawinefest.org/public_html/uploader.php on line 11

我的代码:

chmod($_FILES["file"]["tmp_name"], 0777); 

$success = move_uploaded_file($_FILES["file"]["tmp_name"], "/srv/www/floridawinefest.com/public_html/" . $filename_full);
echo "Succes: " . $success . "<br />";
chmod($filename_full, 0777);

if ($_FILES["file"]["error"] > 0)
{
    echo "Error: " . $_FILES["file"]["error"] . "<br>";
}
else
{
    echo "Upload: " . $_FILES["file"]["name"] . "<br>";
    echo "Type: " . $_FILES["file"]["type"] . "<br>";
    echo "Size: " . ($_FILES["file"]["size"] / 1024) . " kB<br>";
    echo "Stored in: " . $_FILES["file"]["tmp_name"];
}

【问题讨论】:

  • 看起来很奇怪的问题,无论如何 - 在哪个用户 apache 下运行?
  • 我在您的错误消息中看到了 .org 和 .com 的混合。可能是走错路了?
  • 奇怪!可能没有多大意义,但您是否考虑过/尝试过生成基于时间戳的 tmp_name?另外,/etc/tmp 目录下的文件是否可见?
  • 哦……我的……上帝……我花了这么多时间在这上面,它是 .com/.org。非常感谢你。文件上传在我的 wordpress 安装中仍然无法正常工作,但可以在我的测试脚本中工作,等等到下一部分!

标签: php apache upload permissions centos


【解决方案1】:

如此真实的故事(因为它已被回答)。我们有一个孩子写了一些这样的上传代码。将其转储到目录中。从来没有检查过任何东西(就像你的代码没有)。几年过去了,土耳其的一些白痴上传了一个 PHP 脚本。几乎接管了服务器(我们有一些东西在内核级别阻止了他的 rootkit,为了胜利而分层安全)。所以要考虑的事情

  1. 永远不要上传到您的根目录。创建一个目录,如果可以的话,关闭该目录的 PHP 处理(可以通过 .htaccess 完成)。消除文件上传的所有风险。
  2. 检查您的文件。在您的情况下,您需要图像。验证这一点的一个好方法是使用 GD 库和 imagecreatefromjpeg 之类的函数来确保它是它所说的那样。

【讨论】:

  • 当然,它已被删除,我绝不会在没有任何生产使用检查的情况下构建上传
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-05-31
  • 1970-01-01
  • 2011-06-22
  • 2015-12-16
  • 2015-11-15
  • 2017-09-23
  • 2015-02-01
相关资源
最近更新 更多