Linux Linux

Linux系统上记录用户操作的审计日志

2021-05-05  本文已影响0人  刘小白DOER

        在linux系统上,可以通过命令history来查看历史命令,但是history命令只针对登录用户下执行有效,无法获取其他用户的history历史历史操作命令。在生产系统上,为了监测系统的安全性,当用户登录/退出会创建相应的文件,该文件保存这段用户登录时期内操作历史,方便审计。

        脚本代码是利用全局环境变量的设置来实现的,当用户登录/退出会执行环境变量的脚本( 下文的all_history.sh),会创建相应的文件记录历史操作命令。关于环境变量变量的设置的更多信息,请参考笔者自己的文章—Linux环境变量的设置

        已下日志脚本代码是基于简友的文章—Linux 查看所有登录用户的操作历史命令。此文章里面是将下面的脚本内容放置于/etc/profile文件中,但是为了方便管理,笔者放置于/etc/profile.d目录下,因为目录下的所有文件会被sourced ,在 /etc/profile中有代码定义。为了方便管理,自己在HISTFILE后面加了.log  ,其他代码未修改 。

        loginlog日志有了,长时间的运行就会积累很多过期的日志,这就需要定时清理过期日志文件。

        笔者将delete_loginlog.sh置于/etc/cron.weekly目录下,每周执行一次这个脚本。当然定时任务也有其他写法,详情参考笔者的文章-Linux crontab定时任务详细分解

        在/var/log/cron日志文件记录了delete_loginlog.sh定时任务的执行情况。

     如果为了节约磁盘空间,也可以将.log文件压缩打包,默认gzip 会删除源文件,并生成xx.gz文件。更多请请参考笔者的文章-让Linux系统保持活力的优化脚本。    

        find /opt/loginlog/  -name '*.log' -exec gzip -f {} \;

    然后再删除过期30天的.gz文件。看需求可以将上下的两个压缩命令和删除gz文件的命令置于不同的周期来执行。

        delete_time=30

        find /opt/loginlog/ -mtime +$delete_time -name '*.gz' -exec rm -r {} \;

    最后看一下笔者在阿里云服务器上测试。log文件的时间是用户登陆后的时间,也是 /etc/profile执行的时间,但是.log文件生成时间是用户登出的时间。

      此脚本可以记录用户登陆的IP地址或者用户名的每一个操作指令,而且上下翻键也失效,不能找出以前的命令,对于生产系统的安全方面有重要的意义。

    2021.5.9。history并不包含时间信息,在脚本中加入export  HISTTIMEFORMAT="%F %T " ,可以在记录日志中显示每条命令的执行时间。经过测试,笔者发现时间是unix timestamp ,而不是北京时间。这个与直接敲history是不一样的,暂时不知道原因,待以后发掘吧。

上一篇下一篇

猜你喜欢

热点阅读