vsftpd架設(Super daemon-匿名登入)

由 Derek 發表於 五月 17, 2011 / 4 則評論

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-匿名用戶

若要了解匿名登入可參考此篇stand alone-實體用戶

 

 

匿名登入的設定方式

首先我們要先知道當用匿名登入時的目錄在那個地方。基本上都是放在預設/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_enableuserlist_deny』。

       如果說/etc/vsftpd.ftpusersPAM模組的抵擋設定項目,那麼這個/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                  #設定為YES時,表示anonymous將會略過密碼檢驗步驟,而

                                                                               直接進vsftpd伺服器內

anon_max_rate=30000                     #設定值後面接數值單位為bytes/秒,限制anonymous的傳輸

                                                                               速度,如果是0則不限制

data_connection_timeout=120         #如果伺服器與用戶端的資料連線已經成功建立,但是可能

                                                                              由於線路問題導致 300秒內還是無法順利的完成資料

                                                                              的傳送,那用戶端的連 線就會被vsftpd強制剔除

idle_session_timeout=600                #如果使用者在 600 秒內都沒有命令動作,強制離線

max_clients=10                                 #這個設定項目可以設定同一時間,最多有多少 client 可以同

                                                                              時連上vsftpd

max_per_ip=1                             #max_clients 類似,這裡是同一個 IP 同一時間可允許多少連線

local_enable=NO                #設定是否讓/etc/passwd內的帳號以實體用戶的方式登入vsftpd主機

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                  #是否設定為wu ftp相同的登錄檔格式?如果有使用wu ftp登錄

                                                                         檔分析軟體,這裡才需要設定為 YES

pam_service_name=vsftpd            #這個是pam模組的名稱,我們放置在/etc/pam.d/vsftpd

listen=YES                                       #設定為YES是以standalone啟動,設為NO則是用

                                                                          supe daemon啟動

tcp_wrappers=YES                           #支援 TCP Wrappers

banner_file=/etc/vsftpd/welcome.txt             #可以在使用者登入vsftpd伺服器時顯示的歡迎字樣

 

[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的被動式資料連接之用,假設被動式連接的埠口為6540065410時可這樣設定


[root@localhost ~]#  vi /etc/vsftpd/vsftpd.conf

#增加下面幾行就好

pasv_min_port=65400

pasv_max_port=65410

#上面兩個是與passive mode使用的port number有關,如果想要使用654006541011port來進行被動式連線模式的連接,可以這樣設定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

 

關於作者

一個半路殺出來的傻小子,憑著一股傻勁努力的學習、嘗試、分享。希望能用自己微薄之力,替IT界和資訊界盡一點心力。單憑一己之力始終還是有限,歡迎和我有相同理念的夥伴一同加入一同努力。

評論

  1. Jackqueline Shenk 說: 2011/05/29

    Thank you, I have recently been searching for information about this topic for ages and yours is the best I have discovered so far.

  2. Pia Korns 說: 2011/05/27

    Great site. A lot of useful information here. I’m sending it to some friends!

  3. Breana Kjolseth 說: 2011/05/27

    Great information! I’ve been looking for something like this for a while now. Thanks!

    • Derek 說: 2011/05/27

      I hope to help you that by my blog

發表評論至 Breana Kjolseth

*