<13>bashuser: 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"
- 日志中需要包含登录时间、源IP地址、目的IP地址、登录用户、sessionid这些关键信息的值;
第1条,可以利用unix系统提供的logger命令产生日志,如下为Linux系统下的logger说明:[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)`
- 到此,我们的logger命令如下,我们定义的事件级别是user.notice。
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=\"$$\"
# Add content in /etc/bashrc
# Log bash user login and command history
up_client_ip=`(who am i|cut -d\( -f2|cut -d\) -f1)`
up_nowtime=`(date -d now +”%Y-%m-%d %T”)`
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级别日志发送到日志服务器。以上,就是配置登录日志记录的基本思路,但是在实际环境中,需要考虑很多因素,如下:- 不同shell的用户,启动的配置文件不一样,那么需要配置的文件也不一样,如何选择;
- 通过本地登录的情况,会不会记录日志、格式有没有变化、是否需要排除;
- 获取源IP地址的命令,获取到的IP地址是否为IP格式(有可能是主机名、0.0.0.0或者为空等);
- 用户之间进行su、su -切换时的情况,是否需要记录日志以及是否能正确记录日志;
- crontab定时任务里配置了自动登录情况时的问题;
同时,以上几点都需要在不同的操作系统、不同shell情况下加以变化。我已经总结了HP-UX、Linux、Solaris、AIX、SuSe Linux系统上不同shell(sh、bash、ksh、csh、tcsh)用户的登录以及不同shell用户之间进行su、su -切换时的配置,以下是在各种情况下是否能够按照配置记录登录日志的测试结果,供大家研究:- 每个shell有两个用户1和2(如 bash1\bash2为两个shell为bash的用户);
- shell一栏区分不同shell用户的情况,包括sh、bash、csh、ksh、tcsh;
- 操作一栏均为用户1执行的操作,以bash1用户为例分别为:
- bash1用户使用su bash2命令切换到bash2用户;
- bash1用户使用su - bash2命令切换到bash2用户;
- 是否需要登录日志:标明该种情况是否需要产生登录日志,以bash用户为例,对于上述四种情况分别为:登录(是)、执行bash命令(否)、su bash2切换用户(是)、su -bash2切换用户(是);
- 登录日志是否存在:对应上述“是否需要登录日志”,描述实际测试的结果是否符合预期。
以下表格中标黄的部分即是说明测试结果不符合预期的情况:包含以下两种:- 需要产生登录日志但是测试不能产生登录日志(如Linux ksh环境);
- 不需要产生登录日志但是产生了登录日志(很少见,测试的几个shell只有AIX csh是这样);
以上测试结果使用的操作系统版本和shell版本如下所示: | | | |
| | | | |
| | | GNU bash, version 4.1.9(1) | |
|
| |
| | | GNU bash, version 3.00.16(1) |
|
|
| tcsh 6.12.00 (Astron) 2002-07-23 |
| | | GNU bash, version 3.2.25(1) | | | | tcsh 6.14.00 (Astron) 2005-03-25 |
| | | GNU bash, version 3.2.16(1) |
|
|
|
|
| | | GNU bash, version 3.2.39(1) | | | | tcsh 6.15.00 (Astron) 2007-03-03 |
以上讲的是如何产生我们需要的登录日志,但是在实际项目操作中,需要根据实际情况进行不同的选择,以下为需要考虑的一些点:- 综合考虑系统的syslog配置,定义合适的facility和severity,文中我们定义的是user.notice。
- 选择合适的启动文件,如对bash来说,这些启动文件/etc/profile、/etc/bashrc、~/.bash_profile、~/.bash_login、~/.profile如何选择,是需要考虑的。这也是为什么在上面测试过程中我们要测试用户登录过程、执行bash命令、执行su、su -命令这些场景,必须清楚在这些过程中执行的启动文件顺序。
- 遇到最多的问题是获取源IP地址的问题,需要根据实际情况灵活变化。
以上各操作系统下各个shell环境下的配置均有完善的文档,感兴趣的朋友可以联系我。
文章来源: https://mp.weixin.qq.com/s?__biz=MzI5NzAzMDg0NA==&mid=2650697974&idx=1&sn=4b58e975a2b639897c2eab00c6c62bdf&chksm=f4b19525c3c61c339e9bc94e4abe26a6b787dcda870e98dd0af5827f3544656934caad5cda48&scene=58&subscene=0#rd
如有侵权请联系:admin#unsafe.sh