免费注册 查看新帖 |

Chinaunix

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

FreeRadius 在用户掉线时,无法再次拨号 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-07-05 22:32 |只看该作者 |倒序浏览
我设定 FreeRadius 用户同时只能登陆一次。Accouting 也没有问题,但是当用户发生突然掉线的情况下,可能由于FreeRadius 没有更新数据库而造成用户无法再次登录。
我看了一下数据库,FreeRadius是靠判断 radacct表中的acctstoptime字段来判断用户是否在线。如果用户拨入后再未登出之前该字段值为NULL。
不知道大家有什么好的办法来解决此问题?望高手指教。

我分析了一下,想利用 cron 来 运行 mysql 的update名来来把异常掉线的用户数据更新。计算方法为:

单位时间 = 为 NAS 设定更新用户登录信息的时间。在MPD中我设置的是2分钟。即 每两分钟运行一次cron。

判断异常用户:
条件一:acctstoptime 为 NULL;
条件二:用户登录时间 + acctsessiontime (会话时间) < 当前时间 - 单位时间。

符合上述两个条件的记录,即为异常掉线用户。则通过cron能够将登出时间设定为 当前时间 - 单位时间。



但是,由于SHELL很差,又不会 PERL,不知道该怎样写出CRON运行的MYSQL脚本,故请大家帮忙,实现一下这个脚本。
谢谢了。

MYSQL 语句为:
UPDATE radacct SET acctstoptime = FROM_UNIXTIME(UNIX_TIMESTAMP()- 120) WHERE
         ((UNIX_TIMESTAMP(acctstarttime) + acctsessiontime + 120 - UNIX_TIMESTAMP())<0)
        AND acctstoptime = NULL

我该如何将上面这条语句通过/etc/crontab 里的定义没两分钟运行一次呢??

论坛徽章:
0
2 [报告]
发表于 2009-07-06 08:42 |只看该作者
没人理我啊~~

论坛徽章:
0
3 [报告]
发表于 2009-07-20 11:14 |只看该作者
这个主要和NAS有关,NAS不能正确反应用户的状态。我用的PPPoED就没有问题,但要是服务器突然掉电、重启等问题,还是会有这个问题的,那只好删除radacct表中AcctStopTime为0的记录删掉,不过用户会讨些小便宜:wink:

论坛徽章:
0
4 [报告]
发表于 2010-08-23 13:41 |只看该作者
你用的是 freeradius什么版本? 用户信息是在mysql数据库中吗?

论坛徽章:
0
5 [报告]
发表于 2011-10-18 04:53 |只看该作者
不要用那限制单用户查询语句,很难用,
直接给数据库,用户名密码那表里,添加个2字段,比如 online,lasttime (时间)

给ACCTING的时候,开始和更新,把这个字段设定为0,时间为当前时间,STOP离线的时候设online为1,,
给数据库写个时间,判断 lasttime 和当前时间 ,相差几分钟,超过这个时间直接设置为1,,

认证的语句后面加上 ,,online =1 .来判断用户是否在线
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP