FTP文件傳輸協議(File Transfer Protocol),即能夠讓用戶在互聯網中上傳、下載文件的文件協議,而FTP服務器就是支持FTP傳輸協議的主機,要想完成文件傳輸則需要FTP服務端和FTP客戶端的配合才行。
FTP協議佔用兩個端口號:
21端口:命令控制,用於接收客戶端執行的FTP命令。
20端口:數據傳輸,用於上傳、下載文件數據。
FTP數據傳輸的類型:
主動模式:FTP服務端主動向FTP客戶端發起連接請求。
被動模式:FTP服務端等待FTP客戶端的連接請求。
下面介紹用虛擬用戶登錄ftp,因爲虛擬用戶模式的帳號口令都不是真實系統中存在的,所以相對於本地用戶要比較安全多了。
步驟:
1.查看系統版本
# uname -a Linux node2 3.10.0-327.36.3.el7.x86_64 #1 SMP Mon Oct 24 16:09:20 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux
2.安裝vsftpd
#yum install vsftpd -y
3.備份配置文件
# cd /etc/vsftpd # mv vsftpd.conf vsftpd.conf.bak # egrep -v "^$|^#" vsftpd.conf.bak > vsftpd.conf
4.創建一個系統賬戶 (方便後面虛擬用戶映射使用)
# useradd -d /data/ -s /sbin/nologin virturl # chmod 755 /data
5.創建虛擬用戶並生成數據文件(這種方法比較麻煩,每次創建都需要重新生成數據庫文件,不過可以使用mysql來代替 這種方法。)
# cd /etc/vsftpd # vim vip.list (文件一行用戶一行密碼) blog 123567 cache 123456 使用db_load命令用HASH算法生成FTP用戶數據庫文件vip.db # db_load -T -t hash -f vip.list vip.db 剛創建的vip.list這個文件就可以刪除了,不然被人發現就破解了,數據庫文件比較重要,更改權限。 # chmod 600 vip.db
6.使用系統上面的pam認證文件
# vim /etc/pam.d/vip (指定我們剛剛上面生成的數據庫文件,去掉後綴名就可以了) auth required pam_userdb.so db=/etc/vsftpd/vip account required pam_userdb.so db=/etc/vsftpd/vip
7.創建用戶權限的文件
# cd /etc/vsftpd # mkdir vip_dir (在裏面用ftp賬戶命名創建文件,文件裏面配置權限,默認是沒有上傳,下載,刪除等權限的。) # vim blog anon_upload_enable=YES #(上傳權限) anon_mkdir_write_enable=YES #(創建文件目錄) anon_other_write_enable=YES #(其他權限) # vim cache anon_upload_enable=YES anon_mkdir_write_enable=YES anon_other_write_enable=YES
8.配置vsftpd配置文件
# vim /etc/vsftpd/vsftpd.conf anonymous_enable=NO # (禁用匿名用戶) local_enable=YES # (允許本地用戶登錄) guest_enable=YES # (需要虛擬用戶登錄) guest_username=virtual # (映射的系統用戶) pam_service_name=vip # (pam認證文件) allow_writeable_chroot=YES # (允許禁錮的FTP根目錄可寫而不拒絕用戶登入請求) user_config_dir=/etc/vsftpd/vip_dir # (指定用戶權限的目錄) write_enable=YES local_umask=022 dirmessage_enable=YES xferlog_enable=YES connect_from_port_20=YES xferlog_std_format=YES listen=NO listen_ipv6=YES userlist_enable=YES tcp_wrappers=YES
9.啓動vsftpd
# systemctl start vsftpd
10.防火牆允許 20,21端口通過
# iptables -I INPUT -p tcp --dport 20:21 -j ACCEPT
11.就可以用客戶端去登錄了。window軟件的我用了filezilla這個軟件,需要打開主動模式去連接,不會報錯。