vsftpd 的全名是『Very Secure FTP Daemon 』
vsftpd 擁有兩種啟動的方式,分別是一直在監聽的【stand alone】 ,
一種則是透過 xinetd 這個 【super daemon】 來管理的方式。
在CentOS上預設都是用Stand alone來啟動的。
兩種vsftpd的使用時機為 :
【stand alone】: 如果你的ftp伺服器是提供給整個網際網路來進行大量下載的任務,例如公
家機關,或各大學校的 FTP 伺服器,那建議你使用stand alone 的方式,
服務的速度上會比較好
【super daemon】: 如果只是提供給公司內部人員使用的FTP,那使用super daemon來
管理就可以了
在【stand alone】中又可分為【stand alone-實體用戶】和【super daemon-匿名用戶】
這邊先介紹【super daemon-匿名用戶】
匿名登入的設定方式
首先我們要先知道當用匿名登入時的目錄在那個地方。基本上都是放在預設/var/ftp/目錄當中。
首先,先說明一下幾個重要的設定檔案
● /etc/vsftpd/vsftpd.conf
簡單來說,整個 vsftpd 的設定檔就只有這個檔案!是用『參數=設定值』來設定的, 等號兩邊不
能有空白喔!詳細的vsftpd.conf說明可用『man 5 vsftpd.conf 』查看。
● /etc/pam.d/vsftpd
這個是 vsftpd 使用 PAM 模組時的相關設定檔。主要用來作為身份認證之用,還有一些使用者
身份的抵擋功能, 也是透過這個檔案來達成的。
● /etc/vsftpd.ftpusers
和/etc/pam.d/vsftpd有關係,也就是PAM模組(/etc/pam.d/vsftpd_ 所指定的那個無法登入的使用
者設定檔。這個檔案的設定很簡單,只要將『不想讓他登入的帳號』寫入這個檔案就可以。一行
一個帳號。
● /etc/vsftpd.user_list
這個檔案能否生效與vsftpd.conf內的兩個參數有關,分別是『userlist_enable和userlist_deny』。
如果說/etc/vsftpd.ftpusers是PAM模組的抵擋設定項目,那麼這個/etc/vsftpd.user_list 則是 vsftpd
自訂的抵擋項目。事實上這個檔案與/etc/vsftpd.ftpusers幾乎一模一樣,在預設的情況下,你可
以將不希望可登入vsftpd的帳號寫入這裡。不過這個檔案的功能會依據vsftpd.conf設定檔內的
userlist_deny=(YES/NO) 而不同
● /etc/vsftpd.chroot_list
這個檔案預設是不存在的,所以必須要手動自行建立。這個檔案的主要功能是可以將某些帳號的
使用者chroot在家目錄下。但這個檔案要生效與vsftpd.conf內的『 chroot_list_enable,
chroot_list_file 』兩個參數有關。如果想要將某些實體用戶限制在家目錄下而不許到其他目錄去,
可以啟動這個設定項目喔
● /usr/sbin/vsftpd
這是 vsftpd 的主要執行檔,vsftpd只有這一個執行檔
● /var/ftp/
這是vsftpd預設匿名者登入的根目錄
建立vsftpd.conf的設定資料
雖然說可以同時開啟【stand alone-實體用戶】和【super daemon-匿名用戶 】,不過基於
安全性考量還是建議針對單一種身份來設定會比較安全一些。這邊就來介紹匿名登入的
設定方式
可依照個人的需求來設定vsftpd.conf,以下是一些基本的設定可參考看看。
至於其它Vsftd.conf詳細說明,可以參考【Vsftd.conf設定說明】
[root@localhost ~]# vi /etc/vsftpd/vsftpd.conf anonymous_enable=NO #設定為允許anonymous (匿名) 登入的vsftpd主機 no_anon_password=YES 直接進入vsftpd伺服器內 anon_max_rate=30000 #設定值後面接數值單位為bytes/秒,限制anonymous的傳輸 速度,如果是0則不限制 data_connection_timeout=120 由於線路問題導致 300秒內還是無法順利的完成資料 的傳送,那用戶端的連 線就會被vsftpd強制剔除 idle_session_timeout=600 max_clients=10 #這個設定項目可以設定同一時間,最多有多少 client 可以同 時連上vsftpd max_per_ip=1 local_enable=NO use_localtime=YES #是否使用本地時間?預設使用GMT時間(格林威治),會比 台灣晚8小時,建議設定為YES吧 dirmessage_enable=YES #使用者進入某個目錄時,會顯示該目錄需要注意的內容, 顯示的檔案預設是.message xferlog_enable=YES #使用者上傳與下載檔案都會被紀錄起來。 connect_from_port_20=YES #主動式連線使用的FTP伺服器的埠號,這就是ftp-data的埠號 xferlog_std_format=YES 檔分析軟體,這裡才需要設定為 YES pam_service_name=vsftpd listen=YES #設定為YES是以standalone啟動,設為NO則是用 supe daemon啟動 tcp_wrappers=YES #支援 TCP Wrappers banner_file=/etc/vsftpd/welcome.txt
[root@localhost ~]# /etc/init.d/vsftpd restart |
● 使用台灣本地時間取代GMT時間以上的設定主要是 :
● 使用者登入後顯示歡迎訊息
● 開放anonymous的登入,不需要密碼
● 設定檔案傳輸速度
● 資料連接過程,超過一定時間沒回應,就強制斷線
● 只要anonymous超過一定時間沒動作,就自動斷線
● 設定最大同時上線人數,和同ip最大連線數
建立歡迎訊息 :
當使用者登入FTP時,會看到的歡迎字樣或是系統管理員想要告知的訊息。
就是剛剛這個參數 banner_file=/etc/vsftpd/welcome.txt的用途了。
把要給使用者看的字樣寫到vi /etc/vsftpd/welcome.txt
[root@localhost ~]# vi /etc/vsftpd/welcome.txt 歡迎光臨 FAQ-BOOK 這是一個TEST的訊息 |
再來測試是否設定正確
可用圖形介面,或用Linux本身的ftp功能測試
[root@localhost ~]# ftp localhost Connected to localhost.localdomain. 220-歡迎光臨 FAQ-BOOK #剛剛所建立的訊息 220-這是一個TEST的訊息 220 KERBEROS_V4 rejected as an authentication type Name (localhost:root): anonymous # 登入帳號 230 Login successful. Remote system type is UNIX. Using binary mode to transfer files. ftp> bye 221 Goodbye. |
如果在設定完後,登入FTP測試出現【vsftpd 500 OOPS:chroot】的錯誤訊息的話。
可參考此篇文章【vsftpd 500 OOPS:chroot】
建立上傳/下載目錄
[root@localhost ~]# vi /etc/vsftpd/vsftpd.conf #加入這些參數 write_enable=YES #允許使用者上傳資料時,就要啟動這個設定值 anon_other_write_enable=YES #是否允許 anonymous 具有寫入的權限 anon_mkdir_write_enable=YES #是否讓 anonymous 具有建立目錄的權限 anon_upload_enable=YES #是否讓 anonymous 具有上傳資料的功能 [root@localhost ~]# /etc/init.d/vsftpd restart |
設定好這四個參數後。就會擁有完整的建立、刪除、修改檔案和目錄的權限。但是實際生效還需要Linux的檔案系統權限正確才行。匿名者取得的身份是ftp,所以是上傳資料到/var/ftp/upload中。則要先建立好資料夾,設好權限就可使用。
[root@localhost ~]# mkdir /var/ftp/upload [root@localhost ~]# chown ftp /var/ftp/upload |
用匿名登入橫就會發現多了一個/uplaod的目錄了。並且可以上傳檔案到目錄中
建立只可上傳的目錄
建立一個只可以上傳,不提供下載的目錄。把/var/ftp/upload設定成只能上傳不能下載時,上傳的權限就要修改一下。
[root@localhost ~]# vi /etc/vsftpd/vsftpd.conf #把某些參數改一下 write_enable=YES #允許使用者上傳資料時,就要啟動這個設定值 anon_mkdir_write_enable=YES #是否讓 anonymous 具有建立目錄的權限 anon_upload_enable=YES #是否讓 anonymous 具有上傳資料的功能 chown_uploads=YES chown_username=root [root@localhost ~]# /etc/init.d/vsftpd restart |
如此一來被上傳的檔案將會被修改成檔案擁有者成為root這個使用者。所以匿名使用者就無法讀取到此資料了。
被動式連線埠口的限制
在FTP連線部份可以分為主動式和被動式,主動式都是透過伺服器的port20對外主動連線,所以在防火強部份比較好設定。而在被動式連線就比較麻煩。因為預設FTP伺服器會隨機取幾個沒有在使用的埠口來建立被動式連線,設定防火牆就有點麻煩。
可以透過指定幾個固定範圍內的埠口來作為FTP的被動式資料連接之用,假設被動式連接的埠口為65400到65410時可這樣設定
[root@localhost ~]# vi /etc/vsftpd/vsftpd.conf #增加下面幾行就好 pasv_min_port=65400 pasv_max_port=65410 #上面兩個是與passive mode使用的port number有關,如果想要使用65400到65410這11個port來進行被動式連線模式的連接,可以這樣設定pasv_max_port=6541 以及pasv_min_port=65400 如果是0的話,表示隨機取用而不限制。 [root@localhost ~]# /etc/init.d/vsftpd restart |
以上就是匿名使用者大致的設定
防火牆設定
在防火牆中加入下面這一段
主動連線的設定
[root@localhost ~]# vi /etc/sysconfig/iptables iptables -A INPUT -p TCP -i $EXTIF --dport 21 -j ACCEPT |
被動連線的設定,所以某些特殊情況底下, 或許你還需要啟動被動式連線的監聽的埠口哩!以上面
我們談過的 port 65400 ~ 65410 這幾個當作範例
[root@localhost ~]# vi /etc/sysconfig/iptables iptables -A INPUT -p TCP -i $EXTIF --dport 65400:65410 -j ACCEPT |
另外,如果你想要使用 TCP wrappers的方式來處理 FTP 的連線時,例如僅允許內部 (192.168.1.0/24)
來連線,那應該可以這樣做
[root@localhost ~]# vi /etc/hosts.allow vsftpd: 192.168.1.0/255.255.255.0 [root@localhost ~]# vi /etc/hosts.deny vsftpd: ALL |
在防火牆設定部份也可參考此篇 【
參考文獻 :
鳥哥Linux 架站文件 【vsFTPd Server】
Thank you, I have recently been searching for information about this topic for ages and yours is the best I have discovered so far.
Great site. A lot of useful information here. I’m sending it to some friends!
Great information! I’ve been looking for something like this for a while now. Thanks!
I hope to help you that by my blog