一 FTP介紹

使用場(chǎng)景:前面介紹的lrzsz工具當(dāng)文件大了超過(guò)4G后就不好使用了,而FTP就適合于傳輸大文件;另外一種情況是在阿里云上,從一臺(tái)機(jī)器跳到另一臺(tái)機(jī)器,需要用到跳板機(jī),這時(shí)候如果用rzsz去傳輸數(shù)據(jù)也會(huì)出問(wèn)題,而我們可以在Linux系統(tǒng)上搭建一個(gè)FTP服務(wù)環(huán)境,然后客戶(hù)端比如windows可以安裝一個(gè)客戶(hù)端軟件,就可以連到服務(wù)端,把本地的文件傳到服務(wù)器上去,也可以把服務(wù)器的文件下載到本地來(lái)
? ? 由于安全性和規(guī)范性問(wèn)題,F(xiàn)TP在小公司使用的多,大企業(yè)使用的較少,大企業(yè)如果有發(fā)布更新到服務(wù)器的需求,一般使用自動(dòng)化發(fā)布的工具
二 搭建ftp服務(wù)




1、安裝
? ? centos自帶ftp服務(wù)軟件包vsftpd,可以直接使用yum安裝
? ? # yum install -y vsftpd
2、創(chuàng)建linux系統(tǒng)的普通用戶(hù)
? ? vsftpd這個(gè)軟件是可以使用系統(tǒng)級(jí)別的用戶(hù)來(lái)登錄的,比如我創(chuàng)建一個(gè)系統(tǒng)的普通用戶(hù)lijie,設(shè)置了一個(gè)密碼,我們是可以用lijie這個(gè)用戶(hù)和它的密碼來(lái)登錄vsftpd,只不過(guò)這個(gè)登錄不是ssh方式,而是ftp的方式,登錄進(jìn)去后會(huì)進(jìn)入到lijie這個(gè)用戶(hù)的家目錄下,但是這樣是有點(diǎn)不安全的,畢竟給這個(gè)用戶(hù)設(shè)置了密碼,它就能夠去登錄操作系統(tǒng),這時(shí)候,我們可以采取給ftp設(shè)置虛擬用戶(hù)的方式解決這個(gè)問(wèn)題,虛擬用戶(hù)映射成系統(tǒng)的一個(gè)普通用戶(hù),或者也可以映射多個(gè)普通用戶(hù),這樣的話(huà)就算是有了密碼,也是不能夠通過(guò)ssh去登錄這臺(tái)服務(wù)器的,這樣相對(duì)來(lái)說(shuō)安全了很多
? ? 我們首先來(lái)創(chuàng)建一個(gè)虛擬用戶(hù),這個(gè)虛擬用戶(hù)是用來(lái)映射的
? ? # useradd -s /sbin/nologin virftpuser ? ?
? ? 其中-s用來(lái)指定用戶(hù)的shell , ??/sbin/nologin表示不能登錄系統(tǒng),virftpuser是創(chuàng)建的用戶(hù)的用戶(hù)名,
3、編輯虛擬用戶(hù)密碼文件
? ? # vim /etc/vsftpd/vsftpd_login ? ?//我們需要在這個(gè)文件里定義用戶(hù)名和密碼,格式是奇數(shù)行為用戶(hù)名,偶數(shù)行為密碼,添加的內(nèi)容如下

4、修改虛擬用戶(hù)密碼文件的權(quán)限
? ? # chmod 600 /etc/vsftpd/vsftpd_login ? ? ?//為了安全,密碼文件只允許屬主讀寫(xiě)

5、將虛擬用戶(hù)密碼文件轉(zhuǎn)換為二進(jìn)制文件
? ? # ?db_load -T -t hash -f /etc/vsftpd/vsftpd_login /etc/vsftpd/vsftpd_login.db? ? ? ? ? //將文本文件轉(zhuǎn)換成計(jì)算機(jī)識(shí)別的二進(jìn)制文件
? ? # ll /etc/vsftpd ? ? ? //查看二進(jìn)制文件是否生成成功

