免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 3525 | 回复: 11
打印 上一主题 下一主题

[FTP] proftpd1.2.10+mysql的限额问题,大家帮忙找下原因 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2005-07-25 11:42 |只看该作者 |倒序浏览
大家好,我在fedora2上装了proftpd1.2.10+mysql,ftp和mysql的配置都可以了,mysql建的用户也可以登陆,可是在mysql做的账户的限额却没有起作用。就是说比如test账户我限制了10M空间,可是却发现可以上传超过10M的内容,没有任何提示出错或限制的情况。小弟有点郁闷了,大家帮忙给查下是什么原因。
下面是配置文件的内容:
proftpd  -l
Compiled-in modules:
  mod_core.c
  mod_xfer.c
  mod_auth_unix.c
  mod_auth_file.c
  mod_auth.c
  mod_ls.c
  mod_log.c
  mod_site.c
  mod_auth_pam.c
  mod_sql.c
  mod_sql_mysql.c
  mod_quotatab.c
  mod_quotatab_sql.c
  mod_ratio.c
  mod_cap.c

proftpd.conf里面启用限额的内容部分:
# 启用磁盘限额
QuotaDirectoryTally on
# 磁盘限额单位 b"|"Kb"|"Mb"|"Gb"
QuotaDisplayUnits "Kb"
#打开磁盘限额引擎
QuotaEngine on
# 磁盘限额日志记录
QuotaLog "/var/log/quota.log"
# 打开磁盘限额信息,当登陆FTP帐户后,使用命令 "quote SITE QUOTA" 后可显示当前用#户的磁盘限额
QuotaShowQuotas on

mysql里面添加限额的语句:
INSERT INTO ftpquotalimits (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 ) VALUES ( 'test', 'user', 'true', 'soft', '20000000', '0', '0', '0', '0', '0' );

/var/log/quota.log里面的日志:
Jul 23 16:49:56 mod_quotatab/1.2.13[9624]: no quota entry found, turning QuotaEngine off
Jul 23 16:50:45 mod_quotatab/1.2.13[9656]: no quota entry found, turning QuotaEngine off
Jul 23 16:52:48 mod_quotatab/1.2.13[9658]: no quota entry found, turning QuotaEngine off
Jul 25 11:07:01 mod_quotatab/1.2.13[19105]: found limit entry for user 'test'
Jul 25 03:07:01 mod_quotatab/1.2.13[19105]: found tally entry for user 'test'
Jul 25 03:07:01 mod_quotatab/1.2.13[19105]: per session setting in effect: updates will not be tracked in the QuotaTallyTable
Jul 25 11:25:46 mod_quotatab/1.2.13[19305]: found limit entry for user 'test'
Jul 25 03:25:46 mod_quotatab/1.2.13[19305]: found tally entry for user 'test'
Jul 25 03:25:46 mod_quotatab/1.2.13[19305]: per session setting in effect: updates will not be tracked in the QuotaTallyTable
Jul 25 03:38:34 mod_quotatab/1.2.13[19305]: STOR: quota reached: used 30603.98 of 20000.00 upload Kb

论坛徽章:
0
2 [报告]
发表于 2005-07-25 11:52 |只看该作者

proftpd1.2.10+mysql的限额问题,大家帮忙找下原因

日志里面的内容没看明白怎么回事?
为什么会显示QuotaEngine 的是off 呢?

论坛徽章:
0
3 [报告]
发表于 2005-07-25 16:18 |只看该作者

proftpd1.2.10+mysql的限额问题,大家帮忙找下原因

SQLConnectInfo SQLUserInfo SQLAuthTypes 有没有设定?
如果有的话就看看下面的几点了
1、用mysql -uuser -ppasswd 去连接数据库看能不能连接成功(不成功,则mysql的用户授权有问题)
2、home/test目录存在嘛?以及这个目录是属于一个系统用户吗?
3、查看日志了解更多的信息

从你的日志可以看出根本没有这个test这个用户的存在

论坛徽章:
0
4 [报告]
发表于 2005-07-25 17:17 |只看该作者

proftpd1.2.10+mysql的限额问题,大家帮忙找下原因

