一 FTP介紹
使用場景:前面介紹的lrzsz工具當文件大了超過4G后就不好使用了,而FTP就適合于傳輸大文件;另外一種情況是在阿里云上,從一臺機器跳到另一臺機器,需要用到跳板機,這時候如果用rzsz去傳輸數據也會出問題,而我們可以在Linux系統上搭建一個FTP服務環境,然后客戶端比如windows可以安裝一個客戶端軟件,就可以連到服務端,把本地的文件傳到服務器上去,也可以把服務器的文件下載到本地來
? ? 由于安全性和規范性問題,FTP在小公司使用的多,大企業使用的較少,大企業如果有發布更新到服務器的需求,一般使用自動化發布的工具
二 搭建ftp服務
1、安裝
? ? centos自帶ftp服務軟件包vsftpd,可以直接使用yum安裝
? ? # yum install -y vsftpd
2、創建linux系統的普通用戶
? ? vsftpd這個軟件是可以使用系統級別的用戶來登錄的,比如我創建一個系統的普通用戶lijie,設置了一個密碼,我們是可以用lijie這個用戶和它的密碼來登錄vsftpd,只不過這個登錄不是ssh方式,而是ftp的方式,登錄進去后會進入到lijie這個用戶的家目錄下,但是這樣是有點不安全的,畢竟給這個用戶設置了密碼,它就能夠去登錄操作系統,這時候,我們可以采取給ftp設置虛擬用戶的方式解決這個問題,虛擬用戶映射成系統的一個普通用戶,或者也可以映射多個普通用戶,這樣的話就算是有了密碼,也是不能夠通過ssh去登錄這臺服務器的,這樣相對來說安全了很多
? ? 我們首先來創建一個虛擬用戶,這個虛擬用戶是用來映射的
? ? # useradd -s /sbin/nologin virftpuser ? ?
? ? 其中-s用來指定用戶的shell , ??/sbin/nologin表示不能登錄系統,virftpuser是創建的用戶的用戶名,
3、編輯虛擬用戶密碼文件
? ? # vim /etc/vsftpd/vsftpd_login ? ?//我們需要在這個文件里定義用戶名和密碼,格式是奇數行為用戶名,偶數行為密碼,添加的內容如下
4、修改虛擬用戶密碼文件的權限
? ? # chmod 600 /etc/vsftpd/vsftpd_login ? ? ?//為了安全,密碼文件只允許屬主讀寫
5、將虛擬用戶密碼文件轉換為二進制文件
? ? # ?db_load -T -t hash -f /etc/vsftpd/vsftpd_login /etc/vsftpd/vsftpd_login.db? ? ? ? ? //將文本文件轉換成計算機識別的二進制文件
? ? # ll /etc/vsftpd ? ? ? //查看二進制文件是否生成成功
? ? 上圖箭頭所指的這個二進制文件是不能直接cat的,上面我們創建的密碼文件/etc/vsftpd/vsftpd_login實際上是可以自定義的,后面我們會在另外一個配置文件中去引用
6、創建虛擬用戶配置文件所在目錄
? ? 這個目錄也是可以自定義的,后面也會在另一個配置文件中引用
? ? # mkdir /etc/vsftpd/vsftpd_user_conf
7、創建第一個虛擬用戶的配置文件
? ? # cd /etc/vsftpd/vsftpd_user_conf? ? ? ?//切換到虛擬用戶配置文件目錄
? ? # vim testuser1? ? ? ? //創建第一個虛擬用戶的配置文件,這個文件的名字要求跟對應的用戶名字保持一致
? ? 在這個配置文件中加入以下內容:
local_root=/home/virftpuser/testuser1? ? ? ?//用于定義虛擬用戶的家目錄
anonymous_enable=NO? ? ? ? ? ? ? ? ? ? //將是否允許匿名用戶設置為不允許
write_enable=YES? ? ? ? ? ? ? ? ? ? ? ? ? ? ?//將是否允許可寫設置為允許
local_umask=022? ? ? ? ? ? ? ? ? ? ? ? ? ? ? //用于定義創建新文件或新目錄時的權限
anon_upload_enable=NO? ? ? ? ? ? ? ? ?//是否允許匿名用戶上傳
anon_mkdir_write_enable=NO? ? ? ? ?//是否允許匿名用戶創建目錄、可寫:不允許
idle_session_timeout=600? ? ? ? ? ? ? ?//設置登陸ftp后空閑時ftp的會話超時時間為600s
data_connection_timeout=120? ? ? ? ?//數據傳輸的超時時間為120s
max_clients=10? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?//最大客戶端數
8、創建虛擬用戶家目錄
? ? # mkdir /home/virftpuser/testuser1? ? ? ??
9、在虛擬用戶家目錄下創建一個文件
? ? 這個文件用于我們后面的測試
? ? #? touch /home/virftpuser/testuser1/lijie.txt
10、修改所有者所屬組
? ? # chown -R virftpuser:virftpuser /home/virftpuser
11、修改ftp認證的文件
? ??/etc/pam.d/vsftpd是用于認證的文件,我們在登陸ftp時候有一個認證的過程,在認證的時候,就需要告訴ftp我們是通過什么樣的形式去認證,認證的時候去哪里找密碼庫,輸入的用戶名密碼是否正確需要找到這個庫來比對。
? ? 在/etc/pam.d/vsftpd這個文件中加入以下內容,這個修改用于告訴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
上面加入的內容中 /lib64/security/pam_userdb.so? ? 這個文件是要求必須要存在的
12、編輯vsftp的主配置文件
? ? vsftp的主配置文件/etc/vsftpd/vsftpd.conf是vsftp最大最重要的配置文件,我們需要在這個配置文件中做一些修改:
? ? 修改前:
? ? 修改后:
? ? 修改了這三處之后還需要在這個配置文件的末尾加上以下內容:
chroot_local_user=YES
guest_enable=YES? ? ? ?//允許映射
guest_username=virftpuser ? ? ? //告訴vsftpd虛擬用戶映射過來的用戶名
virtual_use_local_privs=YES? ? ? ?//告訴vsftpd服務我們現在使用的是虛擬用戶
user_config_dir=/etc/vsftpd/vsftpd_user_conf? ? //用于定義虛擬用戶配置文件所在路徑
allow_writeable_chroot=YES
13、啟動vsftpd服務
????# systemctl start vsftpd? ? ? ? //啟動vsftpd服務
? ? # ps aux |grep vsftp? ? ? ? ? ? //查看vsftpd服務是否成功啟動
? ? # netstat -lntp? ? ? ? ? ? ? ? ? ? ?//查看vsftpd服務監聽的端口,監聽的是21端口
小知識:22端口是sshd,23端口是telnet監聽,telnet現在幾乎沒人用了
13、測試驗證
? ? 首先我們可以在windows上安裝一個ftp客戶端軟件,建議使用filezilla client,filezilla是一個ftp開源的免費的軟件,可以搭建服務,同時他也有一個客戶端軟件,為了測試方便,我們可以在linux上安裝一個ftp客戶端軟件lftp
? ? # yum install -y lftp? ? //安裝filezilla在linux上的客戶端軟件lftp
? ? # lftp testuser1@127.0.0.1? ? ?//使用testuser1用戶登錄
? ? 系統提示口令,即輸入密碼的意思,輸入密碼回車后,即可登陸到127.0.0.1,使用ls命令就可以看到之前我們創建的文件lijie.txt
? ? 我們輸入?后可以看到在ftp下我們可以使用的命令有哪些
? ? 我們常用的命令有:put、get
/> get lijie.txt ? ? ? ? ? //獲取文件lijie.txt放到當前目錄下
/> quit ? ? ? ? ? ? ? ? ? ? //退出lftp
# ls ? ? ? ? ? ? ? ? ? ? ? ? ?//在當前目錄下查看是否存在lijie.txt文件,可以看到,lijie.txt文件確實已經獲取到了
三 ?使用xshell來實現ftp類似功能
1、新建會話
? ? 在xshell中新建會話,協議類型選擇SFTP,端口號依然選擇22號端口,使用的是ssh協議
2、連接遠程服務器
? ? 連接剛才新建的會話指定的服務器
? ? 輸入用戶名和密碼后登陸成功,登陸成功界面如下,這時候默認是在root用戶下
? ? 我們來使用ls命令查看
? ? sftp:/root> ls
? ? sftp:/root> cd /tmp ? ? ? ? ? ? ? //我們可以切換到其他目錄下
? ? sftp:/tmp> get user.sql ? ? ? //從服務器獲取文件
? ? 上面命令已成功獲取文件到我們的windows中,具體的文件保存位置我們可以像下面這樣設置,點擊文件下面的屬性按鈕
? ? 彈出下面的對話框,我們按照圖中步驟選擇本地存儲路徑
? ? 下面我們再來使用get命令傳輸文件就會保存到上圖我們設置的路徑里面去了