ftp服務器介紹與配置

一、 ftp服務,File Transfer Protocal 文件傳輸協議 

    1. ftp基于tcp協議,C/S架構 

        Server: wu-ftpd, proftpd ,pureftp,vsftpd:(Very Secure ftpd),IIS,ServU

        Client:

            GUI: flashfxp,cuteftp,filezilla(開源), gftp(Linux)

            CLI:ftp, lftp,wget, lftpget

    2. ftp的傳輸機制

            1) 命令連接和數據傳輸連接

ftp模型.png 

  最開始,只建立命令連接,當執行get命令時,開啟另一端口建立文件傳輸連接,如果get多個文件,則建立多個連接。文件傳輸結束時,拆除相應的文件連接。 

            2) 數據連接的主動模式和被動模式 

                 主動和被動連接.png

主動連接:通??蛻舳藭b有防火墻,不允許別人主動對客戶端發起連接

被動連接:可以通過服務器端連接追蹤機制來解決防火墻問題,無論訪問哪個端口,端口必須和已經建立的鏈接產生關系。 

            主動模式下: 服務器工作在20號端口 

            被動模式下: 服務器工作在隨機端口  

    3. 傳輸數據: 

            流式話數據: 可以存入硬盤

                                文本文件, 二進制文件 等

    

    4. 用戶認證機制: 

        1) 系統用戶

        2) 虛擬用戶。通常存放在文件或者數據庫中

                hash file 

                mysql 

        3) 匿名用戶 

    5. 數據傳輸安全機制: 

        sftp :ssh提供基于ssh協議的ftp服務

        ftps :基于ssl的ftp 

    7. 響應碼 

            1xx:信息碼 

            2xx:成功狀態嗎 

            3xx:進一步提示補全信息的狀態 

            4xx:客戶端錯誤

            5xx:服務器端錯誤

