FTP(File Transfer Protocol)是文件傳輸協議的簡稱。正如其名所示:FTP的主要作用,就是讓用戶連接上一個遠程計算機(這些計算機上運行着FTP服務器程序)察看遠程計算機有哪些文件,然后把文件從遠程計算機上拷到本地計算機,或把本地計算機的文件送到遠程計算機去。
FTP支持兩種方式的傳輸:文本(ASCII)方式和二進制(Binary)方式。通常文本文件的傳輸采用ASCII方式,而圖象、聲音文件、加密和壓縮文件等非文本文件采用二進制方式傳輸,如果為了從一個系統上傳輸文件而使用了與本地系統不同的計算機字節位數,那么就必須使用Tenex模式。FTP以ASCII方式作為缺省的文件傳輸方式。
(1) PORT(主動模式)
PORT中文稱為主動模式,工作的原理: FTP客戶端連接到FTP服務器的21端口,發送用戶名和密碼登錄,登錄成功后要list列表或者讀取數據時,客戶端隨機開放一個端口(1024以上),發送 PORT命令到FTP服務器,告訴服務器客戶端采用主動模式並開放端口;FTP服務器收到PORT主動模式命令和端口號后,通過服務器的20端口和客戶端開放的端口連接,發送數據,原理如下圖:
(2) PASV(被動模式)
PASV是Passive的縮寫,中文成為被動模式,工作原理:FTP客戶端連接到FTP服務器的21端口,發送用戶名和密碼登錄,登錄成功后要list列表或者讀取數據時,發送PASV命令到FTP服務器, 服務器在本地隨機開放一個端口(1024以上),然后把開放的端口告訴客戶端, 客戶端再連接到服務器開放的端口進行數據傳輸,原理如下圖:
2、安裝ftp
yum install vsftp
(1)開啟ftp、查看狀態 、端口
systemctl start vsftpd #開啟ftp服務
systemctl status vsftpd #查看狀態
ps -aux|grep vsftpd #查看進程
netstat -tnlp|grep 21 #查看21端口
(2)先將防火牆和selinux關閉,先允許匿名用戶、普通用戶登錄,並上傳下載功能。
systemctl stop firewalld.service
setenforce 0
getenforce
(3)做虛擬用戶登錄,真是不存在系統中的用戶。
a、先安裝虛擬用戶需要的安裝的軟件包
yum install pam* libdb-utils libdb* --skip-broken -y
b、創建虛擬用戶臨時文件 /etc/vsftpd/ftpusers.txt,新建虛擬用戶和密碼nihao、123 奇數行是賬號偶數行是密碼
c、生成vsftpd虛擬用戶數據認證文件,設置權限700:
db_load -T -t hash -f /etc/vsftpd/ftpusers.txt /etc/vsftpd/vsftpd_login.db #將明文密碼轉換
chmod 700 /etc/vsftpd/vsftpd_login.db /etc/vsftpd/ftpusers.txt
d、配置PAM認證文件,/etc/pam.d/vsftpd 行首加入如下兩句
auth required pam_userdb.so db=/etc/vsftpd/vsftpd_login
account required pam_userdb.so db=/etc/vsftpd/vsftpd_login
e、所有vsftp虛擬用戶需要映射到一個系統用戶,該系統用戶不需要密碼,也不需要登錄,主要是用於虛擬用戶映射使用,創建命令如下:
useradd -s /sbin/nologin ftpuser
f、完整vsftpd.conf配置創建代碼
pam_service_name=vsftpd 虛擬用戶啟用pam認證
guest_enable=YES 啟用虛用戶
guset_username=ftpuser 映射虛擬用戶至系統用戶ftpuser
user_config_dir=/etc/vsftpd/vsftpd_user_conf 設置虛擬用戶配置文件目錄
virtual_use_local_privs=YES 虛擬用戶使用與本地用戶相同的權限
g、所有虛擬用戶共同基/home/ftpuser 主目錄實現上傳和下載,可以在/etc/vsftpd/vsftpd_user_conf目錄創建虛擬用戶各自的配置文件,創建虛擬用戶配置文件主目錄
mkdir -p /etc/vsftpd/vsftpd_user_conf
h、為虛擬用戶創建配置文件 nihao1 、nihao2、
vim /etc/vsftpd/vsftpd_user_conf/nihao1 同時創建私有的虛擬目錄,代碼如下:
local_root=/home/ftpuser/nihao1
write_enable=YES
anon_world_readable_only=YES
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
i、創建虛擬用戶各自虛擬目錄:
mkdir -p /home/ftpuser/{nihao1,nihao2} : chown -R ftpuser.ftpuser /home/ftpuser
測試結果如下
可在用戶下創建文件