天天看點

RHEL6基礎四十六之RHEL檔案伺服器VSFTP簡介

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,如需轉載請自行聯系原作者

繼續閱讀