LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
12
返回列表 发新帖
楼主: hhl00

关于Proftpd+Mysql+磁盘限额的问题

[复制链接]
 楼主| 发表于 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
发表于 2004-7-28 22:52:26 | 显示全部楼层
很详细的配置,偶拿去参考下哈
两个表,一个表是proftp自己更新的,一个是阀值。如果更新表里的值>=阀值那么就不能传文件了
发表于 2004-7-29 07:57:40 | 显示全部楼层
俺最讨厌MYSQL,又复杂又麻烦 :!!
 楼主| 发表于 2004-7-29 12:50:36 | 显示全部楼层
给给建议吧!
 楼主| 发表于 2004-7-29 16:22:59 | 显示全部楼层
关于无法记录使用情况的问题解决了,只要将per_session设置为false就行了。
继续努力!
不过,新问题又来了,当我删除文件时,ftpquotatallies表的文件控制内容出现了严重的错误,如下:值变得好大啊!
(3, 'test', 'user', '0', '0', '0', 4294967295, 0, 4294967295)
兄弟们,有没有出现过这种问题。
 楼主| 发表于 2004-7-30 17:05:17 | 显示全部楼层
就快成功了,大家再关心一下嘛!
发表于 2005-3-17 14:18:56 | 显示全部楼层
l楼主,能否把你的使用经验总结一下。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表