Linux RADIUS日志

时间:2017-07-25 06:12:11

标签: linux bash shell authentication centos

我有一个名为Radius的程序,用于验证用户登录。它在CentOS服务器上运行

日志位于/var/log/radius.log

他们如下

Mon Jul 24 22:17:08 2017 : Auth: Login incorrect: [faaiz.aleem] (from client PTCL-VPN port 28 cli 116.213.34.97) DeviceIP: 192.168.30.101
Mon Jul 24 23:32:41 2017 : Auth: Login OK: [muhammad.razzaq] (from client PTCL-VPN port 29 cli 45.116.233.62) DeviceIP: 192.168.30.101
Tue Jul 25 03:06:08 2017 : Auth: Login OK: [sadiq.akhter] (from client devices port 1 cli 192.168.141.1) DeviceIP: 1.8.3.11
Tue Jul 25 03:07:54 2017 : Auth: Login OK: [sadiq.akhter] (from client devices port 1 cli 10.88.33.2) DeviceIP: 1.6.16.1
Tue Jul 25 09:44:39 2017 : Auth: Login incorrect: [shariq.iqbal] (from client devices port 1 cli 10.10.10.173) DeviceIP: 1.6.10.11

现在我想为每个用户排序,例如对于他们上次登录时的sadiq.akhter。请建议一个好的bash脚本或Linux命令来执行此操作。我会感激你的。

1 个答案:

答案 0 :(得分:0)

快速解决方案,只获取具有已定义用户的行(并写入文件):

grep "USERNAME" /var/log/radius.log > log_for_user.log

从grep获得的最后一行应该是最后一次登录记录。

您可以使用 tac 以相反的顺序打印日志文件,并使用“grep -m1 ..”只获得一个(最后一个)匹配项。

返回日志中USERNAME的最后一行:

tac /var/log/radius.log | grep -m1 "USERNAME"

因此,在shell脚本中,它看起来像这样,向所有用户返回所有最近的条目:

#!/bin/bash
for i in `cat USERLIST`
do
    tac LOGFILE | grep -m1 $i
done

其中 USERLIST 是一个文件,列出所有用户名,由换行符分隔, LOGFILE 是您的半径日志文件。