Chinaunix首页 | 论坛 | 博客
  • 博客访问: 23488
  • 博文数量: 7
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 68
  • 用 户 组: 普通用户
  • 注册时间: 2014-02-20 12:06
文章分类
文章存档

2014年(7)

我的朋友

分类: 网络与安全

2014-02-20 13:05:42

Unix系统用户登录、操作命令日志配置方法-引言一文中,已经格式化了登录日志,如下:

<13>bashuser: class="HOST_LOGIN" type="2" time="2011-06-29 10:44:03" src_ip="192.168.14.83" dst_ip="192.168.99.243" primary_user="" secondary_user="bashuser" operation="" content="login successful" authen_status="Success" log_level="1" sessionid="12182"
为了达到用户在每次登录的时候产生我们需要的登录日志,我们需要:
  1. 在每次用户登录时产生日志;
  2. 日志中需要包含登录时间、源IP地址、目的IP地址、登录用户、sessionid这些关键信息的值;

第1条,可以利用unix系统提供的logger命令产生日志,如下为Linux系统下的logger说明:

    

我们可以在系统上进行测试,在命令行输入以下内容:


点击(此处)折叠或打开

  1. [root@RHEL2 ~]# logger -p user.notice "this is a logger test"
    监控日志,可以看到日志被记录在了/var/log/messages下面(默认配置了/etc/syslog.conf)

所以,我们只需要把logger命令放在用户每次登录时必须加载的配置文件里,就可以记录日志了。Linux系统下shell为bash的用户,每 次登录时(login shell)的启动文件有/etc/profile、~/.bash_profile 、~/.bashrc、/etc/bashrc,考虑到要记录每个用户的登录日志以及配置的便捷,可以加到/etc/profile或者/etc /bashrc文件中。我们以加到/etc/bashrc文件为例。


现在我们需要做的是将logger -p user.notice "this is a logger test"中引号的内容替换为我们需要的信息,包括登录时间、源IP地址、目的IP地址、登录用户、sessionid这些关键信息。为了方便引用,我们定义变量:

登录时间:up_nowtime=`(date -d now +"%Y-%m-%d%T")`
源IP地址:up_client_ip=`(who am i|cut -d\( -f2|cut-d\) -f1)`
目的IP:直接写主机IP,可以不用命令获取;
登录用户:命令whoami的值;
sessionid:变量$$的值;
    到此,我们的logger命令如下,我们定义的事件级别是user.notice。

点击(此处)折叠或打开

  1. logger -p user.notice -- class=\"HOST_LOGIN\" type=\"2\" time=\"$up_nowtime\" src_ip=\"$up_client_ip\" dst_ip=\"192.168.56.102\" primary_user=\"\" secondary_user=\"$(whoami)\" operation=\"\" content=\"login successful\" authen_status=\"Success\" log_level=\"1\" session_id=\"$$\"
    将完整内容加到/etc/bashrc文件末尾:

点击(此处)折叠或打开

  1. # Add content in /etc/bashrc
  2. # Log bash user login and command history
  3. up_client_ip=`(who am i|cut -d\( -f2|cut -d\) -f1)`
  4. up_nowtime=`(date -d now +"%Y-%m-%d %T")`
  5. logger -p user.notice -- class=\"HOST_LOGIN\" type=\"2\" time=\"$up_nowtime\" src_ip=\"$up_client_ip\" dst_ip=\"192.168.56.102\" primary_user=\"\" secondary_user=\"$(whoami)\" operation=\"\" content=\"login successful\" authen_status=\"Success\" log_level=\"1\" session_id=\"$$\"
    现在通过ssh、telnet、rlogin登录测试,监控日志文件,可以看到已经成功的将日志记录在了/var/log/messages文件中。    
    

后续,只需要配置/etc/syslog.conf,将user.notice级别日志发送到日志服务器。

以上,就是配置登录日志记录的基本思路,但是在实际环境中,需要考虑很多因素,如下:

  1. 不同shell的用户,启动的配置文件不一样,那么需要配置的文件也不一样,如何选择;
  2. 通过本地登录的情况,会不会记录日志、格式有没有变化、是否需要排除;
  3. 获取源IP地址的命令,获取到的IP地址是否为IP格式(有可能是主机名、0.0.0.0或者为空等);
  4. 用户之间进行su、su -切换时的情况,是否需要记录日志以及是否能正确记录日志;
  5. crontab定时任务里配置了自动登录情况时的问题;

同时,以上三点都需要在不同的操作系统、不同shell情况下加以变化。


我已经总结了HP-UX、Linux、Solaris、AIX、SuSe Linux系统上不同shell(sh、bash、ksh、csh、tcsh)用户的登录以及不同shell用户之间进行su、su -切换时的配置,以下是在各种情况下是否能够按照配置记录登录日志的测试结果,供大家研究:

每个shell有两个用户1和2(如 bash1\bash2),shell一栏区分不同shell用户的情况,操作一栏均为用户1执行的操作,以bash为例分别为:bash1用户登录、 bash1用户执行bash命令、bash1用户su bahs2、bash1用户su - bash2。标黄部分是说需要登录日志但是不能记录日志的情况。
    
    
    
    
     
    从以上表可以看出,SuSe Linux系统是完全符合的。

阅读(3379) | 评论(2) | 转发(0) |
给主人留下些什么吧!~~

three_body2014-03-11 18:13:36

CU博客助理:专家点评:比较巧妙的利用几个变量及logger的使用方法来确定用户登录的一些信息,仅在安全方面的初步判断有一定的效果。主要有一处不太方便的地方是 “目的IP:直接写主机IP,可以不用命令获取;” 这个地方。因为如果是批量部署的话还是写个变量极为方便。否则一个个的改,在服务器很多的情况下还是很费时费力的。
另外有一种记录及回放自从登录后所有命令的工作,可以介绍下。(感谢您参与“原创博文评选”获奖结果即将公布)

感谢回复。
目的IP同样是可以通过命令来获取的,为什么没有写主要是需要考虑多IP的情况下。在实施过程中出现问题最多的点在源IP的获取以及登录方式不同、系统有没有做过加过带来的影响。实际成熟的配置方法远比这为复杂,但是基本思路已经清楚了。

操作命令的记录也已经有完整的内容,后面我会再写出来。

回复 | 举报

CU博客助理2014-03-10 16:24:01

专家点评:比较巧妙的利用几个变量及logger的使用方法来确定用户登录的一些信息,仅在安全方面的初步判断有一定的效果。主要有一处不太方便的地方是 “目的IP:直接写主机IP,可以不用命令获取;” 这个地方。因为如果是批量部署的话还是写个变量极为方便。否则一个个的改,在服务器很多的情况下还是很费时费力的。
另外有一种记录及回放自从登录后所有命令的工作,可以介绍下。(感谢您参与“原创博文评选”获奖结果即将公布)