Linux中FTP服務器配置


 
   1、FTP服務器的一些基本概念
 
    (1)FTP連接方式
    控制連接:標准端口為21,用於發送FTP命令信息。
    數據連接:標准端口為20,用於上傳、下載數據。
 
    (2)數據連接的建立類型
    主動模式:服務端從20端口主動向客戶端發起連接。
    被動模式:服務端在指定范圍內的某個端口被動等待客戶端發起連接。
    一般都采用被動模式。主動模式存在安全隱患,客戶機很容易發起DdoS攻擊。
 
    (3)FTP傳輸模式
    文本模式:ASCII模式,以文本序列傳輸數據。
    二進制模式:Binary模式,以二進制序列(比特流)傳輸數據。
    ASCII模式一般只用於純文本文件傳輸,而Binary模式更適合傳輸程序、圖片等文件。尤其是對於可執行文件,如果把可執行文件以文本模式傳輸,則下載下來的文件將無法正常使用。
    在rhel6中默認采用二進制模式,在rhel6以前的版本中默認采用文本模式,為了提高可靠性,rhel6不再支持文本模式。
 
    (4)FTP用戶的類型
    匿名用戶:anonymous或ftp,這兩個其實是同一個用戶。
    本地用戶:帳號名稱、密碼等信息保存在passwd、shadow文件中。但是系統用戶在訪問時默認只能訪問自己的主目錄,而不是vsftpd的主目錄/var/ftp
    虛擬用戶:使用獨立的帳號/密碼數據文件。
    
    2、vdftpd服務
       后台進程:vsftpd
       啟動腳本:/etc/init.d/vsftpd
       類型:System V 服務
       使用端口:20(ftp-data),21(ftp)
       所需RPM包:vsftpd
       配置文件:/etc/vsftpd/vsftpd.conf
       查看配置文件幫助:man  vsftpd.conf
       默認主目錄是:/var/ftp
 
3、配置匿名用戶下載和上傳
[root@test ~]# cat /etc/redhat-release
CentOS release 6.5 (Final)
 
 
   3.1安裝FTP軟件包,客戶端和服務器端:
            tftp-server-0.49-7.el6.i686
            ftp-0.17-51.1.el6.i686
            tftp-0.49-7.el6.i686
            vsftpd-2.2.2-6.el6_0.1.i686
            lftp-4.0.9-1.el6.i686
            gvfs-obexftp-1.4.3-12.el6.i686
    
    啟動服務,並設為開機自動
    service  vsftpd  start
    chkconfig  vsftpd  on
 
     編輯主配置文件/etc/vsftpd/vsftpd.conf
        anonymous_enable=YES  表示允許匿名用戶訪問。
        local_enable=YES  表示允許使用系統用戶訪問,
        write_enable=YES  表示允許允許匿名用戶或系統用戶具有寫入權限
        
   將“/var/ftp/pub”目錄的屬主改為ftp,即可賦予匿名用戶寫入權限
      [root@test ~]# chown ftp /var/ftp/pub/
           
     同時在配置文件/etc/vsftpd/vsftpd.conf中增加以下幾行:
        anon_upload_enable=YES    #表示允許匿名用戶上傳
        anon_mkdir_write_enable=YES  #表示允許匿名用戶創建目錄
        anon_umask=022          #表示設置匿名用戶的umask值
        anon_max_rate=500000    #表示對匿名用戶的傳輸速率進行限制,單位為字節。
 
    重啟服務:service  vsftpd  restart(reload)
 
 
3.2、在客戶端使用匿名用戶訪問測試
 
此時匿名用戶可以新建文件夾,可以上傳文件,如下圖:
 
        
 
 
 
4、配置本地用戶上傳和下載
 
(1)vsftpd可以直接使用Linux系統的本地用戶作為FTP用戶。
使用本地用戶登錄FTP服務器后,默認將位於用戶自己的主目錄中,且具有讀寫權限。
如利用test用戶訪問ftp,那么默認將進入到的目錄是/home/test。                    
    
 
創建系統用戶,並設置密碼,並在主目錄中放置一個測試文件:
        useradd  ftptest   
        passwd      ftptest
        echo ‘ftp test’ > /home/ftptest/ftptest.txt
 
創建系統用戶test,並設置密碼:
        useradd  test
        passwd   test
 
 
(2)實現的場景一:允許用戶test登錄,且登錄成功后位於自己的家目錄中。不允許ftptest用戶登錄
配置參數:
  anonymous_enable=NO 
  local_enable=YES  
  write_enable=YES  
  chroot_local_user =YES       
  chroot_list_enable=NO        
  chroot_list_file=/etc/vsftpd/chroot_list    
  local_umask=022    
 userlist_enable=YES
 userlist_deny=NO
 
