即使父文件夹是777,PHP也无法创建目录

时间:2017-06-05 16:50:33

标签: php permissions

我理解777的安全隐患。这只是一个故障排除措施。

父文件夹:

drwxrwxrwx.  3 web   www-data    22 Jun  5 11:04 library

对于好的衡量标准,直接父母也是777。

PHP以apache身份运行:

print shell_exec( 'whoami' );

返回apache组成员www-data

# groups apache
apache : apache www-data

mkdir命令失败:

mkdir("/var/www/html/library/temp__9pa2spj13nkiatknv8odqrv3n0");
  

警告:mkdir():/var/www/html/test.php中的权限被拒绝

如果我首先尝试chdir到目录,我可以getcwd()并且它是正确的。如果我尝试在那时创建目录,如果失败。

我不知道要测试什么。

这是我的完整测试脚本:

<?php
error_reporting(E_ALL);
ini_set('display_errors', TRUE);
ini_set('display_startup_errors', TRUE);
print shell_exec( 'whoami' );
mkdir("/var/www/html/library/temp__9pa2spj13nkiatknv8odqrv3n0");
chdir("/var/www/html/library");
echo getcwd();
mkdir("temp__9pa2spj13nkiatknv8odqrv3n0");

1 个答案:

答案 0 :(得分:2)

默认情况下,SE Linux应配置为阻止Web服务器(Apache)对任何文件的写入。 httpd_sys_content_t表示该目录设置为只读。您需要使用httpd_sys_rw_content_t上下文将其设置为读/写。这可以使用semanage工具完成。命令看起来像这样。

semanage fcontext -a httpd_sys_rw_content_t "/var/www/html/library(/.*)?"

设置该策略后,您可以通过执行...

来应用它
restorecon -Rv /var/www/