谢小虎牙兄弟解答。
我现在的情况是,用mysql建立的用户都可以登陆进去。但是没有没有显示限额的作用。
1.SQLConnectInfo SQLUserInfo SQLAuthTypes  是proftpd.conf里面连接数据库的的部分吧?我已经有加入进去了:
SQLConnectInfo proftpdb@localhost 用户 密码。
2.我在phpmyadmin用proftpd.conf里面连接数据库的用户和密码可以登陆看见proftpd数据库的表,是不是就不用你第一条里面的测试了吧?
3.home/test目录是没有的,test的目录我在mysql里面指定到/home/ftp下面,test账号可以登陆也可以写。那目录是不是也没有问题了吧?
4.如果没有test的账号的话我肯定登陆不了的啊。
5.日志里面Jul 23 16:49:56 mod_quotatab/1.2.13[9624]: no quota entry found, turning QuotaEngine off
这句话的意思为什么说turning QuotaEngine off 呢?我在配置文件里面明明是on的啊。

论坛徽章:
0
5 [报告]
发表于 2005-07-25 17:43 |只看该作者

proftpd1.2.10+mysql的限额问题,大家帮忙找下原因

把你的配置文件传上来看看先

论坛徽章:
0
6 [报告]
发表于 2005-07-25 17:48 |只看该作者

proftpd1.2.10+mysql的限额问题,大家帮忙找下原因

日志里面一句挺奇怪的:STOR: quota reached: used 30603.98 of 20000.00 upload Kb
我限制了20M,这里能看出来,可是却显示quota reached,字面意思是延伸空间?

我看了以前的日志记录,发现有一条
STOR denied: quota exceeded: used 129.31 of 97.66 upload Kb
这里的意思是限制生效了对吧?

因为以前限额是可以用的,这个机器有好几个人都有权限,不知道他们改了什么。

论坛徽章:
0
7 [报告]
发表于 2005-07-25 17:55 |只看该作者

proftpd1.2.10+mysql的限额问题,大家帮忙找下原因

# this is a basic ProFTPD configuration file (rename it to  
# 'proftpd.conf' for actual use. It establishes a single server  
# and a single anonymous login. It assumes that you have a user/group  
# "nobody" and "ftp" for normal operation and anon.  

ServerName &! quotublic FTP Server"  
ServerType standalone
DefaultServer on  

# Port 21 is the standard FTP port.  
Port 21  
# Umask 022 is a good standard umask to prevent new dirs and files  
# from being group and world writable.  
Umask 022  

# To prevent DoS attacks, set the maximum number of child processes  
# to 30. If you need to allow more than 30 concurrent connections  
# at once, simply increase this value. Note that this ONLY works  
# in standalone mode, in inetd mode you should use an inetd server  
# that allows you to&! nbsp;limit maximum number of processes per&nb sp;service  
# (such as xinetd)  
MaxInstances 200

# 设置如果shell为空时允许用户登录
RequireValidShell off  
# 用户登陆时不显示ftp服务器版本信息
ServerIdent off  


# Set the user and group that the server normally runs at.  
User nobody
Group nobody