將test用戶加入到  /etc/vsftpd/user_list文件。
[root@test vsftpd]# vi /etc/vsftpd/user_list
test
 
[root@test ~]# cd /home/test/
[root@test test]# ls
test.txt       新建文件夾
 
 
測試:
 
 
(3)實現場景二:允許ftptest用戶登錄,登錄成功后位於/data目錄,禁止test用戶登錄。
  anonymous_enable=NO 
  local_enable=YES  
  write_enable=YES  
  chroot_local_user =YES       
  chroot_list_enable=NO        
  chroot_list_file=/etc/vsftpd/chroot_list    
  local_umask=022    
 userlist_enable=YES
 userlist_deny=NO
local_root=/data
 
將ftptest用戶加入到 /etc/vsftpd/user_list文件。從此文件中刪除test用戶。
[root@test vsftpd]# vi /etc/vsftpd/user_list
ftptest
 
 
 
 
配置參數解釋:
  • anonymous_enable=NO     //禁止匿名用戶登錄
  • local_enable=YES                //是否允許本地系統用戶訪問
  • write_enable=YES               // 表示允許允許匿名用戶或系統用戶具有寫入權限
  • chroot_local_user =YES      // 本地用戶在訪問時只能訪問自己家目錄
  • chroot_list_enable=NO       //指定一些用戶訪問限止在自己的home目錄下,就是只能訪問自己的家目錄
  • chroot_list_file=/etc/vsftpd/chroot_list    //在/etc/vsftpd/chroot_list文件中中列出的是被限制的用戶的列表,文件不存在得新建
  • local_umask=022               // 設定本地用戶上傳文件所用的掩碼。
  • local_root=/data           //設置用戶登陸時是訪問ftp服務的主目錄/data
        
 
對於chroot_local_user與chroot_list_enable的組合效果,可以參考下表:
 
chroot_local_user=YES
chroot_local_user=NO
chroot_list_enable=YES
1、所有用戶都被限制在其主目錄下; 2、使用chroot_list_file指定的用戶列表,這些用戶作為“例外”,不受限制
1、所有用戶都不被限制其主目錄下;
2、使用chroot_list_file指定的用戶列表,這些用戶作為“例外”,受到限制
chroot_list_enable=NO
1、所有用戶都被限制在其主目錄下; 2、不使用chroot_list_file指定的用戶列表,沒有任何“例外”用戶
1、所有用戶都不被限制其主目錄下; 
2、不使用chroot_list_file指定的用戶列表,沒有任何“例外”用戶
 
 
(4)關於用戶訪問控制
 
    vsftpd中提供了2個與本地用戶相關的配置文件:
    /etc/vsftpd/ftpusers
    /etc/vsftpd/user_list
 
 
       /etc/vsftpd/ftpusers,包含的用戶賬號將被禁止登錄vsftpd服務器,不管該用戶是否在/etc/vsftpd/user_list文件中出現。
                通常將root、bin、daemon等特殊用戶列在該文件中,禁止用於登錄FTP服務。
 
       /etc/vsftpd/user_list,該文件中包含的用戶賬戶可能被禁止登錄,也可能被允許登錄,具體在主配置文件vsftpd.conf中決定。
                    當存在“userlist_enable=YES”的配置項時,/etc/vsftpd/user_list文件生效。如果配置“userlist_deny=YES”,則
                    僅禁止列表中的用戶賬戶登錄,如果配置“userlist_deny=NO”,則僅允許列表中的用戶賬戶登錄。
    
    userlist_enable=YES 是系統的默認設置,表示啟用userlist用戶列表。
    userlist_deny=NO  是我們后來添加的,表示只允許列表中的用戶登錄。
     
 
 
 
 
