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”.
關於基本的參數配置:
-
ClientCharset=gbk #必設,防止Windows登錄出現中文亂碼
-
DontResolve=yes #不解析域名,可以節省登錄時間
-
BrokenClientsCompatibility=yes #兼容IE等非標准FTP client
-
ChrootEveryone=yes #把所有用戶限制在其homedir下
-
KeepAllFiles=yes #禁止用戶刪除文件,TrustedGID組中的除外
-
TrustedGID=1001 #管理員組ftpadmins的GID,允許管理員刪除文件
-
CreateHomeDir=yes #當虛擬用戶第一次登錄時,自動創建homedir
-
MaxClientsPerIP=2 #每個IP限制2個連接
-
MaxClientsNumber=20 #最大並發連接數,默認值是50
-
MaxDiskUsage=90 #分區已使用空間超過90%時不再接受上傳
-
NoAnonymous=no #允許匿名登錄
-
Bind=8821 #改變端口號
-
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
