Linux下的ftpd很多,Ubuntu下常用vsftpd, proftpd和pure-ftpd,當初使用的就是proftpd. 不過前兩者有個致命的問題就是內碼轉換,它們默認使用UTF-8編碼,而Windows系統使用GBK,這就導致Windows訪問時中文出現亂碼。 pure-ftpd則可以設置客戶端默認編碼,直接設為GBK就解決問題了。pure-ftpd的虛擬用戶支持也很好,允許限制帶寬、空間配額,可以用自帶的pure-pw管理虛擬用戶,也可以用MySQL和LDAP. pure-ftpd也提供FXP協議和SSL/TLS支持,是一個很全面的ftpd. 

 

1、安裝pure-ftpd:

      sudo apt-get install pure-ftpd

 

 

     Pure-ftpd不是用配置文件而是用命令行參數。不過pure-ftpd還是為偏好配置文件的用戶提供了wrapper,可以man一下pure-ftpd-wrapper. 在Debian/Ubuntu下的wrapper有點差別,是在/etc /pure-ftpd/conf下以設置項作為文件名,該項的設置值作為文件的內容,如需要設置ClientCharset=gbk,就建立一個名為“ClientCharset”的文件,內容為“GBK”.

關於基本的參數配置:

  1. ClientCharset=gbk #必設,防止Windows登錄出現中文亂碼

  2. DontResolve=yes  #不解析域名,可以節省登錄時間

  3. BrokenClientsCompatibility=yes #兼容IE等非標准FTP client

  4. ChrootEveryone=yes #把所有用戶限制在其homedir下

  5. KeepAllFiles=yes  #禁止用戶刪除文件,TrustedGID組中的除外

  6. TrustedGID=1001   #管理員組ftpadmins的GID,允許管理員刪除文件

  7. CreateHomeDir=yes  #當虛擬用戶第一次登錄時,自動創建homedir

  8. MaxClientsPerIP=2  #每個IP限制2個連接

  9. MaxClientsNumber=20 #最大並發連接數,默認值是50

  10. MaxDiskUsage=90   #分區已使用空間超過90%時不再接受上傳

  11. NoAnonymous=no    #允許匿名登錄

  12. Bind=8821 #改變端口號

  13. pureDB=/etc/pureftpd.pdb #ftp用戶密碼存放位置;

 

2、建立系統用戶、組:

  sudo groupadd ftpgroup

  sudo useradd -g ftpgroup -d /dev/null -s /bin/false ftpuser

  sudo mkdir /var/ftp

  sudo chmod -R 755 /var/ftp

   sudo chown ftpuser:ftpgroup /var/ftp

        ##由於這些用戶僅用於pure-ftpd,不需要給登錄權限,因此 shell被指定為/bin/false.##

 

3、使用pure-pw配置對虛擬用戶的支持:

       pure-pw的使用很方便,形式和管理系統用戶差不多,只是在useradd, usermod等前面加上pure-pw(虛擬用戶名要緊隨 操作后面而不是放在最后,這一點與useradd等不同). 匿名用戶不需要單獨配置,因此homedir一定要在創建 系統用戶ftp時指定好,其它系統用戶的homedir可以簡單地指定為/dev/null,創建虛擬用戶時再指定homedir. 下面創建虛擬賬戶crawler實現虛擬用戶的登陸:

       sudo pure-pw useradd crawler -u ftpuser -d /var/ftp

 

 執行每條命令之后pure-pw會要求輸入賬號的密碼。在參數的-d選項中指定的homedir的並不需要事先創建好。如果 在配置中設置 CreateHomeDir=yes,則在虛擬用戶第一次登錄時pure-ftpd會自動創建其homedir.


 添加虛擬用戶時還可以設置用戶的帶寬、空間配額、IP段等。修改虛擬用戶設置用pure-pw usermod, 修改密碼用       pure-pw passwd, 刪除虛擬用戶用pure-pw userdel,用法詳見官方文檔

       或詳見:http://www.blogjava.net/sk8boy/archive/2006/04/11/40350.html

 

4、每次修改用戶設置后都要更新一下虛擬用戶數據庫,不需要重新啟動服務:

       sudo pure-pw mkdb

 

也可以在每次使用 pure-pw的時候加上-m參數立即更新虛擬用戶數據庫。

至此配置完成,這時ftp localhost可以匿名登錄,但虛擬用戶登錄會出現530錯誤。這是因為默認的認證方式中沒有         puredb數據庫,解決方法是在/etc/pure- ftpd/auth下加入puredb 據庫的軟鏈接:

  cd  etc/pure-ftpd/auth

  sudo ln -s ../conf/PureDB 60puredb

 

 

5、重新啟動服務:

  sudo /etc/init.d/pure-ftpd restart