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

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

   FTP

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

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

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

 


 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

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

  • vsftpd

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

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

   

注意事項: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用戶都容許登陸訪問。
Linux 中實現文件傳輸服務(一)
Linux 中實現文件傳輸服務(一)
匿名用戶、dog用戶不在user_list文件內,因此不容許訪問。
Linux 中實現文件傳輸服務(一)
Linux 中實現文件傳輸服務(一)

相關文章
相關標籤/搜索