首页 文章

Apache文件权限仅在/ tmp中

提问于
浏览
0

我正在使用CentOS 7和PHP 7.2.5 . 我无法获得move_uploaded_file(),file_put_contents()或exec('cp /tmp/test.txt /var/www/html/test.txt',$ out);在除/ tmp之外的任何文件夹中工作 . / var / www / html归apache所有:apache只是因为权限是755.我尝试了777但仍然得到了许可被拒绝 . 它被卡在systemd-private-123abc-httpd.service-11cba / tmp /文件夹中,但是我为httpd禁用了PrivateTmp .

上传的文件已上传,一切顺利,直到我尝试移动它 . 我可以将它移动到/ tmp目录中的另一个文件名,但我无法将其移动到任何其他目录 .

所有这些都很好:

file_put_contents('/tmp/test.txt', 'TTTTTEEEESSSSTTTTT!!!!');
exec('cp /tmp/test.txt /tmp/test2.txt', $out); 
move_uploaded_file($_FILES['fileToUpload']['tmp_name'], '/tmp/'.$file);

所有这些都给出警告:***:无法打开流:权限被拒绝

file_put_contents('/var/www/html/test.txt', 'TTTTTEEEESSSSTTTTT!!!!');
move_uploaded_file($_FILES['fileToUpload']['tmp_name'], '/var/www/html/'.$file);
exec('cp /tmp/test.txt /var/www/html/test2.txt', $out);

同样,/ var / www / html由apache拥有:apache并设置为755权限 . 我完全不知所措 . 所有这些代码在旧服务器上运行良好,但绝对拒绝在新服务器上工作 . 我看了看,但如果答案就在那里,那么关于标准文件/目录权限的答案就太多了 .

exec('cp / ...实际上不会发出警告或错误 . 它可以工作或不工作 . 它可以在/ tmp目录中复制但不在其他地方 .

1 回答

  • 0

    正如上面的评论所述,SELinux就是问题所在 . 我禁用了它,一切都按预期工作 . 我不想放弃它,所以我试图在these directions之后设置允许我需要的规则 . 那给了我错误"semanage: error: unrecognized arguments: /var/www/html/test.txt"

    我运行了semanage fcontext -l> output.txt并检出了该文件 . 已经有一个规则(对于WordPress和/或Drupal)允许读/写名为"uploads" /var/www/html(/.)?/uploads(/ . )的/ var / www / html中的任何目录?所有文件system_u:object_r:httpd_sys_rw_content_t:s0

    因此,我将目标目录移动到路径中带有“uploads”的目录 . mv -f / var / www / html / shared / pics / * / var / www / html / shared / uploads / pics

    我把这一切都告诉apache:apache并将权限设置为755并且它按预期工作 . 因此,如果SELinux给您带来问题并且您无法更改规则,请查找规则并遵循它们 .

相关问题