5、配置FTP虛擬用戶下載和上傳(多個虛擬用戶通過本地用戶進行登錄)
    所謂虛擬賬戶是指:存放於獨立數據庫文件中的FTP用戶賬戶,可以將他們映射到某個不能登錄的系統用戶賬號上,進一步增強FTP服務器的安全性
    
      (1)、創建虛擬用戶數據庫文件
    使用db_load命令工具創建Berkeley  DB格式的數據庫文件。db_load工具由db4-utils軟件包提供。安裝db4_utils組件。
    
  
  建立一個文本格式的用戶名/密碼 列表文件,用於存放虛擬用戶賬號。文件名可以隨意,文件一般保存在/etc/vsftpd目錄
   [root@test ~]#  vim  /etc/vsftpd/login.txt
        harry
        123
        natasha
        123        # 文件中的奇數行表示用戶名,偶數行為上一行用戶所對用的密碼。
    
     以此文件為數據源通過db_load工具創建出Berkeley DB格式的數據庫文件:
        [root@test ~]#  cd /etc/vsftpd/
        [root@test ~]#  db_load      -T  -t  hash  -f   logins.txt  logins.db
    
    db_load命令是一種固定用法,其中的“-T”選項表示允許非Berkeley DB的應用程序使用從文本格式轉換的DB數據庫文件,“-t   hash”選項指定讀取數據文件的基本方法,“-f”選項用於指定數據的源文件。
 
     最后為了提高虛擬用戶賬號的安全性,最好將這兩個存放虛擬用戶賬號的文件的權限都設為600,即只有root用戶具有讀取和寫入權限。
        chmod   600    logins.txt
        chmod   600   logins.db
 
      (2)創建虛擬用戶的映射賬號
    vsftpd服務對虛擬用戶其實是采用了映射的控制方式,把所有的虛擬用戶賬號都對應到了同一個系統用戶賬號上,並將這個系統用戶的主目錄作為所有虛擬用戶登錄后共用的FTP根目錄。
 
      useradd  -d  /var/ftproot  -s  /sbin/nologin   virtual
      chmod    755  /var/ftproot
      在useradd命令中,利用-d選項指定了用戶的主目錄,利用-s選項禁止用戶登錄。然后再修改目錄權限,使得其他用戶可以訪問。
 
       (3)創建PAM認證文件
      對虛擬用戶的身份認證是通過PAM機制來實現的,PAM是Linux系統中的一個獨立API(應用程序接口),它提供了各種驗證模塊以供其它程序調用。
        當這些程序需要進行用戶身份驗證的操作時,就可以直接調用PAM的相應模塊,而無需由自己來提供驗證功能。所以PAM在Linux系統中提供了統一的身份驗證機制。
    
        PAM的認證文件都統一存放在/etc/pam.d/目錄中,下面我們在這個目錄中創建一個FTP虛擬用戶的認證文件:
        vim    /etc/pam.d/vsftpd.vu【新建文件】
        auth         required      pam_userdb.so      db=/etc/vsftpd/logins
        account      required     pam_userdb.so     db=/etc/vsftpd/logins
      在文件中,通過“db=/etc/vaftpd/logins”參數指定了要使用的虛擬用戶數據庫文件的位置,注意這里不需要寫“.db”     的擴展名。
 
       (4)修改vsftp配置,添加虛擬用戶支持
        原有配置:
        anonymous_enable=NO
        local_enable=YES *     #由於需要映射本地用戶,所以此項必須啟用
        write_enable=YES *    #表示允許寫入。
        local_umask=022
        pam_service_name=vdftpd
        tcp_wrappers=YES
        userlist_enable=YES
        anon_umask=022 *  #在vsftpd服務中,虛擬用戶被默認作為匿名用戶進行處理以降低權限 ,因此對應的配置項通常以anon_開頭
        anon_max_rate=500000
      
         
       
 添加:
        guest_enable=YES    #表示啟用虛擬用戶映射功能
        guest_username=virtual        #表示指定所映射的系統用戶名稱
        pam_service_name=vsftpd.vu    #表示指定PAM認證文件
        user_config_dir=/etc/vsftpd/vuser    #表示虛擬用戶配置文件的存放目錄。
     
        (5)創建虛擬用戶配置文件
         為了對虛擬用戶進行精確控制,實現不同用戶擁有不同的權限,還需要為每個虛擬用戶建立獨立的配置文件,在vsftpd.conf配置文件中我們已經指定了虛擬用戶配置文件的存放位置/etc/vsftpd/vuser。
        
        下面我們首先創建虛擬用戶配置文件存放目錄,然后為harry用戶創建配置文件,文件名即是用戶名:
         mkdir  /etc/vsftpd/vuser
        cd   /etc/vsftpd/vuser
        vim   harry
        然后設置允許harry用戶上傳,設置方法同匿名用戶:    
        anon_upload_enable=YES
        anon_mkdir_write_enable=YES
        
        再為natasha也創建一個配置文件,如果natasha只允許下載,那么只需要有一個配置文件即可,文件內容保持空白。
        touch natasha
 
           重啟服務:service  vsftpd  restart
 
        這樣虛擬用戶便全部設置好了,harry用戶具有下載和上傳的權限,而natasha只能下載不能上傳。
        
      
(6)登錄測試
      
 
        
防火牆的配置:
        添加規則:
        iptables  -t  filter  -A INPUT  -s  192.168.0.0/16  -p  tcp  --dport  21  -j  ACCEPT        
 
SElinux配置
        set  -P  allow_ftpd_anon_write  on
        set   -P  allow_ftpd_full_access   on
        set   -P  ftp_home_dir   on
 
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM