一、簡介
1、FTP 是什麼
FTP "File Transfer Protocol"(文件傳輸協議) 用來實現文件的傳輸及共享,在RFC 959有說明。
FTP工作在應用層,基於TCP,是C/S 架構。
2、會話連接:
控制連接:端口爲21,和FTP服務器溝通,連接FTP,發送指令[ 客戶端不斷開,持久保持連接]
數據連接:端口爲20[ 只有在主動模式下是20 ], 和FTP服務器進行文件傳輸[ 有數據請求時連接]
3、工作模式
FTP協議中,控制連接均由客戶端發起,而數據連接有兩種工作方式:PORT方式和PASV方式
主動、被動 是基於服務器的角度。
PORT【Active】模式(主動方式)
FTP客戶端使用隨機端口N(1024以上)連接到FTP服務器的21端口,發送用戶名和密碼登錄。登錄成功後要list列表或者讀取數據時,客戶端發送 PORT命令到FTP服務器,告訴服務器客戶端採用主動模式並開放端口N+1;FTP服務器收到PORT主動模式命令和端口號後,通過服務器的20端口和客戶端開放的端口N+1連接,發送數據。
PASV【Passive】模式(被動方式)
FTP客戶端使用隨機端口N(1024以上)連接到FTP服務器的21端口,發送用戶名和密碼登錄。登錄成功後要list列表或者讀取數據時,客戶端發送 PASV命令到FTP服務器,告訴服務器客戶端採用被動模式,FTP服務器收到PASV被動模式命令後,打開一個隨機端口,並通知客戶端,我已經打開N端口,可以進行連接,客戶端連接到服務器的N端口獲取數據。
*N >1024
* ftp 防火牆的配置(生產環境中的C/S端均需設置)
4、數據傳輸模式:(服務器自動)
文本
二進制
二、服務端程序:
windows: serv-U、FileZilla
linux: vsftpd "Very Secure FTP Daemon", 是一個UNIX類操作系統上運行的服務器的名字
支持三種用戶:匿名用戶(默認),系統用戶,虛擬用戶
基於PAM實現用戶認證
/etc/pam.d/* /lib64/security/*
安裝Vsftpd並配置
yum install vsftpd -y service vsftp start chkconfig vsftpd on
生成的安裝文件
/etc/vsftpd/vsftp.conf: 配置文件 /etc/init.d/vsftpd: 服務腳本 /usr/sbin/vsftpd: 主程序 /etc/vsftpd/ftpusers: 黑名單,不受任何配置項的影響,它總是有效 /etc/vsftpd/user_list: 由配置文件中userlist_enable和userlist_deny決定是白名單還是黑名單 /var/log/xferlog: 默認日誌文件
配置文件解析
listen=YES 定義ftp爲獨立守護進程 listen_port=21 設置FTP服務的端口號 #anonymous_enable=YES 是否允許匿名用戶登錄(anonymous/ftp) local_enable=YES 是否允許本地用戶登錄 write_enable=YES 是否允許本地用戶寫入 local_umask=022 本地用戶上傳文件的默認權限掩碼值 local_root=/var/ftp 設置本地用戶的FPT根目錄(缺省爲用戶的宿主目錄) local_max_rate 限制本地用戶的最大傳輸速率(0爲無限制),單位爲字節 download_enable=YES 是否允許下載文件(僅限於瀏覽、上傳的FTP服務器可將其設爲NO) #anon_upload_enable=YES 是否允許匿名用戶上傳文件 #anon_mkdir_write_enable=YES 是否允許匿名用戶創建目錄 #anon_other_write_enable=YES 是否允許匿名用戶有其他寫入權限,如改名、覆蓋、刪除 #anon_root=/var/ftp 匿名用戶根目錄(缺省/var/ftp) #anon_umask=022 匿名用戶上傳文件的默認權限掩碼值 #anon_world_readable_only=NO 允許匿名用戶瀏覽文件的權限 #anon_max_rate=0 匿名用戶的最大傳輸速率(0爲無限制),單位爲字節 dirmessage_enable=YES 是否顯示目錄說明文件,默認是YES但需要手工創建.message文件 xferlog_enable=YES 是否記錄ftp傳輸過程,即啓用FTP日誌,默認/var/log/xferlog xferlog_std_format=YES 啓用標準的xferlog日誌格式,若禁用此項,將使用vsftpd自已的日誌格式 connect_from_port_20=YES 主動模式數據傳輸使用20端口 #chown_upload=YES 是否改變上傳文件的屬主 #chown_username=username 將屬主改爲那個用戶 #idle_session_timeout=600 設置控制連接超時時間 #data_connection_timeout=120 設置數據傳輸超時時間 #accept_timeout=60 設置客戶端超時時間 #chroot_list_enable=YES 使用文件將特定用戶鎖定在家目錄 #chroot_list_file=/etc/vsftpd.chroot_list 用戶列表文件 #以上兩項可用下面這個配置代替 chroot_local_user=yes 是否將FTP本地用戶禁錮在宿主目錄中 pam_service_name=vsftpd 設置用於用戶認證的PAM文件位置 userlist_enable=YES 是否啓用user_list用戶列表文件 userlist_deny=YES 是否禁止user_list列表文件中的用戶賬號,啓用後這個文件內的用戶不能登錄ftp tcp_wrappers=YES 是否啓用tcp_wrappers訪問控制 max_clients=0 最多允許多少個客戶端同進連接FTP服務器(0爲無限制) max_per_ip=0 對來自相同IP地址的客戶端,最多允許多少個併發連接(0爲無限制) pasv_enable=YES 打開被動模式連接 pasv_min_port=10000 設置被動模式服務器最小端口號 pasv_max_port=11000 設置被動模式服務器最大端口號 use_localtime=YES 設置FTP使用系統時間 dual_log_enable=YES 當設置爲YES時將會同時產生兩個日誌文件[vsftpd.log\xferlog] log_ftp_protocol=YES 是否記錄所有ftp命令日誌