? ? 上圖箭頭所指的這個(gè)二進(jìn)制文件是不能直接cat的,上面我們創(chuàng)建的密碼文件/etc/vsftpd/vsftpd_login實(shí)際上是可以自定義的,后面我們會(huì)在另外一個(gè)配置文件中去引用
6、創(chuàng)建虛擬用戶(hù)配置文件所在目錄
? ? 這個(gè)目錄也是可以自定義的,后面也會(huì)在另一個(gè)配置文件中引用
? ? # mkdir /etc/vsftpd/vsftpd_user_conf
7、創(chuàng)建第一個(gè)虛擬用戶(hù)的配置文件
? ? # cd /etc/vsftpd/vsftpd_user_conf? ? ? ?//切換到虛擬用戶(hù)配置文件目錄
? ? # vim testuser1? ? ? ? //創(chuàng)建第一個(gè)虛擬用戶(hù)的配置文件,這個(gè)文件的名字要求跟對(duì)應(yīng)的用戶(hù)名字保持一致

? ? 在這個(gè)配置文件中加入以下內(nèi)容:
local_root=/home/virftpuser/testuser1? ? ? ?//用于定義虛擬用戶(hù)的家目錄
anonymous_enable=NO? ? ? ? ? ? ? ? ? ? //將是否允許匿名用戶(hù)設(shè)置為不允許
write_enable=YES? ? ? ? ? ? ? ? ? ? ? ? ? ? ?//將是否允許可寫(xiě)設(shè)置為允許
local_umask=022? ? ? ? ? ? ? ? ? ? ? ? ? ? ? //用于定義創(chuàng)建新文件或新目錄時(shí)的權(quán)限
anon_upload_enable=NO? ? ? ? ? ? ? ? ?//是否允許匿名用戶(hù)上傳
anon_mkdir_write_enable=NO? ? ? ? ?//是否允許匿名用戶(hù)創(chuàng)建目錄、可寫(xiě):不允許
idle_session_timeout=600? ? ? ? ? ? ? ?//設(shè)置登陸ftp后空閑時(shí)ftp的會(huì)話(huà)超時(shí)時(shí)間為600s
data_connection_timeout=120? ? ? ? ?//數(shù)據(jù)傳輸?shù)某瑫r(shí)時(shí)間為120s
max_clients=10? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?//最大客戶(hù)端數(shù)

8、創(chuàng)建虛擬用戶(hù)家目錄
? ? # mkdir /home/virftpuser/testuser1? ? ? ??
9、在虛擬用戶(hù)家目錄下創(chuàng)建一個(gè)文件
? ? 這個(gè)文件用于我們后面的測(cè)試
? ? #? touch /home/virftpuser/testuser1/lijie.txt
10、修改所有者所屬組
? ? # chown -R virftpuser:virftpuser /home/virftpuser
11、修改ftp認(rèn)證的文件
? ??/etc/pam.d/vsftpd是用于認(rèn)證的文件,我們?cè)诘顷慺tp時(shí)候有一個(gè)認(rèn)證的過(guò)程,在認(rèn)證的時(shí)候,就需要告訴ftp我們是通過(guò)什么樣的形式去認(rèn)證,認(rèn)證的時(shí)候去哪里找密碼庫(kù),輸入的用戶(hù)名密碼是否正確需要找到這個(gè)庫(kù)來(lái)比對(duì)。
? ? 在/etc/pam.d/vsftpd這個(gè)文件中加入以下內(nèi)容,這個(gè)修改用于告訴ftp我們自定義的文件的目錄位置:
auth sufficient /lib64/security/pam_userdb.so db=/etc/vsftpd/vsftpd_login?
account sufficient /lib64/security/pam_userdb.so db=/etc/vsftpd/vsftpd_login

上面加入的內(nèi)容中 /lib64/security/pam_userdb.so? ? 這個(gè)文件是要求必須要存在的

12、編輯vsftp的主配置文件
? ? vsftp的主配置文件/etc/vsftpd/vsftpd.conf是vsftp最大最重要的配置文件,我們需要在這個(gè)配置文件中做一些修改:
? ? 修改前:

? ? 修改后:

