Unix系统记录用户登录及操作日志配置——登录日志配置思路
2020-5-28 15:52:41 Author: mp.weixin.qq.com(查看原文) 阅读量:3 收藏

Unix系统用户登录、操作命令日志配置方法-引言一文中,已经格式化了登录日志,如下:
<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"
  1. 在每次用户登录时产生日志;
  2. 日志中需要包含登录时间、源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)`
  • 目的IP:直接写主机IP,可以不用命令获取;
  • 登录用户:命令whoami的值;
  • sessionid:变量$$的值;
    到此,我们的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=\"$$\"
将完整内容加到/etc/bashrc文件末尾:
# Add content in  /etc/bashrc# Log bash user  login and command historyup_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级别日志发送到日志服务器。
以上,就是配置登录日志记录的基本思路,但是在实际环境中,需要考虑很多因素,如下:
  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为bash的用户);
  • shell一栏区分不同shell用户的情况,包括sh、bash、csh、ksh、tcsh;
  • 操作一栏均为用户1执行的操作,以bash1用户为例分别为:
    • bash1用户登录系统;
    • bash1用户执行bash命令;
    • bash1用户使用su bash2命令切换到bash2用户;
    • bash1用户使用su - bash2命令切换到bash2用户;
  • 是否需要登录日志:标明该种情况是否需要产生登录日志,以bash用户为例,对于上述四种情况分别为:登录(是)、执行bash命令(否)、su bash2切换用户(是)、su -bash2切换用户(是);
  • 登录日志是否存在:对应上述“是否需要登录日志”,描述实际测试的结果是否符合预期。
以下表格中标黄的部分即是说明测试结果不符合预期的情况:包含以下两种:
  • 需要产生登录日志但是测试不能产生登录日志(如Linux ksh环境);
  • 不需要产生登录日志但是产生了登录日志(很少见,测试的几个shell只有AIX csh是这样);
以下为在各个系统上测试的最终结果,供大家参考:
以上测试结果使用的操作系统版本和shell版本如下所示:
表格1 系统及shell版本
序号
主机类型
系统版本
shell
bash
sh
ksh
csh
tcsh
1.    
HP-UX
B.11.31
GNU bash, version 4.1.9(1)
POSIX .2


2.    
Solaris
5.9
5.10
GNU bash, version 3.00.16(1)



tcsh 6.12.00 (Astron) 2002-07-23
3.    
Redhat Linux
5.4
GNU bash, version 3.2.25(1)
bash
93s+ 2008-01-31
tcsh
tcsh 6.14.00 (Astron) 2005-03-25
4.    
AIX
6.1
5.3
GNU bash, version 3.2.16(1)




5.    
SUSE Linux
11
GNU bash, version 3.2.39(1)
bash
93s+ 2008-01-31
tcsh
tcsh 6.15.00 (Astron) 2007-03-03
各操作系统用户登录日志测试结果如下:
表格2  登录日志测试结果
序号
主机类型
系统版本
shell
bash
sh
ksh
csh
tcsh
1.    
HP-UX
B.11.31
YES
YES
YES
YES
2.    
Solaris
5.95.10
YES
YES
YES
YES
YES
3.    
Redhat Linux
5.4
YES
YES
YES
YES
YES
4.    
AIX
6.15.3
YES
YES
YES
YES
5.    
SUSE Linux
11
YES
YES
YES
YES
YES

以上讲的是如何产生我们需要的登录日志,但是在实际项目操作中,需要根据实际情况进行不同的选择,以下为需要考虑的一些点:
  • 综合考虑系统的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