FTP

ftp :文件傳輸協議   獨立服務linux

    vsftpd工具:ftp用戶(系統用戶)管理維護,在後臺運行進程vim

    ftp默認端口 2 1 數據端口 2 0 端口(主動模式);默認狀況下ftp服務運行在被模式下。windows

    

ftp原理:安全

    主動模式:客服機向服務器的21端口發送請求,服務接受鏈接,創建一條命令鏈路,須要傳送數據時候,客服端命令鏈路上用RORT命令回覆服務端接口已經打開能夠鏈接,服務端的從20端口向客戶端改21端口發送鏈接請求,創建一條數據鏈接來傳送數據。數據鏈路創建過程服務器主動請求。服務器

    被動模式:客服端向服務器的控制端口發送鏈接請求,服務端接受鏈接,創建一條命令鏈路,當須要傳送數據時候,服務端在命令鏈路上用PASV命令告訴客服端:端口打開了某個端口,告訴端來鏈接,客服端向服務端的該端口發送鏈接,創建一條數據鏈路來傳送數據。在數據創建的過程當中是服務端被動向等待客服端請求。網絡


創建好環境 客服端:windows: ftp://10.1.1.1  linux:ftp 、lftpapp


搭建服務的步驟:一、關閉防火牆和selinux   
dom

                二、配置YUM源ssh

                三、軟件三部曲(查看、安裝、查看配置文件)tcp

                rpm -q vsftp    是否安裝  ***

                yum -y install vsftpd


             四、瞭解主配置文件   man 5 vsftpd.conf
               # cat /etc/vsftpd/vsftpd.conf|grep -v ^#|grep -v ^$
                anonymous_enable=YES  容許匿名用戶訪問
                local_enable=YES        容許本地用戶訪問
                write_enable=YES        寫總開關(本地用戶)
                local_umask=022         本地用戶的默認權限
                dirmessage_enable=YES   開啓消息功能 .messages
                xferlog_enable=YES      開啓日誌功能
                connect_from_port_20=YES   支持主動模式(默認被動模式)
                xferlog_std_format=YES    日誌格式
                listen=YES  以獨立服務運行
                pam_service_name=vsftpd  認證服務名
                userlist_enable=YES  開啓用戶列表
      tcp_wrappers=YES  支持tcp_wrappsers功能,相似防火牆,可是沒有防火牆功能強大

        

            五、根據需求修改配置文件

            

            六、啓動服務,開機自動動

            #serivce vsftpd start

            #chkconfig vsftpd no

            

            #setstat -nltp | grep 21  端口是否開啓

          tcp      0      0 0.0.0.0:21     0.0.0.0:*       LISTEN      3087/vsftpd                         

            七、測試驗證(須要安裝ftp和lftp)

  默認測試的結果:一、默認容許本地用戶和匿名用戶訪問

                  二、默認匿名用戶沒有權限上傳文件能夠下載;本地用戶能夠上傳、刪除文件。



 需求 1容許匿名用戶上傳、下載文件、刪除及重命名,匿名用戶不能夠下載別人上傳的文件


        一、  #vim  /etc/vsftpd/vsftpd.conf
          ...
          anon_upload_enable=YES              容許上傳
          anon_mkdir_write_abled=YES          容許建立
          anon_other_write_enable=YES         重命名


        二、 重啓服務    # service  vsftpd restart
  

        三、測試: # lftp 10.1.1.1 
     lftp 10.1.1.1:/> put test1
     put: Access failed: 553 Could not create file. (test1)    目錄權限
    

      lftp 10.1.1.1
  lftp 10.1.1.1:~> ls
ls: Login failed: 500 OOPS: vsftpd: refusing to run with writable anonymous root 查看不了
# lftp 10.1.1.1:~>

      緣由:權限太大,不安全。修改目錄的權限


 解決辦法:

      #chmod  o - w   /var/ftp
      #chmod  o + w  /var/ftp/pub  ——>在 ftp 家目錄下建立一個目錄


需求 2 : 匿名用戶容許下載其餘匿名用戶上傳的文件
  匿名用戶上傳文件的默認權限,  man 文檔查看
          default:    anon_umask:077
         

          匿名用戶建立 file 的默認權限:600
                       dir 的默認權限:700

    一、 #vim  /etc/vsftpd/vsftpd.conf     ——>修改主配置文件(修改默認權限)
              ...
              anon_umask=02
  

    二、重啓服務
   
   