二、 vsftpd 安裝和配置 

     1. 安裝vsftpd 

    # yum -y install vsftpd

      2. 重要的目錄

    /etc/pam.d/vsftpd              認證文件存放目錄    
    /etc/rc.d/init.d/vsftpd        服務腳本
    /usr/sbin/vsftpd               主程序文件 
    /etc/vsftpd/vsftpd.conf        主配置文件 
    /etc/vsftpd/ftpusers           用戶黑名單
    /etc/vsftpd/user_list          用戶限制名單 userlist_deny=NO 僅允許此名單用戶登錄,userlist_deny=YES 不允許用戶名單的用戶登錄
    /var/ftp/pub                   共享文件所在位置

      3.  關于pam的認證文件

    ## 文件所在位置/etc/pam.d/vsftpd 關于認證文件 
        pam: Plugable Authentication Module: 插件式認證模塊 
            1) nsswitch: 名稱解析框架 
                模塊: /lib64/libnss* , /usr/lib64/libnss* 
                配置文件: /etc/nsswitch.conf 
            2) 用戶認證框架 
                模塊化:/lib64/security/pam*.so 
                配置文件:/etc/pam.conf 和 /etc/pam.d/*

       4. chroot選項

    ## 對于ftp用戶訪問ftp服務時使用chroot禁錮用戶 
    ## 在主配置文件/etc/vsftpd/vsftpd.conf中配置啟動
        chroot_local_user=YES                         對于本地用戶使用chroot, 將會把其家目錄作為其root目錄 
        chroot_list_enable=YES                        chroot_list里面的用戶不受chroot影響 
        chroot_list_file=/etc/vsftpd/chroot_list      不受chroot指令的例外用戶列表,需要手動添加,每行一個用戶名。如果沒有這個文件鏈接會失敗

  chroot開啟前效果 

                                        before_chroot.png

ftp登錄用戶可以進入系統根目錄

chroot開啟后效果 

                                       after_chroot.png

開啟后,用戶的家目錄被當做root了

        5. 關于匿名用戶的配置 

    anonymous_enable=YES                    允許匿名用戶登錄     
    anon_upload_enable=YES                  允許匿名用戶上傳文件
    anon_other_write_enable=YES             允許匿名用戶執行其他寫權限 
    anon_mkdir_write_enable=YES             允許匿名用戶創建文件夾 

    ## 此時的權限為ftp用戶配置的權限疊加文件本身權限總和的效果 
    ## 如果文件本身權限不允許其他用戶修改,基本vsftpd.conf配置了匿名用戶可修改,結果依然不能修改 
    ## 文件夾也一樣,如果想要允許匿名用于在pub上傳文件,需要將其other權限添加+w

         6. vsftp 控制登錄用戶的機制 

    ## /etc/vsftpd/ftpusers中的用戶都不允許使用ftp服務, 這是在/etc/pam.d/vsftpd中定義;/etc/pam.d/vsftpd 中應該有如下一行        
        auth       required     pam_listfile.so item=user sense=deny file=/etc/vsftpd/ftpusers onerr=succeed
    ## /etc/vsftpd/user_list文件兩種配置方法        
        ## 黑名單:
        userlist_enable=YES
        userlist_deny=YES
        ## 白名單
        userlist_enable=YES
        userlist_deny=NO

          7. 鏈接限制

        max_clients: 最大并發連接數        
        max_per_ip: 每IP可同時發起并發請求

          8. 傳輸速率 

        anon_max_rate: 匿名用戶的最大傳輸速率,單位是“字節/秒”        
        local_max_rate: 本地用戶最大傳輸速率, 單位是“字節/秒”

          9. 匿名用戶上傳的文件自動轉換屬主和屬組 

        chown_uploads=YES
        chown_username=someuser  ## 使用特定用戶作為上傳的文件的屬主,并使用其所在的組當做屬組

          10. 上傳文件的umask 

        anno_umask: 匿名用戶上傳文件的umask; 
        local_umask:

           11. 歡迎信息  

        banner_file=/path/to/some_banner_file        
        ftp_banner=some string
        dirmessage_enable=yes ## 需要在某ftp可訪問的目錄下創建.messages文件

           12. 虛擬用戶: 所有虛擬用戶都會被映射為一個系統用戶, 訪問時文件目錄為此系統用戶的家目錄 

                  虛擬用戶認證機制: hash編碼的文件,奇數行為用戶名,偶數行尾秘密

                  關系型數據庫: pam-mysql第三方模塊認證 

三、 詳解配置虛擬用戶 

    1. 安裝mysql和pam_mysql(epel源提供) 

    # yum -y install vsftpd mysql-server mysql-devel pam_mysql

    2. 創建虛擬用戶賬號所映射的系統用戶 

    # useradd -s /sbin/nologin -d /var/ftproot vuser     
    # chmod go+rx /var/ftproot

    3. 在數據庫中添加虛擬用戶

    mysql> create database vsftpd;    
    mysql> grant select on vsftpd.* to vsftpd@192.168.98.128 identified by 'vsftpd';
    mysql> flush privileges;
    mysql> insert into users(name,password) values('tom',password('tom'));
    mysql> insert into users(name,password) values('jerry',password('jerry'));

     4. 配置pam認的配置文件

    auth required /lib/security/pam_mysql.so user=vsftpd passwd=vsftpd host=192.168.98.128 db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=2    
    account required /lib/security/pam_mysql.so user=vsftpd passwd=vsftpd host=192.168.98.128 db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=2

    ## 這里說明一下,host是vsftpd所在主機的主機地址,同時也是在mysql中被授權訪問的主機地址。vsftpd會通過借助pam訪問數據庫獲取數據。而vsftpd所在的主機為192.168.98.128,這里的host也是這個。 如果把vsftpd放在其他主機上與數據庫分開管理也是可以的。 
    ## crypt 加密方式
    ##  0 明文
    ##  1 Y 
    ##  2 為mysql中的password()函數加密 
    ##  3 md5
    ##  4 sha1

       5. 配置vsftpd配置文件

    ## 主要添加下面三行    
        # vim /etc/vsftpd/vsfptd.conf 
        guest_enable=YES                    ## 允許使用虛擬用戶
        guest_username=vuser                ## 虛擬用戶映射為vuser系統用戶
        pam_service_name=vsftpd.mysql       ## pam配置文件位置為/etc/pam.d/vsftpd.mysql 

    ## 下面是一些vsftpd的基本選項 
        anonymous_enable=YES
        local_enable=YES
        write_enable=YES
        anon_upload_enable=NO
        anon_mkdir_write_enable=NO
        chroot_local_user=YES

    ## 另外每個虛擬用戶的單獨權限可以在 /etc/vsftpd/vuser/ 配置
        例如:
        # vim /etc/vsftpd/vuser/tom  寫下一下幾行
        anon_upload_enable=YES
        anon_mkdir_write_enable=YES

        6. 重啟vsftpd服務,測試效果 

    # service vsftpd restart     
    在另一個臺主機上 
    # ftp 192.168.98.128 
        Connected to 192.168.98.128 (192.168.98.128).
        220 (vsFTPd 2.2.2)
        Name (192.168.98.128:root): tom
        331 Please specify the password.
        Password:
        230 Login successful.
        Remote system type is UNIX.
        Using binary mode to transfer files.
        ftp> 
    測試成功。

        7. 常見的不能正常認證的錯誤 

            1) iptables 忘記關,selinux沒有disable :此時通常的錯誤是數據庫無法訪問 

            2) 虛擬用戶無法認證: 有可能是加密方式沒有設置統一 

            3) 數據庫沒法連接, 數據庫訪問的用戶和主機要和pam文件的用戶主機統一,一定要明確,是vsftpd借助pam訪問數據庫,而不是ftp客戶端訪問數據庫。我在這里被坑了好幾天。

原創文章,作者:以馬內利,如若轉載,請注明出處:http://www.www58058.com/4450

(0)
以馬內利以馬內利
上一篇 2015-06-21 18:50
下一篇 2015-06-21 21:24

相關推薦

  • 有關shell腳本

    SHELL腳本 在Linux運維工作中有著大量的重復性質的工作,比如同時給很多臺的服務器備份,查看多臺的內存情況,等等。這樣的情況下總不能一個一個服務器自己去看,那樣耗時,費力,還容易出錯。所以編寫程序來做這些事情就成了必要的工作。而SHELL就是完成這項工作的。   腳本第一行的開頭寫上#!/bin/bash 這是屬于格式性質的,作用在于加上執行…

    2017-08-12
  • Nginx相關配置及其應用

    LB Cluster: 傳輸層:lvs、nginx、haproxy 應用層:nginx(http, https, smtp, pop, imap), haproxy(http), httpd(http/https), ats, perlbal, pound, … nginx load balancer: tcp/udp   nginx …

    Linux干貨 2016-11-11
  • 關于壓測的宏觀個人總結

    工作角色定位 首先先從宏觀角度來評估下本次的壓測工作. 從工作職責上說本次壓測理應由組內其它同學來完成,個人從旁協助或指導即可。團隊成員的成長對我個人來說才是更大的成長。所以即使這次壓測工作完成的再出色,都會因為是由我來完成的,所以都不能稱之為優秀的。對我個人的成長最多是項目經驗的增長和問題的積累,但對組員來說如何讓他們做到現有成果的80%是我需要幫助他們來…

    Linux干貨 2015-04-21
  • 初識Nginx

    前言:   Nginx介紹:    Nginx(engine x)是由俄羅斯人logor sysoev研發的;官方網站:nginx.org;nginx是一個輕量級的高性能的web服務器和反向代理服務器;nginx本身一個處理靜態資源的web服務器,但是通過加裝fastcgi等模塊,可是支持動態資源;可以為IMAP/POP3/SM…

    Linux干貨 2015-06-23
  • CentOS6/7下不關機識別新添加的scsi硬盤

    1)需求說明 在虛擬機中,我們在服務器開機的狀態下添加新的磁盤或者說從存儲上映射某個LUN區域給服務器,不重啟系統的情況下,往往不能夠直接識別到磁盤,在遇到這種情況的時候,我們可以讓系統重新掃描讓服務器重新識別到磁盤。 2)處理步驟 下面看一下在系統不重啟的情況,如何讓系統認識新的磁盤,并能對其分區與格式化 1、在開機狀態下新增磁盤 2、執行下面的命令 ec…

    Linux干貨 2016-07-22
  • shell編程之循環

           當需要重復運行特定的指令以滿足系統管理工作需要時,條件判斷語句if、case并不能很好地提供支撐,shell提供了for、while、until循環語句來滿足此需求。 一、for循環語句        for循環用于重復整個對象列表,依次遍歷對列…

    Linux干貨 2016-08-18
欧美性久久久久