VSFTP介紹:
linux 系統下常用的FTP 是vsftp, 即Very Security File Transfer Protocol.是一種在GPL許可下開放源代碼、安全、快速、穩定的FTP伺服器,能夠高效地處理大量的并發連接配接,所有服務裡面隻有vsftpd沒有依耐關系.還有一個是proftp(Profession ftp)。
VSFTP端口和協定:
控制連接配接:标準端口為21/tcp,用于發送FTP指令資訊。
資料連接配接:标準端口為20/tcp,用于上傳、下載下傳資料。
VSFTP資料連結模式:
主動模式(PORT模式):client 先連接配接伺服器的 21端口(指令端口),然後client開放一個大于1024的端口A等待伺服器的20端口連接配接,21号端口的連結建立以後,伺服器就用20去連接配接client開放的A端口。如果client端有個防火牆,伺服器的20端口就連接配接不進入,導緻會連接配接失敗.
被動模式(PASV模式):client開啟大于1024的B端口連接配接伺服器的21(指令端口),同時開啟B+1端口,當21号端口連接配接成功後,client會發送PASV指令,通知伺服器自己處于被動模式,伺服器收到這個消息後就會開放一個大于1024的端口C通知client,client接到通知後就會用B+1來連接配接伺服器的C端口.
從C/S模型來說,PORT對于伺服器來說是OUTBOUND,而PASV模式對于伺服器是INBOUND.一般我們使用的是主動模式
VSFTP資料傳輸模式:
文本模式:ASCII模式,以文本序列傳輸資料。
二進制模式:Binary模式,以二進制序列(比特流)傳輸資料。
ASCII模式一般隻用于純文字檔案傳輸,而Binary模式更适合傳輸程式、圖檔等檔案。尤其是對于可執行檔案,如果把可執行檔案以文本模式傳輸,則下載下傳下來的檔案将無法正常使用。在rhel6中預設采用二進制模式,在rhel6以前的版本中預設采用文本模式,為了提高可靠性,rhel6不再支援文本模式。
VSFTP使用者類型:
匿名使用者:不需要使用者名,密碼通路服務端。
本地使用者:需要帳戶名和密碼才能通路。且這個帳戶名和密碼都是在你linux系統裡面已經有的使用者。帳号名稱、密碼等資訊儲存在passwd、shadow檔案中。
虛拟使用者:同樣需要使用者名和密碼才能登入。但是和上面的差別就是,這個使用者名和密碼,在你linux系統中是沒有的(沒有該使用者帳号),使用獨立的帳号/密碼資料檔案
安裝VSFTP服務:
<a href="http://blog.51cto.com/attachment/201312/100724412.png" target="_blank"></a>
1
2
3
4
5
6
7
8
9
10
11
12
<code>[root@justin ~]</code><code># rpm -qa|grep vsftpd</code>
<code>[root@justin ~]</code><code># mount /dev/cdrom /mnt/cdrom/</code>
<code>mount</code><code>: block device </code><code>/dev/sr0is</code> <code>write-protected, mounting </code><code>read</code><code>-only</code>
<code>[root@justin ~]</code><code># find /mnt/cdrom/Packages/ -name *vsftp*</code>
<code>/mnt/cdrom/Packages/vsftpd-2</code><code>.2.2-11.el6.i686.rpm</code>
<code>[root@justin ~]</code><code># rpm -ivh /mnt/cdrom/Packages/vsftpd-2.2.2-11.el6.i686.rpm</code>
<code>warning: </code><code>/mnt/cdrom/Packages/vsftpd-2</code><code>.2.2-11.el6.i686.rpm: Header V3 RSA</code><code>/SHA256Signature</code><code>, key ID fd431d51: NOKEY</code>
<code>Preparing... </code><code>########################################### [100%]</code>
<code>1:vsftpd </code><code>########################################### [100%]</code>
<code>vsftpd-2.2.2-11.el6.i686</code>
<code>[root@justin ~]</code><code>#</code>
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
<code>[root@justin ~]</code><code># iptables -L</code>
<code>Chain INPUT (policy ACCEPT)</code>
<code>target prot opt sourcedestination</code>
<code>Chain FORWARD (policy ACCEPT)</code>
<code>Chain OUTPUT (policy ACCEPT)</code>
<code>[root@justin ~]</code><code># iptables -I INPUT -p tcp --dport 20 -j ACCEPT</code>
<code>[root@justin ~]</code><code># /sbin/iptables -I INPUT -p tcp --dport 21 -j ACCEPT</code>
<code>ACCEPT tcp -- anywhere anywhere tcp dpt:</code><code>ftp</code>
<code>ACCEPT tcp -- anywhere anywhere tcp dpt:</code><code>ftp</code><code>-data</code>
<code>[root@justin ~]</code><code># iptables -nL</code>
<code>ACCEPT tcp -- 0.0.0.0</code><code>/00</code><code>.0.0.0</code><code>/0tcp</code> <code>dpt:21</code>
<code>ACCEPT tcp -- 0.0.0.0</code><code>/00</code><code>.0.0.0</code><code>/0tcp</code> <code>dpt:20</code>
<code>[root@justin ~]</code><code># service iptables save</code>
<code>iptables:将防火牆規則儲存到 </code><code>/etc/sysconfig/iptables</code><code>: [确定]</code>
<code>[root@justin ~]</code><code># sestatus</code>
<code>SELinux status: disabled</code>
<code>[root@justin ~]</code><code># service iptables restart</code>
<code>iptables:清除防火牆規則: [确定]</code>
<code>iptables:将鍊設定為政策 ACCEPT:nat filter [确定]</code>
<code>iptables:正在解除安裝子產品: [确定]</code>
<code>iptables:應用防火牆規則: [确定]</code>
VSFTP服務啟動:
<code>[root@justin ~]</code><code># /etc/init.d/vsftpd status</code>
<code>vsftpd 已停</code>
<code>[root@justin ~]</code><code># service vsftpd start</code>
<code>為 vsftpd 啟動 vsftpd: [确定]</code>
<code>vsftpd (pid 2293) 正在運作...</code>
<code>[root@justin ~]</code><code># chkconfig --level 35 vsftpd on</code>
<code>[root@justin ~]</code><code># chkconfig --list|grep vsftpd</code>
<code>vsftpd 0:關閉 1:關閉 2:關閉 3:啟用 4:關閉 5:啟用 6:關閉</code>
VSFTP服務配置檔案說明:
<code>[root@justin logrotate.d]</code><code># cd</code>
<code>[root@justin ~]</code><code># cd /etc/vsftpd/</code>
<code>[root@justin vsftpd]</code><code># ls</code>
<code>ftpusers user_list vsftpd.conf vsftpd_conf_migrate.sh</code>
<code>[root@justin vsftpd]</code><code>#</code>
/etc/vsftpd是vsftpd服務配置檔案存放目錄,
ftpusers:使用者控制檔案,在這個檔案裡面的使用者,預設是不可以使用vsftpd服務的
user_list:預設功能和第一個一樣,但是通過配置,我們可以讓隻有在這個檔案裡的使用者才能使用vsftpd服務,這樣新加入的使用者就不會自動擁有vsftp的使用權,這樣可以讓vsftpd伺服器更加安全
vsftpd_conf_migrate.sh:vsftpd操作的一些變量和設定,這個不用管的
vsftpd.conf:vsftpd主配置檔案,
<code>[root@justin vsftpd]</code><code># cat /etc/passwd|grep ftp</code>
<code>ftp</code><code>:x:14:50:FTP User:</code><code>/var/ftp</code><code>:</code><code>/sbin/nologin</code>
<code>[root@justin vsftpd]</code><code># ll -d /var/ftp/</code>
<code>drwxr-xr-x 3 root root 4096 12月 24 10:05 </code><code>/var/ftp/</code>
安裝好FTP後會生成一個使用者ftp,ftp為匿名使用者登陸使用者名,其家目錄不在/home下而是/var/ftp,目錄權限為755,注意這個權限不能改變
其他配置檔案:
配置檔案名
功能
/usr/sbin/vsftpd
vsftpd的主程式
/etc/rc.d/init.d/vsftpd
啟動腳本
/etc/pam.d/vsftpd
PAM認證檔案
/etc/vsftpd/ftpusers
禁止使用vsftpd的使用者清單檔案
/etc/vsftpd/user_list
禁止或允許使用vsftpd的使用者清單檔案
/var/ftp
匿名使用者主目錄
/var/ftp/pub
匿名使用者的下載下傳目錄
/etc/logrotate.d/vsftpd.log
vsftpd的日志檔案
ftpusers不受任何配制項的影響,它總是有效,它是一個黑名單!該檔案存放的是一個禁止通路FTP的使用者清單,通常為了安全考慮,管理者不希望一些擁有過大權限的帳号(比如root)登入FTP,以免通過該帳号從FTP上傳或下載下傳一些危險位置上的檔案進而對系統造成損壞。
user_list則是和vsftpd.conf中的userlist_enable和userlist_deny兩個配置項緊密相關的,它可以有效,也可以無效,有效時它可以是一個黑名單,也可以是一個白名單!
ftpusers和user_list沒有任何關系,ftpusers檔案總是生效,user_list則取決于userlist_enable和userlist_deny兩項配置。
主配置檔案/etc/vsftpd/vsftpd.conf裡的各項參數作用檔案裡都有注釋說明:
<code># Allow anonymous FTP? (Beware - allowed by default if you comment this out).</code>
<code>anonymous_enable=YES</code>
是否允許匿名登入FTP伺服器,預設設定為YES即允許,使用者可使用使用者名ftp或者anonymous登陸,密碼為空,如不允許匿名通路則設定為NO
<code># Uncomment this to allow local users to log in.</code>
<code>local_enable=YES</code>
是否允許本地使用者(即linux系統中的使用者帳号)登入FTP伺服器,預設設定為YES允許,本地使用者登入後預設隻能通路自己的主目錄,且具有讀寫權限,而不是vsftpd的主目錄/var/ftp/,而匿名使用者登入後進入匿名使用者的下載下傳目錄/var/ftp/pub,若隻允許匿名使用者通路,前面加上#注釋掉即可阻止本地使用者通路FTP伺服器
<code># Uncomment this to enable any form of FTP write command.</code>
<code>write_enable=YES</code>
是否允許本地使用者對FTP伺服器檔案具有寫權限,預設設定為YES允許,這項設定隻是一個開關,要使匿名使用者或系統使用者具有寫入權限,還得進行其它的設定。
<code># Default umask for local users is 077. You may wish to change this to 022,</code>
<code># if your users expect that (022 is used by most other ftpd's)</code>
<code>local_umask=022</code>
本地使用者預設掩碼為077,你可以設定本地使用者的檔案掩碼為預設022,也可根據個人喜好将其設定為其他值
<code># Uncomment this to allow the anonymous FTP user to upload files. This only</code>
<code># has an effect if the above global write enable is activated. Also, you will</code>
<code># obviously need to create a directory writable by the FTP user.</code>
<code>#anon_upload_enable=YES</code>
是否允許匿名使用者上傳檔案,預設為YES,開啟該項須設定全局的write_enable=YES。
<code># Uncomment this if you want the anonymous FTP user to be able to create</code>
<code># new directories.</code>
<code>#anon_mkdir_write_enable=YES</code>
是否允許匿名使用者建立新檔案夾,預設不啟用
<code># You may fully customise the login banner string:</code>
<code>ftpd_banner=Welcome to blah FTP service.</code>
登入FTP伺服器時顯示的歡迎資訊,如有需要,可在更改目錄歡迎資訊的目錄下建立名為.message的檔案,并寫入歡迎資訊儲存後
<code>dirmessage_enable=YES</code>
當切換目錄時,顯示該目錄下.message隐藏檔案的内容。預設情況下有message_file=.message
<code>banner_file=</code><code>/etc/vsftpd/banner_file</code>
登入伺服器成功後顯示/etc/vsftpd/banner_file的資訊。
<code>banner_fail=</code><code>/etc/vsftpd/banner_fail</code>
登入伺服器失敗後顯示/etc/vsftpd/banner_fail的資訊。
<code># Activate directory messages - messages given to remote users when they</code>
<code># go into a certain directory.</code>
<code>message_file=.message</code>
是否激活目錄歡迎資訊功能,當使用者用CMD模式首次通路伺服器上某個目錄時,FTP伺服器将顯示歡迎資訊,預設情況下,歡迎資訊是通過家目錄下的.message檔案獲得的,此檔案儲存自定義的歡迎資訊直接vim .message,由使用者自己建立.FTP資訊預設的就是.message,是以可以不加 message_file= 來指定
如果設定了ftp_banner=的值,登入伺服器将覆寫vsftpd預設的連接配接後的資訊。l如果同時設定了ftp_banner=和banner_file=,那麼banner_file将覆寫ftp_banner=的值
<code># The target log file can be vsftpd_log_file or xferlog_file.</code>
<code># This depends on setting xferlog_std_format parameter</code>
<code>xferlog_enable=YES</code>
是否讓系統自動維護上傳和下載下傳的日志檔案,預設情況該日志檔案為/var/log/vsftpd.log,也可以通過xferlog_file選項對其進行設定,預設值為NO
<code># Make sure PORT transfer connections originate from port 20 (ftp-data).</code>
<code>connect_from_port_20=YES</code>
是否設定FTP伺服器将啟用FTP資料端口的連接配接請求,ftp-data資料傳輸,21為連接配接控制端口
<code># If you want, you can arrange for uploaded anonymous files to be owned by</code>
<code># a different user. Note! Using "root" for uploaded files is not</code>
<code># recommended!</code>
<code>#chown_uploads=YES</code>
<code>#chown_username=whoever</code>
設定是否允許改變上傳檔案的屬主,與下面設定想要改變的上傳檔案的屬主配合使用,如果需要,則輸入一個系統使用者名,可以把上傳的檔案都改成root屬主,不推薦使用root使用者上傳檔案,whoever:任何人
<code># The name of log file when xferlog_enable=YES and xferlog_std_format=YES</code>
<code># WARNING - changing this filename affects /etc/logrotate.d/vsftpd.log</code>
<code>#xferlog_file=/var/log/xferlog</code>
設定系統維護記錄FTP伺服器上傳和下載下傳情況的日志檔案,/var/log/vsftpd.log是預設的,也可以另設其它
<code># Switches between logging into vsftpd_log_file and xferlog_file files.</code>
<code># NO writes to vsftpd_log_file, YES to xferlog_file</code>
<code>xferlog_std_format=YES</code>
是否以标準xferlog的格式書寫傳輸日志檔案,預設為/var/log/xferlog,也可以通過xferlog_file選項對其進行設定
<code># You may change the default value for timing out an idle session.</code>
<code>#idle_session_timeout=600</code>
設定資料傳輸中斷間隔時間,此語句表示空閑的使用者會話中斷時間為600秒,即當資料傳輸結束後,使用者連接配接FTP伺服器的時間不應超過600秒。可以根據實際情況對該值進行修改
<code># You may change the default value for timing out a data connection.</code>
<code>#data_connection_timeout=120</code>
設定資料連接配接逾時時間,該語句表示資料連接配接逾時時間為120秒,可根據實際情況對其個修改
<code># It is recommended that you define on your system a unique user which the</code>
<code># ftp server can use as a totally isolated and unprivileged user.</code>
<code>#nopriv_user=ftpsecure</code>
運作vsftpd需要的非特權系統使用者,預設是nobody
<code># Enable this and the server will recognise asynchronous ABOR requests. Not</code>
<code># recommended for security (the code is non-trivial). Not enabling it,</code>
<code># however, may confuse older FTP clients.</code>
<code>#async_abor_enable=YES</code>
是否識别異步ABOR請求,如果FTP client會下達“async ABOR”這個指令時,這個設定才需要啟用,而一般此設定并不安全,是以通常将其取消
<code># ASCII mangling is a horrible feature of the protocol.</code>
<code>#ascii_upload_enable=YES</code>
<code>#ascii_download_enable=YES</code>
是否以ASCII方式傳輸資料。預設情況下,伺服器會忽略ASCII方式的請求,啟用此選項将允許伺服器以ASCII方式傳輸資料,不過,這樣可能會導緻由"SIZE /big/file"方式引起的DoS攻擊
<code># You may specify a file of disallowed anonymous e-mail addresses. Apparently</code>
<code># useful for combatting certain DoS attacks.</code>
<code>#deny_email_enable=YES</code>
黑名單設定。如果很讨厭某些email address,就可以使用此設定來取消他的登入權限,可以将某些特殊的email address抵擋住。
<code>#banned_email_file=/etc/vsftpd/banned_emails</code>
當deny_email_enable=YES時,可以利用這個設定項來規定哪些郵件位址不可登入vsftpd伺服器,此檔案需使用者自己建立,一行一個email address即可
<code># You may specify an explicit list of local users to chroot() to their home</code>
<code># directory. If chroot_local_user is YES, then this list becomes a list of</code>
<code># users to NOT chroot().</code>
<code>#chroot_local_user=YES</code>
<code>#chroot_list_enable=YES</code>
<code># (default follows)</code>
<code>#chroot_list_file=/etc/vsftpd/chroot_list</code>
chroot_local_user 将每個本地使用者放置到chroot監牢中,限制所有的本地使用者在自己的家目錄;
chroot_list_enable 将選中的本地使用者放入到chroot監牢中。若這個值設定為YES,則檢查本地使用者是否列在檔案/etc/vsftpd/chroot_ list中或者由chroot_list_file指定的另一個檔案中。當該使用者位于這個清單中,并且chroot_local_user=NO時,該使用者将被放入到以他的主目錄為根的chroot監牢中。此時隻有列在/etc/vsftpd/chroot_list中的使用者才會被放入到chroot監牢中。如果該使用者位于這個清單中,并且chroot_local_user=YES,那麼該使用者就不會放入到chroot監牢中。未列在/etc/vsftpd/chroot_list中的使用者将會被放入到chroot監牢中。
簡單說:chroot_local_user開啟就是限制本地所有使用者隻能在自己的家目錄裡,此時chroot_list_enable開啟的話chroot_list裡的使用者排除在外不受此限制可以随意切換到有權限的目錄;而chroot_local_user關閉chroot_list_enable開啟的話時隻有chroot_list裡的使用者會被限制在家目錄,而其他使用者不受此限制
<code>#ls_recurse_enable=YES</code>
是否允許使用者使用ls –R遞歸清單比較占用系統資源,以防止遠端使用者造成過量的I/O
<code>dirlist_enable=YES</code>
是否允許使用者使用dir、ls 之類得列目錄指令。
<code>download_enable=YES</code>
是否允許使用者下載下傳檔案
是否允許使用者上傳(包括本地使用者、匿名使用者上傳的前提條件)
<code>deny_file={*.exe,*.dll}</code>
設定不允許傳輸的檔案類型{}包括上傳下載下傳。
<code>listen=YES</code>
是否允許監聽。如果設定為YES,則vsftpd将以獨立模式運作,由vsftpd自己監聽和處理IPv4端口的連接配接請求
<code>pasv_min_port=30001</code>
<code>pasv_max_port=31000</code>
設定被動連接配接時用戶端連接配接時的端口範圍,傳輸資料的端口範圍就在30001到31000 這個範圍内傳送
<code>#listen_ipv6=YES</code>
設定是否支援IPV6。如要同時監聽IPv4和IPv6端口,則必須運作兩套vsftpd,采用兩套配置檔案,同時確定其中有一個監聽選項是被注釋掉的
<code>pam_service_name=vsftpd</code>
設定PAM外挂子產品提供的認證服務所使用的配置檔案名,即/etc/pam.d/vsftpd檔案,此檔案中file=/etc/vsftpd/ftpusers字段,說明了PAM子產品能抵擋的帳号内容來自檔案/etc/vsftpd/ftpusers中
<code>tcp_wrappers=YES</code>
是否使用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通,但無法連接配接
<code>use_localtime=YES</code>
是否使用本地時間?預設使用GMT時間,檔案時間比中國晚8個小時,建議設定為YES
<code>accept_timeout=60</code>
設定在空閑多長時間後自動斷開連結
<code>connect_timeout=60</code>
設定重新連接配接最大激活時間,斷開連結後多長時間重新連結
<code>max_clients=200</code>
指明伺服器總的客戶并發連接配接數為200
<code>max_per_ip=3</code>
指明每個客戶機的最大連接配接數為3
<code>pasv-min-prot=protnumber</code>
<code>pasv-max-prot=protnumber</code>
定義最大與最小端口,為0表示任意端口;為用戶端連接配接指明端口
<code>listen_address=ip address</code>
設定ftp服務來監聽的位址,用戶端可以用哪個位址來連接配接
<code>listen_port=21</code>
設定FTP工作的端口号,預設的為21,如需要修改FTP伺服器的端口号,應盡量大于4000
<code>userlist_enable=YES</code>
<code>userlist_deny=YES</code>
<code>userlist_file=</code><code>/etc/vsftpd/user_list</code>
userlist_enable和userlist_deny兩個選項聯合起來針對的是:本地全體使用者(除去ftpusers中的使用者,這個檔案中的使用者始終是被禁止登陸的)和出現在user_list檔案中的使用者以及不在在user_list檔案中的使用者這三類使用者集合進行的設定。
若userlist_enable項設為YES,則隻允許user_list檔案中的使用者允許登入FTP伺服器,檔案中不包含的使用者不能登陸,
若userlist_enable項設定為NO,則不允許usrlist_file檔案中的使用者登入FTP伺服器,
而如果同時設定了userlist_deny=YES,則user_list檔案是個黑名單,其中的使用者将不允許登入FTP伺服器,甚至連輸入密碼提示資訊都沒有,而userlist_deny=NO,user_list檔案是個白名單,其中的使用者将允許登入FTP伺服器,當且僅當userlist_enable=YES時,userlist_deny項的配置才有效,user_list檔案才會被使用。當userlist_enable=NO時,無論userlist_deny項為何值都是無效的,本地全體使用者(除去ftpusers中的使用者)都可以登入FTP。
決定禁止還是隻允許由userlist_file指定檔案中的使用者登入FTP伺服器。此選項在userlist_enable選項啟動後才生效。YES為預設值,禁止檔案中的使用者登入,同時也不向這些使用者發出輸入密碼的提示。NO表示隻允許在檔案中的使用者登入FTP伺服器
<code>local_root=</code><code>/home/ftp</code>
定義登入帳号的主目錄, 若沒有指定,每一個使用者則進入到個人使用者主目錄,對匿名使用者無效
<code>anon_max_rate=30000</code>
匿名使用者的最大傳輸速度,機關是Byts/s
<code>local_max_rate=50000</code>
本地使用者的最大傳輸速度,機關是Byts/s
是否允許下載下傳
FTPS配置參數
<code>ssl_enable=YES</code>
指定vsftpd支援加密協定
<code>ssl_sslv2=YES</code>
<code>ssl_sslv3=YES </code>
<code>ssl_tlsv1=YES</code>
指定vsftpd支援安全套接字層v2,v3,tls加密方式v1
<code>force_local_logins_ssl=YES</code>
強制本地使用者和虛拟使用者 ssl 加密登入
<code>force_local_data_ssl=YES</code>
<code>rsa_cert_file=</code><code>/etc/vsftpd/</code><code>.sslkey</code><code>/vsftp</code><code>.pem</code>
指定證書存放位置
<code>allow_anon_ssl=YES</code>
允許匿名使用者ssl加密登入
本文轉自 justin_peng 51CTO部落格,原文連結:http://blog.51cto.com/ityunwei2017/1345689,如需轉載請自行聯系原作者