vsftpd架設(stand alone-實體用戶)

由 Derek 發表於 五月 16, 2011 / 1 則評論

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

 

這邊先介紹stand alone-實體用戶

若要了解匿名登入可參考此篇super daemon-匿名用戶

 

查詢是否有安裝vsftpd


[root@localhost ~]#  rpm -q vsftpd

vsftpd-2.0.5-16.el5_4.1

 


如果你的 CentOS 沒有安裝, 請利用 yum install vsftpd 來安裝他吧


 [root@localhost ~]# yum install vsftpd

Loaded plugins: fastestmirror

Loading mirror speeds from cached hostfile

 * addons: centos.ustc.edu.cn

 * base: centos.ustc.edu.cn

 * extras: centos.ustc.edu.cn

 * updates: centos.ustc.edu.cn

addons                                                   |  951 B     00:00

base                                                       |  2.1 kB     00:00

#中間內容略過。

Is this ok [y/N]: y

中間過程會有兩次需要輸入y(確定)

Is this ok [y/N]: y

Running rpm_check_debug

Running Transaction Test

Finished Transaction Test

Transaction Test Succeeded

Running Transaction

  Updating       : vsftpd                                                   1/2

  Cleanup        : vsftpd                                                   2/2

Updated:

  vsftpd.x86_64 0:2.0.5-16.el5_5.1

Complete!

#這樣就安裝完了

 

 

先來啟動vsftp


 [root@localhost ~]# /etc/init.d/vsftpd start

正在啟動 vsftpd 中的 vsftpd:                               [  確定  ]

[root@localhost ~]# netstat -tulnp| grep 21  

tcp    0    0 0.0.0.0:21     0.0.0.0:*       LISTEN      4804/vsftpd

#確定vsftp服務是否有起來,並且是以vsftp所啟動的

 

 

 首先,先說明一下幾個重要的設定檔案

    /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預設匿名者登入的根目錄

 

 

stand alone】的設定方式

  在CentOS中,預設上vsftp是開放給實體用戶和匿名使用者的。

  Vsftp的預設值可以到 /etc/vsftpd/vsftpd.conf這邊查看。

stand alone】又分為實體用戶和匿名使用者。

 

 

實體用戶的設定方式

CentOS的預設中,雖然實體用戶已經可以使用FTP,但還是需要一些額外的限制來限制

實體用戶。像是無法離開家目錄、限制下載速、限制使用者登入和其他權限等功能。

可依照個人的需求來設定vsftpd.conf,以下是一些基本的設定可參考看看。

至於其它Vsftd.conf詳細說明,可以參考【Vsftd.conf設定說明


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

anonymous_enable=NO    #設定為不允許anonymous (匿名登入的vsftpd主機

底下為與實體用戶相關的資訊

可寫入,且新增目錄、檔案權限為 775,因為 umask  002

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

write_enable=YES        #設定是否允許使用者上傳資料。

local_umask=002           設定抵擋某些使用者登入的項目設定值!注意,底下的檔案必須存在

userlist_enable=YES      #是否藉助 vsftpd 的抵擋機制來處理某些不受歡迎的帳號

userlist_deny=YES       # userlist_enable=YES 時才會生效的設定,當使用者帳號被列入到某

                                            個檔案時,在該檔案內的使用者將無法登入vsftpd伺服器

userlist_file=/etc/vsftpd.user_list   #若上面 userlist_deny=YES 時,在這個檔案內的帳號都無法

                                                                使用 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時間

        使用者登入後顯示歡迎訊息

        系統帳號(root之類)不可登入主機(亦即UID小於500以下的帳號)

        一般實體用戶可以上傳、下載、建立目錄及修改檔案動作

        使用者新增的檔案、目錄之umask希望設定為002

        其他設定保留預設值就可以了

 

 

建立歡迎訊息 :

當使用者登入FTP時,會看到的歡迎字樣或是系統管理員想要告知的訊息。

就是剛剛這個參數 banner_file=/etc/vsftpd/welcome.txt的用途了。

把要給使用者看的字樣寫到vi /etc/vsftpd/welcome.t


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

歡迎光臨 FAQ-BOOK

這是一個TEST的訊息

 

 

建立限制系統帳號登入的檔案

針對系統帳號來給予抵擋的機制,其實有兩個檔案啦,一個是 PAM 模組管的,一個是當登入FTP時就會看到下圖的字樣vsftpd 主動提供的,在預設的情況下這兩個檔案分別是:

        /etc/vsftpd/ftpusers:就是 /etc/pam.d/vsftpd 這個檔案的設定所影響的

        /etc/vsftpd.user_list:由 vsftpd.conf userlist_file 所設定

這兩個檔案的內容是一樣的,並且這兩個檔案必須要存在才行。請參考/etc/passwd 設定檔,然後將UID小於500的帳號名稱給他同時寫到這兩個檔案內吧。一行一個帳號


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

root

bin

 


接下來就登入FTP測試一下看有沒有問題

可用圖形介面,或用Linux本身的ftp功能測試


 [root@localhost ~]#  ftp localhost

Connected to localhost.localdomain.