# Normally, we want files to be overwriteable.  
<Directory /*>;  
AllowOverwrite on  
</Directory>;  

#禁止匿名登陆
# A basic anonymous configuration, no upload directories.  
#<Anonymous /home/ftp>;  
#User ftp  
#Group ftp  
# We want clients to be able to login with "anonymous" as well as "ftp"  
#UserAlias anonymous ftp  
# Limit the maximum number of anonymous logins  
#MaxClients 10  
# We ! ;want 'welcome.msg' displayed at login, and '.message' displayed  
# in each newly chdired directory.  
#DisplayLogin welcome.msg  
#DisplayFirstChdir .message  
# Limit WRITE everywhere in the anonymous chroot  
#<Limit WRITE>;  
#DenyAll  
#</Limit>;  
#</Anonymous>;
  
<Global>;
AllowRetrieveRestart on
AllowStoreRestart on
MaxClients 20 "对不起,已达到当前客户端最大登陆数20人"
MaxClientsPerHost 3 "您好!每个IP只允许3个进程同时登录!"
AllowForeignAddress on
</Global>;
UseReverseDNS off
# 将用户限制在自己的主目录下
DefaultRoot ~
# 允许root登录
RootLogin on
#设置系统日志文件:
SystemLog /usr/log/proftpd/ftp.syslog
#设置记录文件传输的日志文件:
TransferLog /usr/log/proftpd/ftp.transferlog
#设置断点继传
AllowRetrieveRestart on
#显示登录的信息
DisplayLogin welcome.msg
#限制用户速度
TransferRate RETR 50 user test



# 数据库联接的信息,proftpdb是数据库名,localhost是主机名,proftpd是连接数据库的用户名,
#SQLConnectInfo     ftpusers@MySQL服务器名 username password
#proftpdb是密码
#(如果没有密码留空)
SQLConnectInfo proftpdb@localhost proftpd 123456
# 数据库认证的类型
SQLAuthTypes Backend Plaintext
# 数据库的鉴别
SQLAuthenticate users* groups*
# 指定用来做用户认证的表的有关信息。
SQLUserInfo ftpuser userid passwd uid gid homedir shell
SQLGroupInfo ftpgroup groupname gid members
# 如果home目录不存在,则系统会根据它的home项新建一个目录
SQLHomedirOnDemand on
#这是目录所有者,我觉得这个很重要。所以我用nobody来做,在此我的nobody为99.
SQLDefaultGID        99
SQLDefaultUID        99

SQLLog PASS updatecount
SQLNamedQuery updatecount UPDATE "count=count+1,accessed=now() WHERE userid='%u'" ftpuser
# Update modified everytime user uploads or deletes a file
SQLLog STOR,DELE modified
SQLNamedQuery modified UPDATE "modified=now() WHERE userid='%u'" ftpuser

# 启用磁盘限额
QuotaDirectoryTally on
# 磁盘限额单位 b"|"Kb"|"Mb"|"Gb"
QuotaDisplayUnits "Kb"
#打开磁盘限额引擎
QuotaEngine on
# 磁盘限额日志记录
QuotaLog "/var/log/quota.log"
# 打开磁盘限额信息,当登陆FTP帐户后,使用命令 "quote SITE QUOTA" 后可显示当前用#户的磁盘限额
QuotaShowQuotas on
#以下为sql语句:
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

论坛徽章:
0
8 [报告]
发表于 2005-07-26 07:29 |只看该作者

proftpd1.2.10+mysql的限额问题,大家帮忙找下原因

看来配置文件上面也没有看出有什么问题

你有安装webmin嘛我觉得在哪里会容易找出原因的

我觉得你用nobody这个用户身份会不会有点不妥
SQLDefaultGID        99
SQLDefaultUID        99
我想你把这个换成另外一个系统用户身份另外让test指向这个系统用户登陆

test只是一个虚拟的一个用户身份要想让它登陆必须要让它以一个系统用户的身份才可以

论坛徽章:
0
9 [报告]
发表于 2005-07-26 07:42 |只看该作者

proftpd1.2.10+mysql的限额问题,大家帮忙找下原因

也就是说在你的mysql上面虚拟的这个test用户所对应的UID GID homdir必须和你指定的系统用户是一一对应的

论坛徽章:
0
10 [报告]
发表于 2005-07-26 11:15 |只看该作者

proftpd1.2.10+mysql的限额问题,大家帮忙找下原因

nobody应该也算是系统的用户吧,我就是不知道
SQLDefaultGID        99
SQLDefaultUID        99
这理用什么系统用户作为ftp的用户比较好?ftp的配置我是依据网上一些文章给配的。

昨天晚上折腾了半天,终于弄清楚了是因为什么问题引起的,在此述说一下,不过我还是没有完全弄明白那个表里字段的含意,但是我的服务器限额不起作用肯定是那里的问题。
我的proftpdb共有四个表ftpgroup、ftpquotalimits、ftpquotatallies、ftpuser,跟限额有关是ftpquotalimits和ftpquotatallies表。
在ftpquotalimits表中per_session和limit_type 两个字段,可以调节限额空间的属性。好像hard要比soft限制的严格,限制的空间和实际使用空间的差额比较少。true和false没搞明白什么意思。。。清楚给说下。

还有一个ftpquotatallies表,这个表是自动记录通过ftp账号使用磁盘状况的。而且它也只对ftp账号做的操作有记录。如果是在后台做的增加删除是没有记录的,也就是说:test有10M的限额,如果只是通过ftp来操作上传10M的内容它就会自动在bytes_in_used字段中记录,用户空间的限额就是根据这个字段来判别的。但是如果上传了10M内容,却在后台删除了文件。这个字段是不会改变的,即使test通过ftp登陆看空间没有任何东西,却也是不能上传的。所以切记不能在后台做ftp账号空间的增删。这样的话空间限额就不准确了,如果确定要增删,也要记得在bytes_in_used字段中手动加上账号空间使用数量。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP