vsftpd作為一個主打安全的FTP伺服器,有很多的選項設定。下面介紹了vsftpd的設定檔列表,而所有的配置都是基於vsftpd.conf這個設定檔的。本文將提供完整的vsftpd.conf的中文說明。學習本文的內容將有助於你初步瞭解vsftpd的設定檔,但針對具體情況還需要制定具體的配置方法。
vsftpd的設定檔
| /etc/vsftpd/vsftpd.conf |
主設定檔 |
| /usr/sbin/vsftpd |
Vsftpd的主程式 |
| /etc/rc.d/init.d/vsftpd |
啟動指令碼 |
| /etc/pam.d/vsftpd |
PAM認證檔案(此檔案中file=/etc/vsftpd/ftpusers欄位,指明阻止訪問的使用者來自/etc/vsftpd/ftpusers檔案中的使用者) |
| /etc/vsftpd/ftpusers |
禁止使用vsftpd的使用者列表檔案。記錄不允許訪問FTP伺服器的使用者名稱單,管理員可以把一些對系統安全有威脅的使用者帳號記錄在此檔案中,以免使用者從FTP登入後獲得大於上傳下載操作的權利,而對系統造成損壞。(注意:linux-4中此檔案在/etc/目錄下) |
| /etc/vsftpd/user_list |
禁止或允許使用vsftpd的使用者列表檔案。這個檔案中指定的使用者預設情況(即在/etc/vsftpd/vsftpd.conf中設定userlist_deny=YES)下也不能訪問FTP伺服器,在設定了userlist_deny=NO時,僅允許user_list中指定的使用者訪問FTP伺服器。(注意:linux-4中此檔案在/etc/目錄下) |
| /var/ftp |
匿名使用者主目錄;本機使用者主目錄為:/home/使用者主目錄,即登入後進入自己家目錄 |
| /var/ftp/pub |
匿名使用者的下載目錄,此目錄需賦權根chmod 1777 pub(1為特殊許可權,使上傳後無法刪除) |
| /etc/logrotate.d/vsftpd.log |
Vsftpd的記錄檔 |
vsftpd的主設定檔/etc/vsftpd/vsftpd.conf說明(修改前先備份)
和Linux系統中的大多數設定檔一樣,vsftpd的設定檔中以#開始注釋。
# 是否允許匿名登入FTP伺服器,預設設定為YES允許# 使用者可使用使用者名稱ftp或anonymous進行ftp登入,口令為使用者的E-mail地址。# 如不允許匿名訪問則設定為NOanonymous_enable=YES# 是否允許本機使用者(即linux系統中的使用者帳號)登入FTP伺服器,預設設定為YES允許# 本機使用者登入後會進入使用者主目錄,而匿名使用者登入後進入匿名使用者的下載目錄/var/ftp/pub# 若只允許匿名使用者存取,前面加上#注釋掉即可阻止本機使用者訪問FTP伺服器local_enable=YES# 是否允許本機使用者對FTP伺服器檔案具有寫入權限,預設設定為YES允許write_enable=YES # 掩碼,本機使用者預設掩碼為077# 你可以設定本機使用者的檔案掩碼為預設022,也可根據個人喜好將其設定為其他值#local_umask=022# 是否允許匿名使用者上傳檔案,須將全域的write_enable=YES。預設為YES#anon_upload_enable=YES# 是否允許匿名使用者建立新檔案夾#anon_mkdir_write_enable=YES # 是否啟用目錄歡迎資訊功能# 當使用者用CMD模式首次訪問伺服器上某個目錄時,FTP伺服器將顯示歡迎資訊# 預設情況下,歡迎資訊是通過該目錄下的.message檔案獲得的# 此檔案儲存自訂的歡迎資訊,由使用者自己建立#dirmessage_enable=YES# 是否讓系統自動維護上傳和下載的記錄檔# 預設情況該記錄檔為/var/log/vsftpd.log,也可以通過下面的xferlog_file選項對其進行設定# 預設值為NOxferlog_enable=YES# Make sure PORT transfer connections originate from port 20 (ftp-data).# 是否設定FTP伺服器將啟用FTP資料連接埠的串連請求# ftp-data資料轉送,21為串連控制連接埠connect_from_port_20=YES# 設定是否允許改變上傳檔案的屬主,與下面一個設定項配合使用# 注意,不推薦使用root使用者上傳檔案#chown_uploads=YES# 設定想要改變的上傳檔案的屬主,如果需要,則輸入一個系統使用者名稱# 可以把上傳的檔案都改成root屬主。whoever:任何人#chown_username=whoever# 設定系統維護記錄FTP伺服器上傳和下載情況的記錄檔# /var/log/vsftpd.log是預設的,也可以另設其它#xferlog_file=/var/log/vsftpd.log# 是否以標準xferlog的格式書寫傳輸記錄檔# 預設為/var/log/xferlog,也可以通過xferlog_file選項對其進行設定# 預設值為NO#xferlog_std_format=YES# 以下是附加配置,添加相應的選項將啟用相應的設定# 是否產生兩個相似的記錄檔# 預設在/var/log/xferlog和/var/log/vsftpd.log目錄下# 前者是wu_ftpd類型的傳輸日誌,可以利用標準日誌工具對其進行分析;後者是vsftpd類型的日誌#dual_log_enable# 是否將原本輸出到/var/log/vsftpd.log中的日誌,輸出到系統日誌#syslog_enable# 設定資料轉送中斷間隔時間,此語句表示閒置使用者會話停機時間為600秒# 即當資料轉送結束後,使用者串連FTP伺服器的時間不應超過600秒。可以根據實際情況對該值進行修改#idle_session_timeout=600# 設定資料連線逾時時間,該語句表示資料連線逾時時間為120秒,可根據實際情況對其個修改#data_connection_timeout=120# 運行vsftpd需要的非特權系統使用者,預設是nobody#nopriv_user=ftpsecure# 是否識別非同步ABOR請求。# 如果FTP client會下達“async ABOR”這個指令時,這個設定才需要啟用# 而一般此設定並不安全,所以通常將其取消#async_abor_enable=YES# 是否以ASCII方式傳輸資料。預設情況下,伺服器會忽略ASCII方式的請求。# 啟用此選項將允許伺服器以ASCII方式傳輸資料# 不過,這樣可能會導致由"SIZE /big/file"方式引起的DoS攻擊#ascii_upload_enable=YES#ascii_download_enable=YES# 登入FTP伺服器時顯示的歡迎資訊# 如有需要,可在更改目錄歡迎資訊的目錄下建立名為.message的檔案,並寫入歡迎資訊儲存後#ftpd_banner=Welcome to blah FTP service.# 黑名單設定。如果很討厭某些email address,就可以使用此設定來取消他的登入許可權# 可以將某些特殊的email address抵擋住。#deny_email_enable=YES# 當上面的deny_email_enable=YES時,可以利用這個設定項來規定哪些郵件地址不可登入vsftpd伺服器# 此檔案需使用者自己建立,一行一個email address即可#banned_email_file=/etc/vsftpd/banned_emails# 使用者登入FTP伺服器後是否具有訪問自己目錄以外的其他檔案的許可權# 設定為YES時,使用者被鎖定在自己的home目錄中,vsftpd將在下面chroot_list_file選項值的位置尋找chroot_list檔案# 必須與下面的設定項配合#chroot_list_enable=YES# 被列入此檔案的使用者,在登入後將不能切換到自己目錄以外的其他目錄# 從而有利於FTP伺服器的安全管理和隱私保護。此檔案需自己建立#chroot_list_file=/etc/vsftpd/chroot_list# 是否允許遞迴查詢。預設為關閉,以防止遠端使用者造成過量的I/O#ls_recurse_enable=YES# 是否允許監聽。# 如果設定為YES,則vsftpd將以獨立模式運行,由vsftpd自己監聽和處理IPv4連接埠的串連請求listen=YES# 設定是否支援IPV6。如要同時監聽IPv4和IPv6連接埠,# 則必須運行兩套vsftpd,採用兩套設定檔# 同時確保其中有一個監聽選項是被注釋掉的#listen_ipv6=YES# 設定PAM外掛模組提供的認證服務所使用的設定檔名,即/etc/pam.d/vsftpd檔案# 此檔案中file=/etc/vsftpd/ftpusers欄位,說明了PAM模組能抵擋的帳號內容來自檔案/etc/vsftpd/ftpusers中#pam_service_name=vsftpd# 是否允許ftpusers檔案中的使用者登入FTP伺服器,預設為NO# 若此項設為YES,則user_list檔案中的使用者允許登入FTP伺服器# 而如果同時設定了userlist_deny=YES,則user_list檔案中的使用者將不允許登入FTP伺服器,甚至連輸入密碼提示資訊都沒有#userlist_enable=YES/NO# 設定是否阻扯user_list檔案中的使用者登入FTP伺服器,預設為YES#userlist_deny=YES/NO# 是否使用tcp_wrappers作為主機存取控制方式。# tcp_wrappers可以實現linux系統中網路服務的基於主機地址的存取控制# 在/etc目錄中的hosts.allow和hosts.deny兩個檔案用於設定tcp_wrappers的存取控制# 前者設定允許訪問記錄,後者設定拒絕訪問記錄。# 如想限制某些主機對FTP伺服器192.168.57.2的匿名訪問,編緝/etc/hosts.allow檔案,如在下面增加兩行命令:# vsftpd:192.168.57.1:DENY 和vsftpd:192.168.57.9:DENY# 表明限制IP為192.168.57.1/192.168.57.9主機訪問IP為192.168.57.2的FTP伺服器# 此時FTP伺服器雖可以PING通,但無法串連tcp_wrappers=YES
下面的內容將對一些限制和許可權控制的選項進行更進一步的說明。
除了上述那些基本設定,我們還可以在vsftpd.conf檔案中添加更多的安全選項。其中幾個常用的如下:
限制最大串連數和傳輸速率
在FTP伺服器的管理中,無論對本機使用者還是匿名使用者,對於FTP伺服器資源的使用都需要進行控控制,避免由於負擔過大造成FTP伺服器運行異常,可以添加以下配置項對FTP客戶機使用FTP伺服器資源進行控制:
max_client設定項 用於設定FTP伺服器所允許的最大用戶端串連數,值為0時表示不限制。例如max_client=100表示FTP伺服器的所有用戶端最大串連數不超過100個。
max_per_ip設定項 用於設定對於同一IP地址允許的最大用戶端串連數,值為0時表示不限制。例如max_per_ip=5表示同一IP地址的FTP客戶機與FTP伺服器建立的最大串連數不超過5個。
local_max_rate設定項 用於設定本機使用者的最大傳輸速率,單位為B/s,值為0時表示不限制。例如local_max_rate=500000表示FTP伺服器的本機使用者最大傳輸速率設定為500KB/s.
anon_max_rate設定項 用於設定匿名使用者的最大傳輸速率,單位為B/s,值為0表示不限制。例如ano_max_rate=200000,表示FTP伺服器的匿名使用者最大傳輸速率設定為200KB/s.
指定使用者的使用權限設定
vsftpd.user_list檔案需要與vsftpd.conf檔案中的配置項結合來實現對於vsftpd.user_list檔案中指定使用者帳號的存取控制:
(1)設定禁止登入的使用者帳號
當vsftpd.conf設定檔中包括以下設定時,vsftpd.user_list檔案中的使用者帳號被禁止進行FTP登入:
userlist_enable=YESuserlist_deny=YES
userlist_enable設定項設定使用vsftpd.user_list檔案,userlist_deny設定為YES表示vsftpd.user_list檔案用於設定禁止的使用者帳號。
(2)設定只允許登入的使用者帳號
當vsftpd.conf設定檔中包括以下設定時,只有vsftpd.user_list檔案中的使用者帳號能夠進行FTP登入:
userlist_enable=YESuserlist_deny=NO
userlist_enable設定項設定使用vsftpd.user_list檔案,userlist _deny設定為NO表示vsftpd.usre_list檔案用於設定只允許登入的使用者帳號,檔案中未包括的使用者帳號被禁止FTP登入。
userlist_deny和userlist_enable選項限制使用者登入FTP伺服器(使用userlist_deny選項和user_list檔案一起能有效阻止root,apache,www等系統使用者登入FTP伺服器,從而保證FTP伺服器的分級安全性)。以下是兩個選項的具體表現形式和兩種搭配使用方式的效果:
| Userlist_enable=YES |
Ftpusers中使用者允許訪問 User_list中使用者允許訪問 |
| Userlist_enable=NO |
Ftpusers中使用者禁止訪問 User_list中使用者允許訪問 |
| Userlist_deny=YES |
Ftpusers中使用者禁止訪問(登入時可以看到密碼輸入提示,但仍無法訪問) user_list 中使用者禁止訪問 |
| Userlist_deny=NO |
ftpusers中使用者禁止訪問 user_list中使用者允許訪問 |
| Userlist_enable=YES 並且 Userlist_deny=YES |
Ftpusers中使用者禁止訪問 User_list中使用者禁止訪問(登入時不會出現密碼提示,直接被伺服器拒絕) |
| Userlist_enable=YES 並且 Userlist_deny=NO |
Ftpusers中使用者禁止訪問 User_list中使用者允許訪問 |
修改預設連接埠
預設FTP伺服器連接埠號碼是21,出於安全目的,有時需修改預設連接埠號碼,修改/etc/vsftpd/vsftpd.conf,添加語句(例):
listen_port=4449
語句指定了修改後FTP伺服器的連接埠號碼,應盡量大於4000。修改後訪問
#ftp 192.168.57.2 4449
注意這裡需加上正確的連接埠號碼了,否則不能正常串連。
設定使用者組
有關FTP使用者和使用者組的重要性,我們在之前介紹vsftpd的時候便已經提到過。這裡主要是簡單的說明使用者組的技術實現,至於具體如何應用,還是具體需求具體對待。
#mkdir -p /home/try 遞迴建立新目錄#groupadd try 新群組#useradd -g try -d /home/try try1 建立使用者try1並指定家目錄和屬組#useradd -g try -d /home/try try2 建立使用者try2並指定家目錄和屬組#useradd -g try -d /home/try try3 建立使用者try3並指定家目錄和屬組#passwd try1 為新使用者設密碼#passwd try2 為新使用者設密碼#passwd try3 為新使用者設密碼#chown try1 /home/try 設定目錄屬主為使用者try1#chown .try /home/try 設定目錄屬組為組try#chmod 750 /home/try 設定目錄存取權限try1為讀,寫,執行;try2,try3為讀,執行
由於本機使用者登入FTP伺服器後進入自己主目錄,而try1,try2 try3對主目錄/home/try分配的許可權不同,所以通過FTP訪問的許可權也不同,try1存取權限為:上傳,下載,建目錄;try2,try3存取權限為下載,瀏覽,不能建目錄和上傳。實現了群組中使用者不同存取層級,加強了對FTP伺服器的分級安全管理。
連線逾時(本部分內容由李洋提供)
配置閒置使用者會話的停機時間:如下配置將在使用者會話空閑5分鐘後被中斷,以釋放伺服器的資源
Idle_session_timeout=300
配置閒置資料連線的停機時間:如下配置將在資料空閑串連1分鐘後被中斷,同樣也是為了釋放伺服器的資源
Data_connection_timeout=60
配置用戶端空閑時的自動中斷和啟用串連的時間:如下配置將使用戶端空閑1分鐘後自動中斷串連,並在30秒後自動啟用串連
Accept_timeout=60Connect_timeout=30
接下來,我們將對vsftpd的日誌進行介紹。
常見的vsftpd日誌解決方案
在vsftpd.conf中有如下內容定義了日誌的記錄方式:
# 表明FTP伺服器記錄上傳下載的情況xferlog_enable=YES # 表明將記錄的上傳下載情況寫在xferlog_file所指定的檔案中,即xferlog_file選項指定的檔案中xferlog_std_format=YES xferlog_file=/var/log/xferlog # 啟用雙份日誌。在用xferlog檔案記錄伺服器上傳下載情況的同時,# vsftpd_log_file所指定的檔案,即/var/log/vsftpd.log也將用來記錄伺服器的傳輸情況dual_log_enable=YESvsftpd_log_file=/var/log/vsftpd.log
vsftpd的兩個記錄檔分析如下:
/var/log/xferlog
記錄內容舉例
Tue Sep 11 14:59:03 2007 [pid 3460] CONNECT: Client "127.0.0.1"
Tue Sep 11 14:59:24 2007 [pid 3459] [ftp] OK LOGIN;Client "127.0.0.1" ,anon password ”?"
/var/log/xferlog記錄檔中資料的分析和參數說明
記錄資料 |
參數名稱 |
參數說明 |
Thu Sep 6 09:07:48 2007 |
目前時間 |
當前伺服器本地時間,格式為: DDD MMM dd hh:mm:ss YYY |
7 |
傳輸時間 |
傳送檔案所用時間,單位為秒 |
192.168.57.1 |
遠程主機名稱/IP |
遠程主機名稱/IP |
4323279 |
檔案大小 |
傳送檔案的大小,單位為byte |
/home/student/phpMyadmin- 2.11.0-all-languages.tar.gz |
檔案名稱 |
傳輸檔案名稱,包括路徑 |
b |
傳輸類型 |
傳輸方式的類型,包括兩種: a以ASCII傳輸 b以二進位檔案傳輸 |
– |
特殊處理標誌 |
特殊處理的標誌位,可能的值包括: _ 不做任何特殊處理 C 檔案是壓縮格式 U 檔案是非壓縮格式 T 檔案是tar格式 |
i |
傳輸方向 |
檔案傳輸方向,包括兩種: o 從FTP伺服器向用戶端傳輸 i 從用戶端向FTP伺服器傳輸 |
r |
訪問模式 |
使用者訪問模式,包括: a 匿名使用者 g 來賓使用者 r 真實使用者,即系統中的使用者 |
student |
使用者名稱 |
使用者名稱稱 |
ftp |
服務名 |
所使用的服務名稱,一般為FTP |
0 |
認證方式 |
認證方式,包括: 0 無 1 RFC931認證 |
* |
認證使用者id |
認證使用者的id,如果使用*,則表示無法獲得該id |
c |
完成狀態 |
傳輸的狀態: c 表示傳輸已完成 i 表示傳輸示完成 |
最後,介紹常見的FTP命令,以及FTP數字代碼的意義。
常見FTP命令及其功能
FTP命令 |
功能 |
FTP命令 |
功能 |
| ls |
顯示伺服器上的目錄 |
ls [remote-dir][local-file] |
顯示遠程目錄remote-dir,並存入本地檔案local-file |
| get remote-file [local-file] |
從伺服器下載指定檔案到用戶端 |
mget remote-files |
下載多個遠程檔案(mget命令允許用萬用字元下載多個檔案) |
| put local-file [remote-file] |
從用戶端上傳指定檔案到伺服器 |
mput local-file |
將多個檔案上傳至遠程主機(mput命令允許用萬用字元上傳多個檔案) |
| open |
串連FTP伺服器 |
mdelete [remote-file] |
刪除遠程主機檔案 |
| close |
中斷與遠程伺服器的ftp會話(與open對應) |
mkdir dir-name |
在遠程主機中建立目錄 |
| open host[port] |
建立指定的ftp伺服器串連,可指定串連連接埠 |
newer file-name |
如果遠程主機中file-name的修改時間比本地硬碟同名檔案的時間更近,則重傳該檔案 |
| cd directory |
改變伺服器的工作目錄 |
rename [from][to] |
更改遠程主機的檔案名稱 |
| lcd directory |
在用戶端上(本地)改變工作目錄 |
pwd |
顯示遠程主機的當前工作目錄 |
| bye |
退出FTP命令狀態 |
quit |
同bye,退出ftp會話 |
| ascii |
設定檔案傳輸方式為ASCII模式 |
reget remote-file [local-file] |
類似於get,但若local-file存在,則從上次傳輸中斷處續傳 |
| binary |
設定檔案傳輸方式為二進位模式 |
rhelp [cmd-name] |
請求獲得遠程主機的協助 |
| ![cmd [args]] |
在本地主機中互動shell後退回到ftp環境,如:!ls *.zip |
rstatus [file-name] |
若未指定檔案名稱,則顯示遠程主機的狀態,否則顯示檔案狀態 |
| accout [password] |
提供登入遠程系統成功後訪問系統資源所需的密碼 |
hash |
每傳輸1024位元組,顯示一個hash符號(#) |
| append local-file [remote-file] |
將本地檔案追加到遠程系統主機,若未指定遠程系統檔案名稱,則使用本地檔案名稱 |
restart marker |
從指定的標誌marker處,重新開始get或put,如restart 130 |
| bye |
退出ftp會話過程 |
rmdir dir-name |
刪除遠程主機目錄 |
| case |
在使用mget命令時,將遠程主機檔案名稱中的大寫轉為小寫字母 |
size file-name |
顯示遠程主機檔案大小,如: size idle 7200 |
| cd remote-dir |
進入遠程主機目錄 |
status |
顯示當前ftp狀態 |
| cdup |
進入遠程主機目錄的父目錄 |
system |
顯示遠程主機的作業系統 |
| delete remote-file |
刪除遠程主機檔案 |
user user-name [password][account] |
向遠程主機表明自己的身份,要求輸入密碼時,必須輸入密碼,如:user anonymous my@email |
| dir [remote-dir][local-file] |
顯示遠程主機目錄,並將結果存入本地檔案 |
help [cmd] |
顯示ftp內部命令cmd的協助資訊,如help get |
FTP數字代碼的意義
110 重新啟動標記應答。120 服務在多久時間內ready。125 資料鏈路連接埠開啟,準備傳送。150 檔案狀態正常,開啟資料連線連接埠。200 命令執行成功。202 命令執行失敗。211 系統狀態或是系統求助響應。212 目錄的狀態。213 檔案的狀態。214 求助的訊息。215 名稱系統類別型。220 新的線上服務ready。221 服務的控制串連連接埠關閉,可以登出。225 資料連結開啟,但無傳輸動作。226 關閉資料連線連接埠,請求的檔案操作成功。227 進入passive mode。230 使用者登入。250 請求的檔案操作完成。257 顯示目前的路徑名稱。331 使用者名稱稱正確,要求輸入密碼。332 登入時需要帳號資訊。350 請求的操作需要進一部的命令。421 無法提供服務,關閉控制連結。425 無法開啟資料鏈路。426 關閉聯機,終止傳輸。450 請求的操作未執行。451 命令終止:有本地的錯誤。452 未執行命令:磁碟空間不足。500 格式錯誤,無法識別命令。501 參數語法錯誤。502 命令執行失敗。503 命令順序錯誤。504 命令所接的參數不正確。530 未登入。 532 儲存檔案需要賬戶登入。550 未執行請求的操作。551 請求的命令終止,類型未知。552 請求的檔案終止,儲存位溢出。 553 未執行請求的的命令,名稱不正確。