Copyright © Mike's Blog
Design by Dzignine
2013年11月25日 星期一

每次都是SELinux的問題..

最近使用centos架一台主機,本來以為會跟fedora一樣平易近人,沒想到設定也是很麻煩!
而且一直出現SELinux的問題,導致常常去找設定問題,最後都是因為SELinux擋住了。雖然安全性提高,但是擾人程度實在不在話下,不過像我這種超新手還是不要隨便關掉這個偉大的安全機制,因此,在這邊記錄一下可能會碰到的問題。

新增使用者之後ftp無法上傳
首先,先檢查ftp_home_dir有沒有打開,可以輸入$getsebool -a | grep ftp後,會列出以下訊息:

allow_ftpd_anon_write --> off
allow_ftpd_full_access --> off
allow_ftpd_use_cifs --> off
allow_ftpd_use_nfs --> off
ftp_home_dir --> off
(略)

這時候就輸入$setsebool -P ftp_home_dir=1後再試試看ftp,如果還是不行的話,就切到/home下面去查看使用者的資料夾屬性:
$cd /home
$ls -Z
會顯示出資料夾selinux的設定
drwxr-xr-x. aaa     aaa     system_u:object_r:user_home_dir_t:s0 aaa
drwxr-xr-x. bbb     bbb      system_u:object_r:home_root_t:s0 bbb

上面的bbb的home_root_t就是阻擋ftp最大的元兇,只要改成跟aaa一樣就可以上傳了,
$chcon -t user_home_dir_t bbb,這時立馬打開ftp測試,應該是沒有問題,如果操作有權限問題,記得用sudo,如果再不行的話,就google大神吧!

php噴出 permission denied
第一,先切到你要上傳的資料夾路徑,然後確定權限為775及group,以centos為例的話,httpd跑的group是apache,所以來瞧瞧設定有沒有問題:
$ls -l
列出
drwxrwxr-x.  9 mike apache   4096 2013-10-14 01:00 upload
(略)
看起來很完美,可是上傳還是無法,去check一下/tmp權限也是沒問題的,然後跑去看一下php.ini設定上也沒有錯....沒錯!問題又是SELinux,所以再看一下資料夾屬性:
$ls -Z
drwxrwxr-x. tounsen apache  system_u:object_r:user_home_t:s0 upload
(略)

果然出現的user_home_t屬性是不能讓我們上傳的,所以要將屬性改成httpd_sys_content_t就可以了:
$chcon -R -t httpd_sys_content_t upload
這樣應該可以順利上傳檔案了,上面加上-R是資料夾內部所有檔案也改變屬性。
以上是我在安裝及設定網站常常撞牆的問題,記錄一下,以後可以參考。

2014/01/07補充一下 httpd_sys_content_t 可能會擋ftp或是apache,可以改用httpd_user_content_t

參考連結:
http://diegobz.net/2010/03/07/enabling-apache-userdir-public_html-with-selinux-enabled-on-fedora/
http://linux.vbird.org/linux_server/0410vsftpd.php

0 意見:

張貼留言