針對 CentOS 的 SELinux 攔截 vsftpd 問題(不關閉SELinux)

VSFTPD是一個FTP服務器程序,而後SELinux是CentOS的防火牆組件。因爲 vsftpd 默認被 SELinux 攔截,因此會遇到的FTP如下的問題:安全

226 Transfer done (but failed to open directory).(傳輸完成,可是打開路徑失敗)服務器

550 Failed to change directory(更改路徑失敗)網絡

550 Create directory operation failed.(建立目錄失敗)spa

553 Could not create file.code

或者乾脆在發送了LIST命令之後,服務器沒響應,超時斷開(500 OOPS: vsftpd:chroot) 。server

遇到這樣的問題,一般是vsftpd 沒有足夠的權限,頗有多是被SELinux阻止了。網絡上流行的解決辦法是直接關閉SELinux,這樣作會引發其它安全問題,因此下面還有其它更好的方法。 ci

爲了肯定是否是這個問題,咱們須要先試着關閉SELinux,看是否是就是它致使的。get

setenforce 0 #暫時讓SELinux進入Permissive模式

運行完之後再嘗試,若是FTP能取得目錄、上傳下載,那麼證實就是SELinux致使的。it

解決辦法:咱們能夠運行 getsebool -a | grep ftpd 判斷查看權限io

getsebool -a | grep ftp

#如下是顯示出來的權限,off是關閉權限,on是打開權限,已經設置,沒設置時全是off
ftpd_anon_write --> off
ftpd_connect_all_unreserved --> off
ftpd_connect_db --> on
ftpd_full_access --> on
ftpd_use_cifs --> off
ftpd_use_fusefs --> off
ftpd_use_nfs --> off
ftpd_use_passive_mode --> off
httpd_can_connect_ftp --> off
httpd_enable_ftp_server --> off
tftp_anon_write --> off
tftp_home_dir --> on

其中,ftp_home_dir和allow_ftpd_full_access必須爲on 才能使vsftpd 具備訪問ftp根目錄,以及文件傳輸等權限。

運行如下命令:

setsebool -P ftp_home_dir 1
setsebool -P allow_ftpd_full_access 1

注意這兩條命令通常須要花上十幾秒鐘才能運行完 

運行完了之後,咱們再從新恢復SELinux進入Enforcing模式。

setenforce 1 #進入Enforcing模式

若是不出意外的話,咱們就能夠訪問到ftp目錄了,vsFTPd就能夠正常上傳下載文件了。

可是若是就此問題還沒解決的話,多是FTP訪問的目錄屬性不夠。建議用 chmod -R 777 路徑 將路徑讀寫屬性設置爲777,再嘗試,一般也能解決問題。

相關文章
相關標籤/搜索