fopen权限否认apache服务器

时间:2014-02-28 07:34:18

标签: php apache fopen

代码(位于/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

2 个答案:

答案 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是您的朋友)。