我正在设置一个新的 Centos 7 服务器,以通过带有 Nginx 的 PHP-FPM 在 PHP 5.6.40 上运行一些旧版网站。
但是,我遇到了一个问题,即所有文件似乎都是只读的。
PHP 在 nginx 用户下运行,站点目录归 nginx 所有,并且我已通过 chown 尝试了各种文件权限,包括“777”。
我创建了一个简单的程序来说明:
<?php
$fileList = glob('*');
//Loop through the array that glob returned.
foreach($fileList as $filename){
//Simply print them out onto the screen.
echo $filename;
if (is_writable($filename))
echo ' - Yes!';
else
echo ' - No.';
echo '<br>';
}
这将输出站点目录中的文件,每个文件名旁边都有“否”。
如果我能提供任何关于导致这种情况的原因或如何调试的提示,我将不胜感激。
答案1
SELinux 不允许 nginx 或 php-fpm 写入随机目录。您需要通过设置其默认上下文,httpd_sys_rw_content_t
然后设置任何现有文件的上下文,来告诉 SELinux 哪些目录应该可写。例如:
semanage fcontext -a -t httpd_sys_rw_content_t "/srv/www/my/uploads(/.*)?"
restorecon -rv /srv/www/my/uploads