使用Pureftpd進行FTP權限和磁盤配額管理
Pureftpd是一款快速,高質量,功能齊全的ftp服務器,最重要的是可以支持設置客戶端默認編碼,那如何使用Pureftpd進行FTP權限和磁盤配額管理,看下文。
我們選用Pure-ftpd作為工具.
安裝
Pure-ftpd是一個成熟的ftp工具,apt-get已經(jīng)有打好的包了.我們直接通過apt-get就能很方便的安裝.
apt-get install pure-ftpd-mysql
配置
在數(shù)據(jù)庫里邊建一個庫,這里用之前的hosting數(shù)據(jù)庫.用以下語句創(chuàng)建一張表:
CREATE TABLE users(
User varchar(16) NOT NULL default '',
status enum('0','1') NOT NULL default '0',
Password varchar(64) NOT NULL default '',
Uid varchar(11) NOT NULL default '-1',
Gid varchar(11) NOT NULL default '-1',
Dir varchar(128) NOT NULL default '',
ULBandwidth smallint(5) NOT NULL default '0',
DLBandwidth smallint(5) NOT NULL default '0',
comment tinytext NOT NULL,
ipaccess varchar(15) NOT NULL default '*',
QuotaSize smallint(5) NOT NULL default '0',
QuotaFiles int(11) NOT NULL default 0,
PRIMARY KEY (User),
UNIQUE KEY User (User)
) TYPE=MyISAM;
這張表將用來存放ftp用戶的相關信息.
然后我們需要修改pure-ftpd-mysql的配置文件,告訴pure-ftpd數(shù)據(jù)庫的相關信息.
這里假設大家已經(jīng)配置好了mysql,并有一個可用的賬號.
vim /etc/pure-ftpd/db/mysql.conf
放入以下配置
#賬號信息 按自己情況修改
MYSQLServer 127.0.0.1
MYSQLPort 3306
MYSQLSocket /var/run/mysqld/mysqld.sock
MYSQLUser easy
MYSQLPassword ******
MYSQLDatabase hosting
#加密方式
MYSQLCrypt md5
#取得數(shù)據(jù)的SQL語句
#用戶授權
MYSQLGetPW SELECT Password FROM users WHERE User="\L"
MYSQLGetUID SELECT Uid FROM users WHERE User="\L"
MYSQLGetGID SELECT Gid FROM users WHERE User="\L"
MYSQLGetDir SELECT Dir FROM users WHERE User="\L"
#文件大小和個數(shù)限制
MySQLGetQTAFS SELECT QuotaFiles FROM users WHERE User="\L"
MySQLGetQTASZ SELECT QuotaSize FROM users WHERE User="\L"
#上行和下行帶寬限制
MySQLGetBandwidthUL SELECT ULBandwidth FROM users WHERE User="\L"
MySQLGetBandwidthDL SELECT DLBandwidth FROM users WHERE User="\L"
這樣pure-ftpd就知道如何從mysql里邊取數(shù)據(jù)了.
為了得到上邊出現(xiàn)的GID和UID,我們需要為ftp創(chuàng)建一個虛擬賬號.FTP的全部用戶共用這一個虛擬賬號的UID和GID,而不需要為每個FTP用戶創(chuàng)建系統(tǒng)用戶.
groupadd -g 2001 ftpgroup
useradd -u 2001 -s /bin/false -d /bin/null -c "pureftpd user" -g ftpgroup ftpuser
我們創(chuàng)建了GID為2001的ftpgroup組和UID為2001的ftpuser用戶.現(xiàn)在可以往數(shù)據(jù)表中添加數(shù)據(jù)了.QuotaSize的單位是M,目錄指向我們在mod-myvhost同樣的路徑.
然后我們將用戶鎖定在他自己的目錄下,不允許他通過ftp訪問到別人的目錄:
echo yes > /etc/pure-ftpd/conf/ChrootEveryone
當指定目錄不存在時,自動創(chuàng)建目錄
echo yes > /etc/pure-ftpd/conf/CreateHomeDir
設置完成.重啟pure-ftpd.
/etc/init.d/pure-ftpd-mysql restart
全部配置都完成了.我們上傳文件試試.
登陸成功,上傳文件提示沒權限.這是因為/data0/myapphost的屬性設定造成的.將整個目錄改為ftpuser的就可以了
chown -R ftpuser:ftpgroup /data0/myapphost
修改屬性后,已經(jīng)可以上傳文件了.試試配額限制:
錯誤:> [2010-1-27 22:47:12] 無法寫入數(shù)據(jù) socket。Socket 錯誤 = #10054。
[2010-1-27 22:47:12] 550-Quota exceeded: abc.zip won't be saved
550-6 files used (120%) - authorized: 5 files
550 6974 Kbytes used (681%) - authorized: 1024 Kb
錯誤:> [2010-1-27 22:47:12] 請求的操作未執(zhí)行(如,文件或目錄未找到,不能訪問)。
錯誤:> [2010-1-27 22:47:43] 無法寫入數(shù)據(jù) socket。Socket 錯誤 = #10054。
[2010-1-27 22:47:43] 550-Quota exceeded: abc.zip won't be saved
550-4 files used (80%) - authorized: 5 files
550 3954 Kbytes used (386%) - authorized: 1024 Kb
錯誤:> [2010-1-27 22:47:43] 請求的操作未執(zhí)行(如,文件或目錄未找到,不能訪問)。
從錯誤信息可以看出,配額已經(jīng)生效了.當配置修改后,已經(jīng)登錄的ftp用戶需要重新登陸后才會生效.
小結
到這里為止,我們已經(jīng)完成了一個單服務器的應用管理平臺的基本功能.再添加一個用于申請應用和開通賬號的web管理前端,整個平臺即可投入使用了.
通過文章的介紹和分析,我們清楚的了解到使用Pureftpd進行FTP權限和磁盤配額管理的具體方法,希望本文對大家有所幫助!
【編輯推薦】