2014-09-05 61 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,這樣做可能會對其他事情產生有害影響(甚至可能會影響您的登錄能力!)