一。介紹linux
FTP兩種模式的區別: (1)PORT(主動)模式 所謂主動模式,指的是FTP服務器「主動」去鏈接客戶端的數據端口來傳輸數據,其過程具體來講就是:客戶端從一個任意的非特權端口N(N>1024)鏈接到FTP服務器的命令端口(即tcp 21端口),緊接着客戶端開始 監聽端口N+1,併發送FTP命令「port N+1」到FTP服務器。而後服務器會從它本身的數據端口(20)「主動」鏈接到客戶端指定的數據端口(N+1),這樣客戶端就能夠和ftp服務器創建數據傳輸通道了。 (2)PASV(被動)模式 所謂被動模式,指的是FTP服務器「被動」等待客戶端來鏈接本身的數據端口,其過程具體是:當開啓一個FTP鏈接時,客戶端打開兩個任意的非特權本地端口(N >1024和N+1)。第一個端口鏈接服務器的21端口,但與 主動方式的FTP不一樣,客戶端不會提交PORT命令並容許服務器來回連它的數據端口,而是提交PASV命令。這樣作的結果是服務器會開啓一個任意的非特權端口(P > 1024),併發送PORT P命令給客戶端。而後客戶端 發起從本 地端口N+1到服務器的端口P的鏈接用來傳送數據。(注意此模式下的FTP服務器不須要開啓tcp 20端口了) 兩種模式的比較: (1)PORT(主動)模式模式只要開啓服務器的21和20端口,而PASV(被動)模式須要開啓服務器大於1024全部tcp端口和21端口。 (2)從網絡安全的角度來看的話彷佛ftp PORT模式更安全,而ftp PASV更不安全,那麼爲何RFC要在ftp PORT基礎再製定一個ftp PASV模式呢?其實RFC制定ftp PASV模式的主要目的是爲了數據傳輸安全角度 出發的,由於ftp port使用固定20端口進行傳輸數據,那麼做爲黑客很容使用sniffer等探嗅器抓取ftp數據,這樣一來經過ftp PORT模式傳輸數據很容易被黑客竊取,所以使用PASV方式來架設ftp server是最安 全絕佳方案。
所以:若是隻是簡單的爲了文件共享,徹底能夠禁用PASV模式,解除開放大量端口的威脅,同時也爲防火牆的設置帶來便利。 不幸的是,FTP工具或者瀏覽器默認使用的都是PASV模式鏈接FTP服務器,所以,必需要使vsftpd在開啓了防火牆的狀況下,也可以支持PASV模式進行數據訪問。
二。安裝與啓動命令:shell
yum -y install vsftpd #安裝 /etc/init.d/vsftpd start #contos 6.5啓動 systemctl start vsftpd #contos 7啓動 service vsftpd restart #contos 6.5重啓 systemctl restart vsftpd #contos 7重啓 service vsftpd stop #contos 6.5中止 systemctl stop vsftpd #contos 7中止 chkconfig vsftpd on #contos 6.5設置開機時自動運行 systemctl enable vsftpd.service #contos 7設置開機時自動運行
三。配置vsftp服務器:數據庫
配置文件說明: /etc/vsftpd/vsftpd.conf # vsftpd的核心配置文件 /etc/vsftpd/ftpusers #用於指定哪些用戶不能訪問FTP服務器 /etc/vsftpd/user_list #指定容許使用vsftpd的用戶列表文件 /etc/vsftpd/vsftpd_conf_migrate.sh #是vsftpd操做的一些變量和設置腳本 /var/ftp/ #默認狀況下匿名用戶的根目錄
1.配置vsftpd.conf
# 是否容許匿名登陸FTP服務器,默認設置爲YES容許 # 用戶可以使用用戶名ftp或anonymous進行ftp登陸,口令爲用戶的E-mail地址。 # 如不容許匿名訪問則設置爲NO anonymous_enable=NO # 是否容許本地用戶(即linux系統中的用戶賬號)登陸FTP服務器,默認設置爲YES容許 # 本地用戶登陸後會進入用戶主目錄,而匿名用戶登陸後進入匿名用戶的下載目錄/var/ftp/pub # 若只容許匿名用戶訪問,前面加上#註釋掉便可阻止本地用戶訪問FTP服務器 local_enable=YES # 是否容許本地用戶對FTP服務器文件具備寫權限,默認設置爲YES容許 write_enable=YES # 掩碼,本地用戶默認掩碼爲077 # 你能夠設置本地用戶的文件掩碼爲缺省022,也可根據我的喜愛將其設置爲其餘值 local_umask=022 # 是否激活目錄歡迎信息功能 # 當用戶用CMD模式首次訪問服務器上某個目錄時,FTP服務器將顯示歡迎信息 # 默認狀況下,歡迎信息是經過該目錄下的.message文件得到的 # 此文件保存自定義的歡迎信息,由用戶本身創建 dirmessage_enable=YES # 代表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=YES vsftpd_log_file=/var/log/vsftpd.log # 設定 FTP 服務器將啓用 FTP 數據端口的鏈接請求 ,ftp-data 數據傳輸 ,21 爲鏈接控制端口 connect_from_port_20=NO #開啓被動模式 pasv_enable=YES #被動模式最低端口 pasv_min_port=12000 #被動模式最高端口 pasv_max_port=15000 pasv_promiscuous=YES pasv_addr_resolve=YES pasv_address=59.151.37.141 (外網地址) # 設定是否容許 改變 上傳文件的屬主 chown_uploads=NO #若是設置爲 YES , 則 vsftpd 將以獨立模式運行,由vsftpd本身監聽和處理鏈接請求 listen=YES guest_enable=YES guest_username=ftproot user_config_dir=/etc/vsftpd/vuser_conf pam_service_name=vsftpd userlist_enable=YES tcp_wrappers=YES ascii_upload_enable=YES ascii_download_enable=YES [root@pt-158 ~]#
2.先創建虛擬用戶名單文件:瀏覽器
touch /etc/vsftpd/account.txt 編輯虛擬用戶名單文件:(第一行帳號,第二行密碼,注意:不能使用root作用戶名,系統保留) vi /etc/vsftpd/account.txt test01 test02 user01 user02
3.生成虛擬用戶數據文件:安全
db_load -T -t hash -f /etc/vsftpd/account.txt /etc/vsftpd/account.db chmod 600 /etc/vsftpd/account.db #設定PAM驗證文件,並指定對虛擬用戶數據庫文件進行讀取
4.在/etc/pam.d/vsftpd的文件頭部加入如下信息(在後面加入無效):服務器
[root@pt-158 vsftpd]# cat /etc/pam.d/vsftpd #%PAM-1.0 #session optional pam_keyinit.so force revoke #auth required pam_listfile.so item=user sense=deny file=/etc/vsftpd/ftpusers onerr=succeed #auth required pam_shells.so #auth include password-auth #account include password-auth #session required pam_loginuid.so #session include password-auth auth required /lib64/security/pam_userdb.so db=/etc/vsftpd/account account required /lib64/security/pam_userdb.so db=/etc/vsftpd/account [root@pt-158 vsftpd]#
5.新建一個系統用戶vsftpd,用戶家目錄爲/data1/ftphome/ftproot, 用戶登陸終端設爲/bin/false(即便之不能登陸系統):網絡
useradd vsftpd -d /data1/ftphome/ftproot -s /bin/false
chown vsftpd:vsftpd /data1/ftphome/ftproot -R
6.創建虛擬用戶我的Vsftp的配置文件:session
mkdir /etc/vsftpd/vuser_conf [root@pt-158 vuser_conf]# cat test01 anon_world_readable_only=YES anon_upload_enable=YES anon_mkdir_write_enable=YES anon_other_write_enable=YES anon_umask=022 local_root=/data1/ftphome/ftproot [root@pt-158 vuser_conf]# cat user01 anon_world_readable_only=YES anon_upload_enable=YES anon_mkdir_write_enable=YES anon_other_write_enable=YES anon_umask=022 local_root=/data1/ftphome/ftproot [root@pt-158 vuser_conf]#
7.配置防火牆:併發
59.151.37.141物理機防禦牆添加,關閉192.168.7.158虛擬機的防火牆:
-A PREROUTING -p tcp -m tcp --dport 21 -j DNAT --to-destination 192.168.7.158:21
-A PREROUTING -p tcp --dport 12000:15000 -j DNAT --to 192.168.7.158:12000-15000
8.最後重啓vsftpd服務器:app
systemctl restart vsftpd