PROFTPD簡單介紹

 最近公司有個客戶,對VSFTP的模塊集成有所不滿。要求更換爲PROFTP。因此對該服務器做了簡單的瞭解和部署搭建。坑太多,簡單記錄下:

 部署:
 獲取proftp源碼包:ftp://ftp.proftpd.org/distrib/source/proftpd-1.3.5b.tar.gz
 獲取模塊包(客戶需要使用MD5模塊):http://www.castaglia.org/proftpd/modules/proftpd-mod-md5-0.3.5.tar.gz

 【編譯安裝】:
  1、解壓縮包,並將第三方庫文件導入,用於加載。
      #tar zxvf proftpd-mod-md5-0.3.5.tar.gz proftpd-1.3.5b.tar.gz
      #cp mod_md5/mod_md5.c proftpd-1.3.5b/modules/
  2、配置。<切記:安裝成功後,使用proftpd -vv的命令,查看你所安裝的模塊是否有加載的模塊,如果沒有的話,全部卸載,刪除解壓包,重新來一遍>。
      #./configure --with-modules=mod_md5:mod_tls
  3、編譯及安裝。
      #make  &&  makeinstall
  4、爲了方便使用,將使用/etc/init.d/執行,如下:
      #cp proftpd-1.3.5b/contrib/dist/rpm/proftpd.init.d /etc/init.d/proftpd
      並檢查如下:
      1、/etc/sysconfig/proftpd文件是否存在,如果不存在,手動創建,並寫入內容:
      #echo'PROFTPD_OPTIONS="-DANONYMOUS_FTP"' > /etc/sysconfig/proftpd
      2、/etc/init.d/proftpd配置文件第46行與第53行,皆修改爲執行文件所在位置(/usr/local/sbin/proftpd)。
  5、更改默認配置文件:
     修改:Group                nobody
     添加:DefaultAddress       X.X.X.X
 至此,編譯安裝結束。
    
【基礎信息】
所需文件位置:
     默認源代碼安裝的配置文件爲:/usr/local/etc/proftpd.conf
     默認的可執行程序爲:/usr/local/sbin/proftpd
所需相關命令:
    重啓:/etc/init.d/proftpd restart
    debug:/usr/local/sbin/proftpd -d9n
