本文將介紹如何在Linux中實現文件傳輸,這裏主要使用FTP、SFTP。node
直接進入正題,須要注意,FTP採用Client/Server架構,而且有兩個信道(控制信道、數據信道)。
當Client發起鏈接時,目標端口爲TCP/21 ,Server對其身份驗證經過後,創建鏈接,也就是控制信道,此信道用於Client傳輸FTP指令,例如ls、cd、get、put, user等; 當Server收到指令後,在本端分析將結果傳輸至Client,注意此時傳輸的命令執行後的內容是須要另建鏈接,也就是數據信道。
根據數據信道發起者的身份不一樣分爲,FTP將其分爲主動模式、被動模式:
1. 主動模式: Server端主動與Client創建鏈接。python
2. 被動模式:Server端隨機生成一串數字做爲Server端的端口等待客戶端鏈接。
a. 控制信道創建: Client與Server創建三次握手後,Client發送FTP指令PASV 表示採用被動模式,等待Server的地址(a,b,c,d)、端口信息(e*256+f)。
b. 數據信道創建: Client收到Server的地址、端口信息後,Client發起鏈接,源端口隨機,目標端口(e*256+f )。 shell
FTP僅是一種協議、規範,而vsftpd就是衆多FTP協議、規範中的一種實現,其在安全方面較爲優秀。vim
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下載站點:ide
/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是否配置成功
注意事項:rest
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站點code
要求: 關閉匿名共享、鎖定用戶家目錄、僅容許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.驗證結果blog
tom、jerry用戶都容許登陸訪問。
匿名用戶、dog用戶不在user_list文件內,因此不容許訪問。