FTP服務器(File Transfer Protocol Server)是在互聯網上提供文件存儲和訪問服務的計算機,它們依照FTP(文件傳輸協議)協議提供服務。
常見的FTP服務器有:
Windows:Ser-U、FTP Server、filezilla_server
Linux:ProFTPD(Professional FTP daemon)是一個類Unix平臺或是類Unix平臺上(如Linux, FreeBSD等)的FTP服務器程序。
FTP兩種工作模式
FTP監聽的端口有兩個一個是20:主動模式下傳輸數據的端口,如果是被動模式,則傳輸端口由服務器和客戶端之間協商決定;另外一個是21:用於傳輸控制信息。
主動模式工作原理
FTP客戶端連接到FTP服務器的21號端口,發送PORT命令(該命令包含了以什麼端口接收數據等信息),並端隨機開放一個端口(1024 以上),告知服務器客戶端採用主勱動模式並開放端口,FTP服務器收到PORT 主動模式命令和端口後,通過服務器的20號端口和客戶端開放的端口違接,發送數據。
主動模式下客戶端的防火牆很多情況下默認都是不接收外部發起的連接的,所以在接收到服務器的發送數據請求往往都被攔截掉,因爲無法確定客戶端的接收服務端請求的數量往往採取被動模式共享文件。
被動模式工作原理
FTP客戶端違接到FTP服務器所監聽的 21號端口,發送PASV命令(包含用戶名密碼等信息)到FTP服務器,服務器在本地隨機開放一個端口(1024 以上),然後把開放的端口告知客戶端發送數據的請求,然後後客戶端建立一個新的TCP連接到服務器開放的端口進行數據傳輸。
服務部署
環境準備:
192.168.8.61/24 Server
192.168.8.21/24 Client
服務端:
安裝軟件:
[root@ser ~]yum install -y vsftpd
配置文件:
/etc/vsftpd/vsftpd.conf //核心配置文件
/etc/vsftpd/ftpusers //用於指定哪些用戶不能訪問FTP服務器,即黑名單
/etc/vsftpd/user_list //用於指定哪些用戶能訪問FTP服務器,即白名單
/etc/vsftpd/vsftpd_conf_migrate.sh //是vsftpd操作的一些變量和設置腳本
/var/ftp/ //默認情況下匿名用戶的根目彔
本地用戶權限控制:
chroot_list_enable=YES | 開啓chroot功能,即把根目錄限定爲新的目錄,而不是原來的/ |
---|---|
chroot_list_file=/etc/vsftpd/chroot_list | 設置鎖定用戶在根目彔中的列表文件。此文件存放要鎖定的用戶名。 |
local_root=/opt/test/ | 設置本地用戶的根目彔爲/opt/test |
local_umask=022 | 本地用戶上傳權限 |
chroot_local_user=YES | 是否將用戶禁錮在主目錄 |
常用的全局配置項:
listen_address=192.168.1.1 | 設置監聽的IP地址 |
---|---|
listen_port=21 | 設置監聽FTP服務的端口號 |
write_enable=YES | 是否啓用寫入權限 |
download_enable=YES | 是否允許下載文件 |
max_clients=0 | 限制併發客戶端連接數 |
max_per_ip=0 | 限制同一IP地址的併發連接數 |
Pasv_min_port=10000 | 將客戶端的數據連接端口改在10000 |
Pasv_min_port=20000 | 到20000之間 |
訪問限制:
userlist_enable=YES | 是否啓用user_list 列表文件 |
---|---|
userlist_deny=YES | 是否禁用user_list中的用戶 |
匿名權限控制:
anonymous_enable=YES | 允許匿名用戶訪問 |
---|---|
anon_upload_enable=YES | 允許匿名用戶上傳文件 |
anon_mkdir_write_enable=YES | 是否允許匿名用戶創建目錄 |
anon_other_write_enable=YES | 開放其他寫入權 |
anon_root=/var/ftp | 匿名用戶的FTP根目錄 |
anon_max_rate=0 | 限制最大傳輸速率(字節/秒) |
anon _umask=022 | 匿名用戶上傳文件的權限掩碼 |
啓動服務:
[root@ser ~]# systemctl start vsftpd
客戶端:
[root@cli ~]# yum install -y lftp
注:從CentOS6開始,系統鏡像中默認沒有ftp客戶端命令。取而代之的是lftp命令。
連接到服務器:
[root@cli ~]# lftp 192.168.8.61