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-實體用戶】
查詢是否有安裝vsftpd
[root@localhost ~]# rpm -q vsftpd vsftpd-2.0.5-16.el5_4.1 |
如果你的 CentOS 沒有安裝, 請利用 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
正在啟動 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_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預設匿名者登入的根目錄
【stand alone】的設定方式
在CentOS中,預設上vsftp是開放給實體用戶和匿名使用者的。
Vsftp的預設值可以到 /etc/vsftpd/vsftpd.conf這邊查看。
【stand alone】又分為實體用戶和匿名使用者。
實體用戶的設定方式
在CentOS的預設中,雖然實體用戶已經可以使用FTP,但還是需要一些額外的限制來限制
實體用戶。像是無法離開家目錄、限制下載速、限制使用者登入和其他權限等功能。
可依照個人的需求來設定vsftpd.conf,以下是一些基本的設定可參考看看。
至於其它Vsftd.conf詳細說明,可以參考【Vsftd.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
歡迎光臨 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 bin |
接下來就登入FTP測試一下看有沒有問題
可用圖形介面,或用Linux本身的ftp功能測試
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. |
測試完後,可在用 root和anonymous的帳號登入看看。如果不能登入就表示設定完成
Chroot的使用(不讓使用者帳號離開家目錄)
想要讓特定的帳號不能離開家目錄,修改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 的使用者檔案
derek |
這樣就可以把此使用者限制在家目錄內不能離開
如果在設定完後,登入FTP測試出現【vsftpd 500 OOPS:chroot】的錯誤訊息的話。
可參考此篇文章【vsftpd 500 OOPS:chroot】
另一種chroot的環境
上述的方法是預設的實體用戶沒有被chroot,而特定的帳號被chroot。
那如果要所有預設的使用者都被chroot,但某些使用者不被chroot,那就依下面的方法設定
#預設所有實體用戶被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
derek |
/etc/vsftpd.chroot_list才可離開因為在之後所新增的帳號都是預設被chroot(不能離開家目錄),除非有被加入到
下載頻寬的限制
#在最底下加入這個參數 local_max_rate=200000 #實體用戶的傳輸速度限制,單位為 bytes/second, 0 為不限制 [root@localhost ~]# /etc/init.d/vsftpd restart |
限頻寬的單位是Bytes/秒。
限制同時最大上線人數和同IP同時連線數
#在最底下加入這個參數 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
的話。可參考下面設定
#在最底下加入這個參數 userlist_enable=YES userlist_deny=NO #主要是把原先的YES改為NO 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 服務了。 不過,不建議如此
防火牆設定
在防火牆中加入下面這一段
主動連線的設定
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 21 -j ACCEPT |
被動連線的設定,所以某些特殊情況底下, 或許你還需要啟動被動式連線的監聽的
埠口哩。以上面我們談過的 port 65400 ~ 65410 這幾個當作範例
-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) 來連線,那應該可以這樣做
vsftpd: 192.168.1.0/255.255.255.0 [root@localhost ~]# vi /etc/hosts.deny vsftpd: ALL |
在防火牆設定部份也可參考此篇 【
參考文獻 :
鳥哥Linux 架站文件 【vsFTPd Server】
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.