2014-09-05 27 views
1

我想从主目录读取一些文件,我从其他服务器推送文件,我可以信任它。
我的index.php是/var/www/html/index.php
我想通过PHP的file_get_contents位于/home/user123/subdir/info.txt如何从主目录中使用PHP读取文件(CentOS 7,Apache 2.4,SELinux)

我得到错误读取文件: file_get_contents(/home/user123/subdir/info.txt): failed to open stream: Permission denied (2)

aureport --avc显示了拒绝错误
05.09.2014 14:17:16 httpd system_u:system_r:httpd_t:s0 6 dir getattr unconfined_u:object_r:user_home_dir_t:s0 denied 53606

我到目前为止试过的(没有成功):

chcon -R -t httpd_sys_script_rw_t /home/user123/*
chcon -R -t httpd_user_content_t /home/user123/*

添加目录到apache用户目录配置(/etc/httpd/conf.d/userdir.conf

<Directory "/home/user123/*"> 
    AllowOverride None 
    Require all granted 
</Directory> 

我失去了什么/我到底做错了什么?

相关信息的系统:

Server version: Apache/2.4.6 (CentOS) 
PHP version 5.4.16 
SELinux enforcing 
CentOS 7 

UPDATE
授予apache的权限读取主目录从SELinux的
setsebool -P httpd_enable_homedirs on

解决了否认错误,但file_get_contents(/home/user123/subdir/info.txt): failed to open stream: Permission denied (2)是STIL有...

+1

你对'/家庭/ user123'至少'701'? Apache用户需要能够遍历它来列出内容。运行'chmod O + X /家庭/ user123'(那当然'O + r'上的目标文件) – 2014-09-05 12:56:19

+1

(和+1解决您的SELinux的问题,而只是'setenforce 0'),它不应该是必要设置'正如你所做的那样,在/ home/user123中的所有内容上都有httpd_user_content_t',这可能会导致其他问题。相反,你可以将它设置在apache实际上将读取的目录中。'chcon -R -t httpd_user_content_t/home/user123/subdir'我使用这种方法。在设置'httpd_user_content_t'之前,要恢复主目录中的旧上下文'restorecon -R/home/user123'。 – 2014-09-05 12:59:53

+1

最后注意到,虽然之前设置这方面'httpd_enable_homedirs'似乎没有做任何事情,我相信它_is_除了'httpd_enable_homedirs'实际需要。 – 2014-09-05 13:00:26

回答

3

为了与SELinux enforcin正常工作g,有几件事情需要适当对齐。

首先,主目录需要被所有者以外的用户遍历。通常,主目录是700apache用户需要执行:

chmod o+x /home/user123 

同样地,里面的目录,其中目标文件和文件本身必须是可读的,并且目录可执行文件(穿越):

chmod o+x /home/user123/subdir 
chmod -R o+r /home/user123/subdir 

当你发现,你需要设置中的SELinux允许宿主目录(-P坚持重新启动时)

setsebool -P httpd_enable_homedirs on 

最后,目标目录需要正确的SELinux上下文。对于只读目录,httpd_user_content_t可能是最合适的。

chcon -R -t httpd_user_content_t /home/user123/subdir 

重要的是注意:只有Apache需要阅读应该有它的SELinux改变了目录。没有必要改变主目录本身的环境/home/user123,这样做可能会对其他事情产生有害影响(甚至可能会影响您的登录能力!)