redhat vsftpd及vsftpd 500 OOPS: cannot change directory錯誤解決

guyuanli發表於2009-08-24

、以root賬戶登入RedHat ,以下是用原始碼安裝的過程,大家可以下最新的原始碼在官方網站上

[root@redhat ~]# tar -zxvf vsftpd-2.0.5.tar.gz //解壓vsftp source檔案

[root@redhat ~]# cd vsftpd-2.0.5 //進入解壓後的目錄

[@more@][root@redhat vsftpd-2.0.5]# more INSTALL //看看安裝說明。比如要做什麼工作。是個英文文件--------建議大家一定要看啊!安裝說明很詳細的,你要是耐心的看完,就完完全全可以不用看我下面寫的內容啦!o(∩_∩)o...哈哈

[root@redhat vsftpd-2.0.5]# useradd nobody //這裡需要加一個nobody使用者。大家可以使用finger nobody檢視下。看是否有這個使用者。用就不需要加了

[root@redhat vsftpd-2.0.5]# mkdir /usr/share/empty //這一步同上。伺服器需要一個empty的空目錄放在/usr/share/下。可以使用ls /usr/share/empty檢視。如果存在就不需要了。這步也可以跳過

如果需要開啟匿名使用者訪問,需要做下面幾步工作

[root@redhat vsftpd-2.0.5]# mkdir /var/ftp / //建立供匿名使用者使用的目錄【ftp就是你以後要匿名登陸的使用者名稱

[root@redhat vsftpd-2.0.5]# useradd -d /var/ftp ftp //建立ftp使用者並且指定家目錄為/var/ftp,這個步驟一般的系統也有。如果建立提示:user ftp exists(FTP使用者存在)就表示此使用者已經存在。

繼續下一步

[root@redhat vsftpd-2.0.5]# chown root.root /var/ftp //設定/var/ftp,也就是ftp使用者的家目錄屬組和屬主都是root,為了安全,這步還是需要的

[root@redhat vsftpd-2.0.5]# chmod og-w /var/ftp //更改許可權,去掉屬組和其他人的寫許可權

上面這寫工作做完了

二、下面為編譯與安裝過程

[root@redhat vsftpd-2.0.5]# make //編譯二進位制檔案【注意要在安裝系統的時候安裝GCC等開發軟體包呀!我今天就是犯這個錯誤了,害得忙了老半天類.】

[root@redhat vsftpd-2.0.5]# make install //安裝,安裝的時候可以看到安裝的相關檔案。

[root@redhat vsftpd-2.0.5]# cp vsftpd.conf /etc/ //複製配置檔案

[root@redhat vsftpd-2.0.5]# cp RedHat/vsftpd.pam /etc/pam.d/ftp //複製PAM安全驗證檔案此為驗證檔案所在的目錄

[root@redhat vsftpd-2.0.5]# vi /etc/vsftpd.conf

然後按SHIFT+G,跳到行尾,在#ls recurse_enable=YES的下面增加一行

listen=YES

詳細的配置引數會文章最後貼出..

然後:wq儲存退出

[root@redhat vsftpd-2.0.5]# cp vsftpd.conf.5 /usr/local/man/man5

[root@redhat vsftpd-2.0.5]# cp vsftpd.8 /usr/local/man/man8

基本到這裡。所有工作就做完了。但是還要說點東西

預設情況下vsftp是以超級守護程式(xinetd)執行的。

三、啟動方式(兩種方式)

【方法一】[root@redhat vsftpd-2.0.5]# service xinetd restart //重啟超級守護程式就等於啟動了vsftp

【方法二】獨立執行需要修改配置檔案

[root@redhat vsftpd-2.0.5]# vi /etc/vsftpd.conf

然後按,跳到行尾。加上listen=YES.然後:wq儲存退出

這樣就可以使用下面這條語句啟動

[root@redhat vsftpd-2.0.5]# /usr/local/sbin/vsftpd & // &表示後臺啟動vsftp

[root@redhat vsftpd-2.0.5]# echo "/usr/local/sbin/vsftpd &" >> /etc/rc.local //追加到啟動指令碼上,以後啟動時可以直接使用#/etc/rc.local即可

另外、關閉ftp程式用#killall -9 vsftpd命令,檢視命令#netstat -tnl 並用#ftp local的IP 測試登陸

【 推薦大家使用第二種方法.】

四、 配置檔案詳細內容

vsftpd的配置
vsftpd.ftpusers:位於/etc目錄下。它指定了哪些使用者賬戶不能訪問FTP伺服器,例如root等。
vsftpd.user_list:位於/etc目錄下。該檔案裡的使用者賬戶在預設情況下也不能訪問FTP伺服器,僅當vsftpd .conf配置檔案裡啟用userlist_enable=NO選項時才允許訪問。
vsftpd.conf:位於/etc/vsftpd目錄下。來自定義使用者登入控制、使用者許可權控制、超時設定、伺服器功能選項、伺服器效能選項、伺服器響應訊息等FTP伺服器的配置。

