我理解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");
答案 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/