Linux 中實現文件傳輸服務(一)

    本文將介紹如何在Linux中實現文件傳輸,這裏主要使用FTP、SFTP。

  •     FTP

        廢話少說,直接進入正題,需要注意,FTP採用Client/Server架構,並且有兩個信道(控制信道、數據信道)。
        
        當Client發起連接時,目標端口爲TCP/21 ,Server對其身份驗證通過後,建立連接,也就是控制信道,此信道用於Client傳輸FTP指令,例如ls、cd、get、put, user等; 當Server收到指令後,在本端分析將結果傳輸至Client,注意此時傳輸的命令執行後的內容是需要另建連接,也就是數據信道
        
    根據數據信道發起者的身份不同分爲,FTP將其分爲主動模式、被動模式:
        
    1. 主動模式: Server端主動與Client建立連接。

Linux 中實現文件傳輸服務(一)

a. 控制信道建立: Client 與 Server建立三次握手後,Client將自己的地址、監聽端口發送至Server , (a , b ,c ,d) 爲IP地址,e*256+f 爲端口。
b. 數據信道建立: Server主動發起連接,源端口TCP/20, 目標端口爲Client發送的端口(e*256+f)。

 


 2. 被動模式:Server端隨機生成一串數字作爲Server端的端口等待客戶端連接。

Linux 中實現文件傳輸服務(一)

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是否配置成功

Linux 中實現文件傳輸服務(一)

    

注意事項:

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用戶都允許登錄訪問。
Linux 中實現文件傳輸服務(一)
Linux 中實現文件傳輸服務(一)
匿名用戶、dog用戶不在user_list文件內,所以不允許訪問。
Linux 中實現文件傳輸服務(一)
Linux 中實現文件傳輸服務(一)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章