Pureftpd是一款快速,高品質,功能齊全的ftp伺服器,最重要的是可以支援設定用戶端預設編碼,那如何使用Pureftpd進行FTP許可權和磁碟配額管理,看下文。
我們選用Pure-ftpd作為工具.
安裝
Pure-ftpd是一個成熟的ftp工具,apt-get已經有打好的包了.我們直接通過apt-get就能很方便的安裝.
apt-get install pure-ftpd-mysql
配置
在資料庫裡邊建一個庫,這裡用之前的hosting資料庫.用以下語句建立一張表:
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資料庫的相關資訊.
這裡假設大家已經配置好了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
#取得資料的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"
#檔案大小和個數限制
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裡邊取資料了.
為了得到上邊出現的GID和UID,我們需要為ftp建立一個虛擬帳號.FTP的全部使用者共用這一個虛擬帳號的UID和GID,而不需要為每個FTP使用者建立系統使用者.
groupadd -g 2001 ftpgroup
useradd -u 2001 -s /bin/false -d /bin/null -c "pureftpd user" -g ftpgroup ftpuser
我們建立了GID為2001的ftpgroup組和UID為2001的ftpuser使用者.現在可以往資料表中添加資料了.QuotaSize的單位是M,目錄指向我們在mod-myvhost同樣的路徑.
然後我們將使用者鎖定在他自己的目錄下,不允許他通過ftp訪問到別人的目錄:
echo yes > /etc/pure-ftpd/conf/ChrootEveryone
當指定目錄不存在時,自動建立目錄
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
修改屬性後,已經可以上傳檔案了.試試配額限制:
錯誤:> [2010-1-27 22:47:12] 無法寫入資料 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] 請求的操作未執行(如,檔案或目錄未找到,不能訪問)。
錯誤:> [2010-1-27 22:47:43] 無法寫入資料 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] 請求的操作未執行(如,檔案或目錄未找到,不能訪問)。
從錯誤資訊可以看出,配額已經生效了.當配置修改後,已經登入的ftp使用者需要重新登陸後才會生效.
小結
到這裡為止,我們已經完成了一個單伺服器的應用管理平台的準系統.再添加一個用於申請應用和開通帳號的web管理前端,整個平台即可投入使用了.
通過文章的介紹和分析,我們清楚的瞭解到使用Pureftpd進行FTP許可權和磁碟配額管理的具體方法,希望本文對大家有所協助!