本文將介紹如何在Linux中實現文件傳輸,這裏主要使用FTP、SFTP。
-
FTP
廢話少說,直接進入正題,需要注意,FTP採用Client/Server架構,並且有兩個信道(控制信道、數據信道)。
當Client發起連接時,目標端口爲TCP/21 ,Server對其身份驗證通過後,建立連接,也就是控制信道,此信道用於Client傳輸FTP指令,例如ls、cd、get、put, user等; 當Server收到指令後,在本端分析將結果傳輸至Client,注意此時傳輸的命令執行後的內容是需要另建連接,也就是數據信道。
根據數據信道發起者的身份不同分爲,FTP將其分爲主動模式、被動模式:
1. 主動模式: Server端主動與Client建立連接。
a. 控制信道建立: Client 與 Server建立三次握手後,Client將自己的地址、監聽端口發送至Server , (a , b ,c ,d) 爲IP地址,e*256+f 爲端口。
b. 數據信道建立: Server主動發起連接,源端口TCP/20, 目標端口爲Client發送的端口(e*256+f)。
2. 被動模式:Server端隨機生成一串數字作爲Server端的端口等待客戶端連接。
a. 控制信道建立: Client與Server建立三次握手後,Client發送FTP指令PASV 表示採用被動模式,等待Server的地址(a,b,c,d)、端口信息(e*256+f)。
b. 數據信道建立: Client收到Server的地址、端口信息後,Client發起連接,源端口隨機,目標端口(e*256+f )。
-
vsftpd
FTP僅是一種協議、規範,而vsftpd就是衆多FTP協議、規範中的一種實現,其在安全方面較爲優秀。
1.通過YUM方式安裝VSFTPD
[root@localhost ~]# yum -y install vsftpd
2.VSFTPD程序文件結構:
/etc/vsftpd/vsftpd.conf #主配置文件
/etc/vsftpd/ftpuser #用於pam驗證用戶身份,拒絕其中用戶訪問
/etc/vsftpd/user_list #用於vsftpd驗證用戶身份,默認拒絕其中用戶
/etc/pam.d/vsftpd #FTP通過pam對用戶進行認真
/var/ftp #ftp用戶的家目錄,默認vsftpd定義的共享目錄
3.創建一個匿名FTP下載站點:
/myftp/pub #共享目錄,所有用戶都可以創建、刪除、修改
a. 首先關閉防火牆、SELinux 避免影響實驗
[root@localhost ~]# iptables -F
[root@localhost ~]# setenforce 0
b. 創建相應目錄並修改其權限:
[root@localhost ~]$ mkdir -pv /myftp/{doc,pub}
mkdir: created directory ‘/myftp’
mkdir: created directory ‘/myftp/pub’
[root@localhost ~]# cp /etc/fstab /myftp/pub/
[root@localhost ~]# chown -R ftp /myftp/
c. 修改配置文件
[root@localhost ~]# cp /etc/vsftpd/vsftpd.conf{,.bak}
[root@localhost ~]# cp /usr/share/doc/vsftpd-3.0.2/EXAMPLE/INTERNET_SITE/vsftpd.conf /etc/vsftpd/vsftpd.conf
[root@localhost ~]# systemctl restart vsftpd
d. 修改ftp用戶的家目錄,因爲匿名用戶實際上是訪問映射至ftp用戶的家目錄。
[root@localhost ~]# vim /etc/passwd
ftp:x:14:50:FTP User:/myftp:/sbin/nologin /
e. 驗證匿名ftp是否配置成功
注意事項:
i. 匿名用戶不能被chroot,否則會報錯,如果不需要本地用戶,建議如下配置:
chroot_local_user=NO
local_enable=NO
ii.自vsftpd 2.3.5之後,vsftpd增強了安全檢查,如果用戶被限定在了其主目錄下,則該用戶的主目錄不能再具有寫權限了!如果檢查發現還有寫權限,就會報該錯誤。
Login failed: 500 OOPS: vsftpd: refusing to run with writable root inside chroot()
解決方法:
chmod a-w /var/ftp -R 去掉主目錄的寫權限或者添加指令允許寫入
allow_writable_chroot=YES
iii. anon_world_readable_only 指令,當值未YES時(默認),其他用戶必須要對文件有讀權限,才能下載;值爲NO時,只要FTP用戶有讀權限即可下載。
4.創建本地用戶登陸FTP站點
要求: 關閉匿名共享、鎖定用戶家目錄、僅允許tom、jerry兩個本地用戶登錄
a. 修改配置文件
[root@node2 /]# vim /etc/vsftpd/vsftpd.conf
anonymous_enable=NO
local_enable=YES
write_enable=YES
chroot_local_user=YES
allow_writeable_chroot=YES
userlist_enable=YES
userlist_deny=NO
[root@node2 /]# vim /etc/vsftpd/user_list
tom
jerry
[root@node2 /]# adduser -s /sbin/nologin tom
[root@node2 /]# adduser -s /sbin/nologin jerry
[root@node2 /]# adduser -s /sbin/nologin dog
[root@node2 /]# echo '123' | passwd --stdin tom
Changing password for user tom.
passwd: all authentication tokens updated successfully.
[root@node2 /]# echo '123' | passwd --stdin jerry
Changing password for user jerry.
passwd: all authentication tokens updated successfully.
[root@node2 vsftpd]# echo '123' | passwd --stdin dog
Changing password for user dog.
passwd: all authentication tokens updated successfully.
[root@node2 /]# !sys
systemctl restart vsftpd
[root@node2 vsftpd]# touch /home/tom/tom.file
[root@node2 vsftpd]# touch /home/jerry/jerry.file
b.驗證結果
tom、jerry用戶都允許登錄訪問。
匿名用戶、dog用戶不在user_list文件內,所以不允許訪問。