220-歡迎光臨 FAQ-BOOK       # 剛剛所建立的訊息

220-這是一個TEST的訊息

220

530 Please login with USER and PASS.

530 Please login with USER and PASS.

KERBEROS_V4 rejected as an authentication type

Name (localhost:root): derek    #登入帳號

331 Please specify the password.

Password:     # 輸入密碼

230 Login successful.

Remote system type is UNIX.

Using binary mode to transfer files.

ftp> bye

221 Goodbye.

測試完後,可在用 rootanonymous的帳號登入看看。如果不能登入就表示設定完成

 

 

 

Chroot的使用(不讓使用者帳號離開家目錄)

想要讓特定的帳號不能離開家目錄,修改vsftpd.conf,增加下面幾個參數就可以了。


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

#增加針對某些使用者來Chroot的相關設定

chroot_list_enable=YES                  #是否啟用將某些實體用戶限制在他們的家目錄內

chroot_list_file=/etc/vsftpd.chroot_list   #如果 chroot_list_enable=YES就可以設定這項目,他可以規定那一個實體

                                           用戶會被限制在自己的家目錄內無法離開, 一行一個帳號即可

[root@localhost ~]#  /etc/init.d/vsftpd restart

 


然後建立要被 chroot 的使用者檔案


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

derek

 這樣就可以把此使用者限制在家目錄內不能離開

 

 

如果在設定完後,登入FTP測試出現【vsftpd 500 OOPS:chroot】的錯誤訊息的話。

可參考此篇文章【vsftpd 500 OOPS:chroot

 

 

另一種chroot的環境

上述的方法是預設的實體用戶沒有被chroot,而特定的帳號被chroot

那如果要所有預設的使用者都被chroot,但某些使用者不被chroot,那就依下面的方法設定


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

#預設所有實體用戶被chroot,而只開放某些帳號

chroot_local_user=YES         #將使用者限制在自己的家目錄之內(chroot)

chroot_list_enable=YES         #否啟用將某些實體用戶限制在他們的家目錄內

chroot_list_file=/etc/vsftpd.chroot_list    #可以規定那一個實體用戶被限制在自己的家目錄內而無法離開

[root@localhost ~]#  /etc/init.d/vsftpd restart

由於多了 chroot_local_user=YES 這個參數,因此寫入 /etc/vsftpd.chroot_list 內的使用者反而是被認為可以不受 chroot 的帳號。

 

所以如果你想要讓帳戶可以離開家目錄的話。就必須把帳號加到 /etc/vsftpd.chroot_list


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

derek

/etc/vsftpd.chroot_list才可離開因為在之後所新增的帳號都是預設被chroot(不能離開家目錄),除非有被加入到

 

 

下載頻寬的限制


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

#在最底下加入這個參數

local_max_rate=200000        #實體用戶的傳輸速度限制,單位為 bytes/second 0 為不限制

[root@localhost ~]#  /etc/init.d/vsftpd restart

 限頻寬的單位是Bytes/秒。

 

限制同時最大上線人數和同IP同時連線數


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

#在最底下加入這個參數

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

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

[root@localhost ~]#  /etc/init.d/vsftpd restart

 


 

只允許某些人可使用FTP,就算是新使用者也不能使用FTP

在上面的設定中,將『不許使用FTP的帳號寫入/etc/vsftp.user_list檔案中』那麼沒加入的自然

就可使用FTP。那如果現在剛好相反我只想允許某些帳號使用FTP,剩下的都不能使用FTP

的話。可參考下面設定


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

#在最底下加入這個參數

userlist_enable=YES       

userlist_deny=NO       #主要是把原先YESNO

userlist_file=/etc/vsftpd.user_list

[root@localhost ~]#  /etc/init.d/vsftpd restart

就必須加到這個地方。就算是新增的使用者也不能使用FTP設定好後,『加入到/etc/vsftpd.user_list就變成可用的FTP帳號』也就是說將來使用者想要FTP

 

假設如果因某些需求要使用到開放root使用FTP的話,可以這樣做

由於系統帳號無法使用FTP是因為PAM模組與vsftpd的內建功能所致,

亦即是 /etc/vsftpd.ftpusers/etc/vsftpd.user_list這兩個檔案的影響。

所以你只要進入這兩個檔案,並且將root那一行註解

root就可以使用 vsftpd這個 FTP 服務了。 不過,不建議如此

 

 

防火牆設定

在防火牆中加入下面這一段

主動連線的設定


 [root@localhost ~]#  vi /etc/sysconfig/iptables

-A RH-Firewall-1-INPUT -m state  --state NEW -m tcp -p tcp  --dport 21 -j ACCEPT

 


被動連線的設定,所以某些特殊情況底下, 或許你還需要啟動被動式連線的監聽的

埠口哩。以上面我們談過的 port 65400 ~ 65410 這幾個當作範例


 [root@localhost ~]#  vi /etc/sysconfig/iptables

-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --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. Leigh Roever 說: 2011/05/29

    Finally, an issue that I am passionate about. I have looked for information of this caliber for the last several hours. Your site is greatly appreciated.

發表評論至 Leigh Roever

*