|

楼主 |
发表于 2004-7-28 17:20:08
|
显示全部楼层
按照eTony兄弟提供的数据表重新弄一次,发现确实能用。今天琢磨了半天,找出了我原来不能用的原因,就是必须在ftpquotatallies表中添加对应于ftpquotalimits表中的用户的记录,才能正常登录。不过问题也出来,按照作者的意思,ftpquotatallies表中的记录应该是由系统自动创建的,并根据实际情况自动修改的。我今天测试了一下,系统无法自动修改ftpquotatallies中记录的值,例如,我限制test用户最多只能传10个文件,处于连接状态生效,但是我重新登录后,仍旧可以继续传文件,而且还是10个,也就是不能记录信息到ftpquotatallies表中去。不知兄弟们有没有出现这个问题,以下是我的表和配置文件内容,不知是否有错:
DROP TABLE IF EXISTS `ftpgroup`;
CREATE TABLE `ftpgroup` (
`id` int(11) unsigned NOT NULL auto_increment,
`groupname` varchar(16) NOT NULL default '',
`gid` smallint(6) NOT NULL default '5500',
`members` text NOT NULL,
PRIMARY KEY (`id`),
KEY `groupname` (`groupname`)
) TYPE=MyISAM COMMENT='ProFTP group table' AUTO_INCREMENT=2 ;
#
# 导出表中的数据 `ftpgroup`
#
INSERT INTO `ftpgroup` VALUES (1, 'ftpgroup', 5500, 'ftpuser');
# --------------------------------------------------------
#
# 表的结构 `ftpquotalimits`
#
DROP TABLE IF EXISTS `ftpquotalimits`;
CREATE TABLE `ftpquotalimits` (
`id` int(11) unsigned NOT NULL auto_increment,
`name` varchar(30) default NULL,
`quota_type` enum('user','group','class','all') NOT NULL default 'user',
`per_session` enum('false','true') NOT NULL default 'false',
`limit_type` enum('soft','hard') NOT NULL default 'soft',
`bytes_in_avail` float NOT NULL default '0',
`bytes_out_avail` float NOT NULL default '0',
`bytes_xfer_avail` float NOT NULL default '0',
`files_in_avail` int(10) unsigned NOT NULL default '0',
`files_out_avail` int(10) unsigned NOT NULL default '0',
`files_xfer_avail` int(10) unsigned NOT NULL default '0',
PRIMARY KEY (`id`)
) TYPE=MyISAM AUTO_INCREMENT=2 ;
#
# 导出表中的数据 `ftpquotalimits`
#
INSERT INTO `ftpquotalimits` VALUES (1, 'ftpuser', 'user', 'true', 'hard', '1.024e+06', '1.024e+06', '2.048e+06', 10, 10, 20);
# --------------------------------------------------------
#
# 表的结构 `ftpquotatallies`
#
DROP TABLE IF EXISTS `ftpquotatallies`;
CREATE TABLE `ftpquotatallies` (
`id` int(11) unsigned NOT NULL auto_increment,
`name` varchar(30) NOT NULL default '',
`quota_type` enum('user','group','class','all') NOT NULL default 'user',
`bytes_in_used` float NOT NULL default '0',
`bytes_out_used` float NOT NULL default '0',
`bytes_xfer_used` float NOT NULL default '0',
`files_in_used` int(10) unsigned NOT NULL default '0',
`files_out_used` int(10) unsigned NOT NULL default '0',
`files_xfer_used` int(10) unsigned NOT NULL default '0',
PRIMARY KEY (`id`)
) TYPE=MyISAM AUTO_INCREMENT=2 ;
#
# 导出表中的数据 `ftpquotatallies`
#
INSERT INTO `ftpquotatallies` VALUES (1, 'ftpuser', 'user', '1.024e+06', '1.024e+06', '2.048e+06', 20, 20, 40);
# --------------------------------------------------------
#
# 表的结构 `ftpuser`
#
DROP TABLE IF EXISTS `ftpuser`;
CREATE TABLE `ftpuser` (
`id` int(10) unsigned NOT NULL auto_increment,
`userid` varchar(32) NOT NULL default '',
`passwd` varchar(32) NOT NULL default '',
`uid` smallint(6) NOT NULL default '5500',
`gid` smallint(6) NOT NULL default '5500',
`homedir` varchar(255) NOT NULL default '',
`shell` varchar(16) NOT NULL default '/sbin/nologin',
`count` int(11) NOT NULL default '0',
`accessed` datetime NOT NULL default '0000-00-00 00:00:00',
`modified` datetime NOT NULL default '0000-00-00 00:00:00',
PRIMARY KEY (`id`)
) TYPE=MyISAM COMMENT='ProFTP user table' AUTO_INCREMENT=2 ;
#
# 导出表中的数据 `ftpuser`
#
INSERT INTO `ftpuser` VALUES (1, 'ftpuser', 'ftppasswd', 5500, 5500, '/ftp/ftpuser', '/sbin/nologin', 11, '2004-07-28 01:04:29', '2004-07-28 01:05:30');
配置文件内容:
ServerName "Superdream FTP Server"
ServerType standalone
DefaultServer on
Port 21
Umask 022
MaxInstances 30
MaxLoginAttempts 3
User nobody
Group nobody
MaxHostsPerUser 1 "对不起,每个帐号最多允许来源ip为1个"
MaxClientsPerUser 2 "对不起,每个帐号在每个客户端最多可以同时登录1次"
MaxClientsPerHost 3 "对不起,同一个客户端只能最多1个帐号可以登录"
RootLogin off
RequireValidShell off
TimeoutStalled 10
MaxClients 10
AllowForeignAddress on
AllowStoreRestart on
ServerIdent off
DefaultRoot ~ ftpgroup
#DefaultRoot ~ ftpuser
SystemLog /usr/local/proftpd/logs/ftp.log
TransferLog /usr/local/proftpd/logs/ftp.transfer.log
AllowRetrieveRestart on
AllowStoreRestart on
#For quota configure
QuotaDirectoryTally on
QuotaDisplayUnits Mb
QuotaEngine on
QuotaLog /usr/local/proftpd/logs/Quota.log
QuotaShowQuotas on
#SQLDefaultGID 5500
#SQLDefaultUID 5500
SQLConnectInfo ftpdb@localhost proftpd 123456
SQLAuthTypes Backend Plaintext
SQLUserInfo ftpuser userid passwd uid gid homedir shell
SQLGroupInfo ftpgroup groupname gid members
SQLAuthenticate users* groups*
SQLHomedirOnDemand on
SQLLog PASS updatecount
SQLNamedQuery updatecount update "count=count+1,accessed=now() where userid='%u'" ftpuser
SQLLog STOR,DELE modified
SQLNamedQuery modified update "modified=now() where userid='%u'" ftpuser
SQLNamedQuery get-quota-limit select "name, quota_type, per_session, limit_type, bytes_in_avail, bytes_out_avail, bytes_xfer_avail, files_in_avail, files_out_avail, files_xfer_avail from ftpquotalimits where name='%{0}' and quota_type='%{1}'"
SQLNamedQuery get-quota-tally select "name, quota_type, bytes_in_used, bytes_out_used, bytes_xfer_used, files_in_used, files_out_used, files_xfer_used from ftpquotatallies where name='%{0}' and quota_type='%{1}'"
SQLNamedQuery update-quota-tally update "bytes_in_used = bytes_in_used + %{0}, bytes_out_used = bytes_out_used + %{1}, bytes_xfer_used = bytes_xfer_used + %{2}, files_in_used = files_in_used + %{3}, files_out_used = files_out_used + %{4}, files_xfer_used = files_xfer_used + %{5} where name='%{6}' and quota_type='%{7}'" ftpquotatallies
SQLNamedQuery insert-quota-tally insert "'%{0}','%{1}','%{2}','%{3}','%{4}','%{5}','%{6}','%{7}'" ftpquotatallies
QuotaLimitTable sql:/get-quota-limit
QuotaTallyTable sql:/get-quota-tally/update-quota-tally/insert-quota-tally |
|