代码(位于/var/www/html/fileio_test/io_test.php):
<?php
$logging = <<< LOG
This is a test
LOG;
$testfile = fopen('/home/djameson/test.txt','a'); // append mode
fwrite ($testfile, $logging);
fclose($testfile);
?>
test.txt(在/home/djameson/test.txt中):
-rwxrw-r--. 1 apache apache 0 Feb 28 20:21 test.txt
错误:
Warning: fopen(/home/djameson/test.txt): failed to open stream: Permission denied in /var/www/html/fileio_test/io_test.php on line 7
Warning: fwrite() expects parameter 1 to be resource, boolean given in /var/www/html/fileio_test/io_test.php on line 8
Warning: fclose() expects parameter 1 to be resource, boolean given in /var/www/html/fileio_test/io_test.php on line 9
在此过程中多次更改文件权限,将test.txt添加到不同的组但我无法写入文件。有什么想法吗?
sestatus的结果:
SELinux status: enabled
SELinuxfs mount: /sys/fs/selinux
SELinux root directory: /etc/selinux
Loaded policy name: targeted
Current mode: permissive
Mode from config file: enforcing
Policy MLS status: enabled
Policy deny_unknown status: allowed
Max kernel policy version: 28
其他信息:
服务器在fedora 20上运行; apache服务器位于/ var / www
答案 0 :(得分:0)
可能selinux正在执行其规则。 来自Selinux's wiki on fedoraproject
默认情况下,httpd不允许访问用户主目录 如果要允许访问您需要设置的用户主目录 httpd_enable_homedirs布尔值并更改文件的上下文 你想让人们从家里出发。
因此,您应该尝试暂时停用selinux - &gt; setenforce 0
( WARN :这将在您的系统上为当前会话完全禁用selinux而不是在生产服务器上运行它)。如果在此之后它的工作原理可能是正在执行的sebool httpd_enable_homedirs
。如果您希望仅禁用该标志而不是完全禁用selinux,则可以运行:
setsebool httpd_enable_homedirs 1 //This will enable for the current session only
如果您想永久设置它:
setsebool -P httpd_enable_homedirs 1 //Permanent
设置完成后,您应该在用户主目录上运行chcon或restorecon:
chcon -R -t httpd_sys_content_t /home/djameson
答案 1 :(得分:0)
安东尼奥的帖子就是我的想法。您可以检查的一件事是apache
实际上可以访问/home/djameson
(chmod + x是您的朋友)。