所需日誌:<需配置文件自定義>
    SystemLog:
       1.1.6pl1之後的版本,默認加載的mod_log.c模塊實現的,記錄的是有關FTP服務器錯誤及重啓的日誌。
       LogFormat設置日誌格式,具體的每個字段解釋如下:
       “%a客戶ID,%A匿名用戶名,%b發送請求的字節數,%d目錄名(相對路徑),%D目錄名(絕對路徑),%F上傳或下載的文件名(相對路徑),%f上傳或下載的文件名(絕對路徑),%h客戶的域名,%L本服務器IP,%m客戶發送的命令,%p本服務器端口,%P訪問進程ID,%r客戶發送的整條命令,%t本地時間,%T傳送就所用的時間(秒),%u客戶登錄的用戶名。”
     TransferLog:
       /var/log/xferlog這個日誌是用戶上傳,下載,刪除動作的日誌,也是查詢客戶投訴問題的日誌。
       示例“Wed Jun 08 02:41:10 2016 0 61.48.32.202 9801 /home/jing/jingtest/2.txt a _ d r jing ftp 0 * c”
       具體字段解釋如下:
       “{Wed Jun 08 02:41:10 2016 時間},{0 傳輸持續時間},{61.48.32.202 遠程FTP客戶端地址},{9801 文件大小},{/home/jing/jingtest/2.txt 文件名},{a 傳輸類型,b是二進制文件,a是ascii傳輸},{_ 特殊行爲標記,C被壓縮的文件,U未被壓縮的文件,Ttar文件,_沒有特殊行爲},{d 方向,i上傳,o下載,d刪除},{r 用戶類型,r系統用戶,a匿名用戶},{jing 用戶名},{ftp 被調用的FTP服務器軟件名字},{0 認證方式,0表示沒有},{* 認證用戶ID,*表示沒有},{c 完成狀態,c表示完成,i表示沒有完成}。”

 【配置信息】:
    配置文件結構:
      #全局設置
      設置項目1 參數1
      設置項目2 參數2
      #某個目錄的設置
      <Directory 路徑名>
    ...
    ...
    </Directory>
    #關於匿名登陸的設置
    <Anonymous 匿名登陸的目錄>
    ...
    ...
    <Limit 限制動作>
    ...
    ...
    </Limit>
    </Anonymous>

  【具體配置】
      #【基本配置】
      #配置服務器名
      ServerName                            "ProFTPD Default Installation"
     #設置爲默認服務器
     DefaultServer                          on
     #設置默認的服務器監聽地址
     DefaultAddress                          XXX.XXX.XXX.XXX     
     #設置服務器接收請求的端口
     Port                               21    
     #設置關閉IPv6支持
     UseIPv6                               off  
     #設置用戶上傳文件的權限掩碼,777-022
     Umask                                022
     #設置服務器進程運行使用的用戶名
     User                                 nobody
     #設置服務器進程運行使用的組
     Group                                nobody
     #設置用戶被chroot鎖定到各自的Home目錄
     DefaultRoot                              ~
     #設置屏蔽服務器版本信息
     ServerIdent                              off
     #設置允許寫入覆蓋
     AllowOverwrite                            on
     #設置下載時,允許斷點續傳。
     AllowRetrieveRestart                         on
     #設置上傳時,允許斷點續傳。
     AllowStoreRestart                          on
     #設置最大線程數
     MaxInstances                            30
     #設置最大嘗試連接次數
     MaxLoginAttempts                           3
     #設置無數據傳輸超時時間
     TimeoutNoTransfer                          300
     #設置禁止DNS反查
     UseReverseDNS                            off
     IdentLookups                            off
     
     #設置日誌格式
     #LogFormat         default          "%h %l %u %t \"%r\" %s %b"
     #AllowLogSymlinks                  on
     LogFormat        default            "%a %A %h %l %u %t \"%r\" %s %b %c %d %D %f %F %L %m %T"
     LogFormat           auth          "%v [%P] %h %t \"%r\" %s"
     LogFormat          write          "%h %l %u %t \"%r\" %s %b"
     
     #設置日誌
     #WtmpLog                      off
     #ServerLog                     /var/log/proftp-login.log
     TransferLog                     /var/log/xferlog
     SystemLog                     /var/log/proftp.log
     ExtendedLog                    /var/log/proftpd/access.log ALL default
     
     #設置服務器運行模式,獨立服務standalone,被監管inetd。這裏註釋是因爲開啓後日志有報錯。
     #ServerType                                     standalone
     #設置被動模式使用的端口範圍。這裏暫時不需要,註釋
     #PassivePorts                                   60000 65535
     #設置允許root用戶登錄,默認禁止。
     #RootLogin                                      on
     #虛擬用戶沒有shell,需要打開這個設定
     #RquireValidShell                               off
     #設置用戶傳輸速率
     #TransferRate   STOR|RETR (Kbytes/s) USER使用者
     #設置每個賬號最多允許來源IP
     #MaxHostsPerUser                                1
     #設置每個賬戶每個客戶端最多可同時登陸1次(避免多線程)
     #MaxClientsPerUser                              1
     #設置同一個客戶端最多一個賬號可以登陸
     #MaxClientsPerHost                              1
     #設置單用戶線程數
     #MaxClientsPerHost                              2
     #設置最大用戶數        
     #MaxClients                                     20
     #設置身份認證超時時間
     #TimeoutLogin                                   30
     #設置連接的超時時間
     #TimeoutStalled                                 30s
     #設置客戶端IDLE時間,默認600s
     #TimeoutIdle                                    600
     #設置歡迎信息,如果關閉是off。
     #DisplayLogin                                   welcome.msg
     #設置切換文件夾時,顯示的歡迎信息。
     #DisplayChdir                                   .message
     
     #設置虛擬用戶認證信息,用mod_auth_file.c驗證登錄用戶名密碼
     #AuthOrder                           mod_auth_file.c #只允許虛擬用戶登錄
     #AuthUserFile                         /xxx/ftp.users  #存放用戶名和密碼的文件
     #AuthGroupFile                        /xxx/ftp.group
     
  #【mod_md5配置】
        #我使用這個功能,主要是爲了實現,lftp的quote SITE MD5 $FILENAME命令。
        #首先用-vv的方式檢查是否加載了這個模塊,如有加載成功,配置文件如下所示:
         <Limit SITE_MD5>
             AllowUser   jing
             DenyAll
            </Limit>
            <IfModule mod_md5.c>
             MD5Engine    on
            </IfModule>

  #【openssl認證配置】
        #這個功能是爲了實現,自定義證書認證。
        #同樣用-vv方式檢查是否加載了模塊,如果加載成功,會產生/home/jingjing.wang/proftpd-1.3.5b/modules/mod_tls.c這個軟連接。
        #該功能需要本機部署openssl,具體部署方法,見下方【部署openssl】。
        <IfModule mod_tls.c>
           TLSEngine            on
           TLSLog             /var/log/proftpd/proftp-tls.log
           TLSProtocol           TLSv1
           TLSRequired           on
           TLSRSACertificateFile      /usr/local/etc/proftpd.crt
           TLSRSACertificateKeyFile    /usr/local/etc/proftpd.key
           TLSVerifyClient         off
           TLSOptions           NoSessionReuseRequired
        </IfModule>
        <Limit LOGIN>
          AllowUser jing
          DenyAll
        </Limit>
 #【配置完成】
     
  【部署openssl】
   1、獲取軟件包
   #wget http://www.openssl.org/source/openssl-1.0.2.tar.gz
   2、解壓
   #tar -xzvf openssl-1.0.2.tar.gz
   3、編譯安裝
   #cd openssl-1.0.2
    #./config
    #make && make install
   4、生成祕鑰文件
   #cd /usr/local/etc/
    #/usr/bin/openssl req -x509 -nodes -days 365 -newkey rsa:1024 -keyout proftpd.key -out proftpd.crt
   
  【異常】:
   1、530 Login incorrect.Login failed.Remote system type is UNIX.Using binary mode to transfer files.
    這個錯誤有很多問題,常見的:
    1、用戶設置爲/sbin/nologin。<先設置允許登錄,sed'/USERNAME/s/nologin/bash/g' /etc/passwd,(記得加-i)再一步步調試。>
    2、家目錄權限不是777。<先設置爲777,chmod 777 ~再一步步調試。>
    3、Limit控制權限。<先設置爲All,最高權限,再一步步調試。>
    4、auth驗證問題。<先註釋掉所有的auth,再一步步調試。也可以參照http://www.qianweikang.com/cheng-gong-jie-jue-proftpd-deng-lu-ti-shi-530-login-incorrect.htm>
   2、421 Service not available, remote server has closed connection。Login failed.No control connection for command: Success
    這個錯誤,我是誤打誤撞解決的,部分用戶出現421,調用DEBUG調試,看到配置文件中調用MD5模塊的配置有報錯(<IfModule mod_md5.c>),註釋後就好了。
    by20160608,又出現一次,我把用戶名修改成/sbin/nologin後,再次出現 421,經過試驗,發現還是這個模塊,這個模塊中的AllowUser和MD5Path需要把允許的用戶名寫上纔可以。
   3、日誌報錯:error: /var/log/proftpd is a world-writable directory、unable to open SystemLog '/var/log/proftpd/proftp.log': /var/log/proftpd/proftp.log is a world-writable directory
    這個錯誤是由於日誌文件的權限問題,解決辦法:    
    chmod 755 /var/log/proftpd
    chmod 640 /var/log/proftpd/*
       
 【歡迎詞設置】
   關於歡迎文件的設置包含如下參數:
   %T 目前的時間
   %F 所在硬盤剩下的容量
   %C 目前所在的目錄
   %R Client 端的主機名稱
   %L Server 端的主機名稱
   %U 使用者帳戶名稱
   %M 最大允許連接人數
   %N 目前的服務器連接人數
   %E FTP服務器管理員的 email
   %i 本次上傳的文件數量
   %o 本次下載的文件數量
   %t 本次上傳+下載的文件數量
   
   知道這些參數,可以寫出歡迎語文件,例如:
   歡迎您%U, 這是你的測試FTP服務器;
   目前時間是:%T;
   本服務器最多允許%M個用戶連接數;
   目前服務器上已有%N個用戶連接數;
   目前你所在的目錄是%C;
   目錄所在的硬盤還剩下%F字節。

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