? ? 修改了這三處之后還需要在這個(gè)配置文件的末尾加上以下內(nèi)容:
chroot_local_user=YES
guest_enable=YES? ? ? ?//允許映射
guest_username=virftpuser ? ? ? //告訴vsftpd虛擬用戶(hù)映射過(guò)來(lái)的用戶(hù)名
virtual_use_local_privs=YES? ? ? ?//告訴vsftpd服務(wù)我們現(xiàn)在使用的是虛擬用戶(hù)
user_config_dir=/etc/vsftpd/vsftpd_user_conf? ? //用于定義虛擬用戶(hù)配置文件所在路徑
allow_writeable_chroot=YES

13、啟動(dòng)vsftpd服務(wù)
????# systemctl start vsftpd? ? ? ? //啟動(dòng)vsftpd服務(wù)
? ? # ps aux |grep vsftp? ? ? ? ? ? //查看vsftpd服務(wù)是否成功啟動(dòng)
? ? # netstat -lntp? ? ? ? ? ? ? ? ? ? ?//查看vsftpd服務(wù)監(jiān)聽(tīng)的端口,監(jiān)聽(tīng)的是21端口

小知識(shí):22端口是sshd,23端口是telnet監(jiān)聽(tīng),telnet現(xiàn)在幾乎沒(méi)人用了
13、測(cè)試驗(yàn)證

? ? 首先我們可以在windows上安裝一個(gè)ftp客戶(hù)端軟件,建議使用filezilla client,filezilla是一個(gè)ftp開(kāi)源的免費(fèi)的軟件,可以搭建服務(wù),同時(shí)他也有一個(gè)客戶(hù)端軟件,為了測(cè)試方便,我們可以在linux上安裝一個(gè)ftp客戶(hù)端軟件lftp
? ? # yum install -y lftp? ? //安裝filezilla在linux上的客戶(hù)端軟件lftp
? ? # lftp testuser1@127.0.0.1? ? ?//使用testuser1用戶(hù)登錄

? ? 系統(tǒng)提示口令,即輸入密碼的意思,輸入密碼回車(chē)后,即可登陸到127.0.0.1,使用ls命令就可以看到之前我們創(chuàng)建的文件lijie.txt

? ? 我們輸入?后可以看到在ftp下我們可以使用的命令有哪些

? ? 我們常用的命令有:put、get
/> get lijie.txt ? ? ? ? ? //獲取文件lijie.txt放到當(dāng)前目錄下
/> quit ? ? ? ? ? ? ? ? ? ? //退出lftp
# ls ? ? ? ? ? ? ? ? ? ? ? ? ?//在當(dāng)前目錄下查看是否存在lijie.txt文件,可以看到,lijie.txt文件確實(shí)已經(jīng)獲取到了

三 ?使用xshell來(lái)實(shí)現(xiàn)ftp類(lèi)似功能
1、新建會(huì)話(huà)
? ? 在xshell中新建會(huì)話(huà),協(xié)議類(lèi)型選擇SFTP,端口號(hào)依然選擇22號(hào)端口,使用的是ssh協(xié)議

2、連接遠(yuǎn)程服務(wù)器
? ? 連接剛才新建的會(huì)話(huà)指定的服務(wù)器

? ? 輸入用戶(hù)名和密碼后登陸成功,登陸成功界面如下,這時(shí)候默認(rèn)是在root用戶(hù)下

? ? 我們來(lái)使用ls命令查看
? ? sftp:/root> ls

? ? sftp:/root> cd /tmp ? ? ? ? ? ? ? //我們可以切換到其他目錄下

? ? sftp:/tmp> get user.sql ? ? ? //從服務(wù)器獲取文件

? ? 上面命令已成功獲取文件到我們的windows中,具體的文件保存位置我們可以像下面這樣設(shè)置,點(diǎn)擊文件下面的屬性按鈕

? ? 彈出下面的對(duì)話(huà)框,我們按照?qǐng)D中步驟選擇本地存儲(chǔ)路徑

? ? 下面我們?cè)賮?lái)使用get命令傳輸文件就會(huì)保存到上圖我們?cè)O(shè)置的路徑里面去了