需求 3 :開啓匿名用戶和本地用戶家目錄裏的消息功能
局部:
  anon:/var/ftp
  echo hello anon > /var/ftp/.message
  local:/home/$username
  echo hello local > /home/user01/.message


 # vim  /etc/vsftpd/vsftpd.conf    ——>全局修改
     ...
    banner_file=/etc/vsftpd/banner     其餘人登陸時會看見該文件的內容呢
   
 #echo  banner  xxx  > /etc/vsftpd/banner
 
 #service  vsftpd  restart


需求 4 :禁錮本地用戶的家目錄

一、   #vim  /etc/vsftpd/vsftpd.conf
          ...
          chroot_local_user=YES    禁錮全部本地用戶,只能在本身的家目錄裏活動

       #service  vsftpd  restart   重啓
       
二、#vim  /etc/vsftpd/vsftpd.conf
       ...
         chroot_local_user=YES       只容許user01能夠切換,其餘任何人都不容許
         chroot_list_enable=YES
       #( default    follows )
         chroot_list_file=/etc/vsftpd/chroot_list
         
    #echo  user01 > /etc/vsftpd/chroot_list

三、#vim  /etc/vsftpd/vsftpd.conf
      ...
      #chroot_local_user=YES         只拒絕user01,其餘人均可以切換
        chroot_list_enable=YES
      #( default    follows )
         chroot_list_file=/etc/vsftpd/chroot_list
         
     #echo  user01 > /etc/vsftpd/chroot_list


需求 5 :容許拒絕某人訪問 ftp 服務(ftp 自身訪問控制)

   /etc/vsftpd/ftpusers:黑名單   /etc/vsftpd/user_list: 白名單
   若是ftpusers 和 user_list 文件衝突,ftpusers黑名單 優先
                                                   

#echo  user01 >>ftpusers 用戶放入黑名單

client:
          Name (192.168.1.102:root): user01
          331 Please specify the password.
          Password:
          530 Login incorrect.
          Login failed.
          ftp>



一、只容許 user01 訪問 ftp 服務

     # cat   user_list
     # vsftpd  userlist
     # If userlist_deny=NO,  only allow users in this file
     # If userlist_deny=YES (default),  never allow users in this file, and
     # do not even prompt for a password.
 
      #vim vsftpd.conf
          ...
          userlist_deny=NO
         
重啓服務,測試:

Name (192.168.1.102:root): user02  沒在user_list裏面,所一拒絕登陸
   530 Permission denied.
   Login failed.
ftp>

 



需求 6 :容許或者拒絕網絡中的主機

# ldd /usr/sbin/vsftpd |grep  libwrap
        libwrap.so.0 => /lib64/libwrap.so.0 (0x00007f42562a0000)

      /etc/hosts.deny    拒絕訪問      
      /etc/hosts.allow    容許訪問
先匹配

      /etc/hosts.deny  , 再去匹配

hosts.allow ; 若是兩個文件都不存在,默認都容許;若是兩個文件有衝突,allow優先

The extensible language uses the following format:
         daemon_list : client_list : option : option ...

ALL: .friendly.domain: ALLOW    容許friendly.domain域下面的全部主機訪問全部服務
ALL: ALL: DENY   拒絕全部人來訪問全部服務
ALL: .bad.domain: DENY   拒絕.bad.domain下面的全部主機訪問全部服務
ALL: ALL: ALLOW    容許全部人來訪問全部服務


#vim  /etc/hosts.deny   ——>拒絕列表
   ...
   服務名稱:選項
   vsftpd:all       拒絕全部人來訪問 ftp 服務
   vsftpd:192.168.1.3 , 192.168.1.110
   vsftpd :  192.168.1.0/255.255.255.0
   vsftpd , sshd : .uplooking.com   except  vm01.uplooking.com
   
#vim  /etc/hosts.allow   ——> 容許列表       
  ...
  vsftpd:all  except:192.168.1.3


重啓服務測試

 


需求 7 :自定義匿名用戶和本地用戶的數據根目錄


/anon/data :匿名用戶數據根目錄
/local/data:本地用戶數據的根目錄


一、建立相應的目錄
  #mkdir     /anon/data   -p
  #mkdir     /local/data    -p
 
二、修改配置文件
   #vim    /etc/vdftpd/vsftpd.conf
      ...
      anon_root=/anon/data
      local_root=/local/data
     
三、重啓服務

四、測試驗證


 

其餘訪問控制:    max _clients : 客戶端最大鏈接次數   默認是2000     max_per_ip : 客戶端每一個 IP 最大鏈接次數  默認 50     max_login_fails : 客戶端最大登陸失敗的次數  默認 3     local_max_rate : 本地用戶傳輸文件的最大速率   默認沒限制   單位是 字節