在linux下记录所有用户的登录和操作日志 (脚本介绍)

1.一般来说我们可以用history命令来查看用户的操作记录,但是这个命令不能记录是那个用户登录操作的,也不能记录详细的操作时间,并且不是完整的。所以误操作而造成重要的数据丢失就很难查到是谁操作的。
在这里我们通过脚本代码来实现记录所有用户的登录操作日志:
编辑/etc/profile文件,在文件末尾加入下面代码
vi /etc/profile 全局的profile文件;
ubuntu每个用户下都会有用户级的profile文件 例如 root ,ubuntu 用户

history
USER=`whoami`
USER_IP=`who -u am i 2>/dev/null| awk '{print $NF}'|sed -e 's/[()]//g'`
if [ "$USER_IP" = "" ]; then
USER_IP=`hostname`  ## 获取ip 并且存到变量中
fi
if [ ! -d /var/log/history ]; then
mkdir /var/log/history    ##  判断该目录下 是否有此目录如果没有则新建且开启 777权限
chmod 777 /var/log/history
fi
if [ ! -d /var/log/history/${LOGNAME} ]; then
mkdir /var/log/history/${LOGNAME}    ## 判断 /var/log/history目录下有没有 当前登录的用户文件夹,如果没有则创建且设置 300 权限  LOGNAME: 是当前登录的用户名 例如 ubuntu或root
chmod 300 /var/log/history/${LOGNAME}
fi
## 最后更改全局的HISTFILE变量
export HISTSIZE=4096   ##更改HISTFILE 大小
DT=`date +"%Y%m%d_%H:%M:%S"`
export HISTFILE="/var/log/history/${LOGNAME}/${USER}@${USER_IP}_$DT" 
## 全局更改 HISTFILE的日志存放目录 默认 每个用户下面都有自己的bash.history 这样做是为了集中管理记录这些命令日志,
##修改了全局变量 HISTFILE 就等于修改了 全部用户的HISTFILE设置。 
##所以 最终呈现的效果就是 在用户退出远程连接时 才会记录到日志中。
## 此操作 其实 就是 更改了各个用户的history存储目录且日志文件名字有所变化其他的都跟原来一样。
chmod 600 /var/log/history/${LOGNAME}/*history* 2>/dev/null

注释: /var/log/history这是记录日志的存放位置,可以自定义。

2.在此目录下会以每一个用户为名新建一个文件夹
cd /var/log/history/
在这里插入图片描述
在这里插入图片描述
3.使环境变量 立即生效

source  /etc/profile 

4.此处虽然 可以实时监控与记录用户输入的命令与客户端连接ip 但是 文件仍然有被篡改删除的风险,建议实时传输到elk中。


版权声明:本文为weixin_44763552原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。