(1)使用者登入控制
anonymous_enable=YES,允許匿名使用者登入。
no_anon_password=YES,匿名使用者登入時不需要輸入密碼。
local_enable=YES,允許本地使用者登入。
deny_email_enable=YES,可以建立一個檔案儲存某些匿名電子郵件的黑名單,以防止這些人使用Dos攻擊。
banned_email_file=/etc/vsftpd.banned_emails,當啟用deny_email_enable功能時,所需的電子郵件黑名單儲存路徑(預設為/etc/vsftpd.banned_emails)。

(2)使用者許可權控制
write_enable=YES,開啟全域性上傳許可權。
local_umask=022,本地使用者的上傳檔案的umask設為022(系統預設是077,一般都可以改為022)。
anon_upload_enable=YES,允許匿名使用者具有上傳許可權,很明顯,必須啟用write_enable=YES,才可以使用此項。同時我們還必須建立一個允許ftp使用者可以讀寫的目錄(前面說過,ftp是匿名使用者的對映使用者賬號)。
anon_mkdir_write_enable=YES,允許匿名使用者有建立目錄的權利。
chown_uploads=YES,啟用此項,匿名上傳檔案的屬主使用者將改為別的使用者賬戶,注意,這裡建議不要指定root賬號為匿名上傳檔案的屬主使用者!
chown_username=whoever,當啟用chown_uploads=YES時,所指定的屬主使用者賬號,此處的whoever自然要用合適的使用者賬號來代替。
chroot_list_enable=YES,可以用一個列表限定哪些本地使用者只能在自己目錄下活動,如果chroot_local_user=YES,那麼這個列表裡指定的使用者是不受限制的。
chroot_list_file=/etc/vsftpd.chroot_list,如果chroot_local_user=YES,則指定該列表(chroot_local_user)的儲存路徑(預設是/etc/vsftpd.chroot_list)。
nopriv_user=ftpsecure,指定一個安全使用者賬號,讓FTP伺服器用作完全隔離和沒有特權的獨立使用者。這是vsftpd系統推薦選項。
async_abor_enable=YES,強烈建議不要啟用該選項,否則將可能導致出錯!
ascii_upload_enable=YES;ascii_download_enable=YES,預設情況下伺服器會假裝接受ASCⅡ模式請求但實際上是忽略這樣的請求,啟用上述的兩個選項可以讓伺服器真正實現ASCⅡ模式的傳輸。
注意:啟用ascii_download_enable選項會讓惡意遠端使用者們在ASCⅡ模式下用“SIZE/big/file”這樣的指令大量消耗FTP伺服器的I/O資源。
這些ASCⅡ模式的設定選項分成上傳和下載兩個,這樣我們就可以允許ASCⅡ模式的上傳(可以防止上傳指令碼等惡意檔案而導致崩潰),而不會遭受拒絕服務攻擊的危險。

(3)使用者連線和超時選項
idle_session_timeout=600,可以設定預設的空閒超時時間,使用者超過這段時間不動作將被伺服器踢出。
data_connection_timeout=120,設定預設的資料連線超時時間。

(4)伺服器日誌和歡迎資訊
dirmessage_enable=YES,允許為目錄配置顯示資訊,顯示每個目錄下面的message_file檔案的內容。
ftpd_banner=Welcome to blah FTP service,可以自定義FTP使用者登入到伺服器所看到的歡迎資訊。
xferlog_enable=YES,啟用記錄上傳/下載活動日誌功能。
xferlog_file=/var/log/vsftpd.log,可以自定義日誌檔案的儲存路徑和檔名,預設是/var/log/vsftpd.log。

在啟動vsftpd,有時會報錯:
C:>ftp 192.168.0.101
Connected to 192.168.0.101.
220 (vsFTPd 2.0.5)
User (192.168.0.101:(none)): frank
331 Please specify the password.
Password:
500 OOPS: cannot change directory:/home/frank
Login failed.
ftp> ls
500 OOPS: child died
Connection closed by remote host.

解決方法是:
ref: http://hi.baidu.com/qhdinfo/blog/item/eee71e0e7abc25c97acbe17d.html
在終端輸入命令:
setsebool ftpd_disable_trans 1
service vsftpd restart
就OK了!

後來google.com後才發現這是SELinux的設定命令.
其實 man 一下setsebool也知道了:
NAME
setsebool - set SELinux boolean value

在不熟悉SELnux前,把SELinux關掉也可以的。有時間研究下SELinux。
在想用SELinux但是又不熟悉的情況下可以把SELinux設定成Permissive,表示SELinux規則啟動,但只是把違規的記錄到log中。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/7490392/viewspace-1026280/,如需轉載,請註明出處,否則將追究法律責任。

相關文章