Linux 记录所有用户登录和操作的详细日志

简介: 1、起因 最近Linux服务器上一些文件呗篡改,想追查已经查不到记录了,所以得想个办法记录下所有用户的操作记录。   一般大家通常会采用history来记录,但是history有个缺陷就是默认是1000行,当然你也可以vim /etc/profile将1000修改成1000000行,但是这只是比较笼统的做法,看不到详细的用户来源已经操作记录,比如来源ip地址、操作时间、操作用户等。

1、起因

 

最近Linux服务器上一些文件呗篡改,想追查已经查不到记录了,所以得想个办法记录下所有用户的操作记录。

 

 

 

一般大家通常会采用history来记录,但是history有个缺陷就是默认是1000行,当然你也可以vim /etc/profile将1000修改成1000000行,但是这只是比较笼统的做法,看不到详细的用户来源已经操作记录,比如来源ip地址、操作时间、操作用户等。

 

 

 

所以我们不得不自己写代码来实现这样的功能。

2、自动记录脚本

 

编写脚本如下:

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`

fi

if [ ! -d /var/log/history ]; then

mkdir /var/log/history

chmod 777 /var/log/history

fi

if [ ! -d /var/log/history/${LOGNAME} ]; then

mkdir /var/log/history/${LOGNAME}

chmod 300 /var/log/history/${LOGNAME}

fi

export HISTSIZE=4096

DT=`date +"%Y%m%d_%H:%M:%S"`

export HISTFILE="/var/log/history/${LOGNAME}/${USER}@${USER_IP}_$DT"

chmod 600 /var/log/history/${LOGNAME}/*history* 2>/dev/null

这个脚本需要放在/etc/profile文件的末尾。这里默认写了记录日志文件的根目录是:/var/log/history,这个目录需要初始化建立,然后通过“exportHISTFILE="/var/log/history/${LOGNAME}/${USER}@${USER_IP}_$DT"

”可以看到记录日志的路径是/var/log/history/${LOGNAME},所以这个目录也需要事先建立,有多少个用户,就要建立多少个目录,而且要把目录的使用权限赋予相对应的用户。

 

而每次用户登录到退出都会产生以用户名、登录ip地址、操作时间为文件名的文件,文件里面包含本次用户的所有操作记录。

3、建立初始化目录

 

先去/home查看有多少个用户

[root@azure_test_static1_11_35 history]# ll

total 28

drwxr-xr-x 2 adminuser adminuser 4096 Nov 17 21:53 adminuser

drwxr-xr-x 2 fastdfs   fastdfs   4096 Nov 17 21:53 fastdfs

drwxr-xr-x 2 loguser   loguser   4096 Nov 17 19:43 loguser

drwxr-xr-x 2 nginx     nginx     4096 Nov 17 20:54 nginx

d-wx------ 2 root      root      4096 Nov 17 21:53 root

drwxr-xr-x 2 tomcat    tomcat    4096 Nov 17 19:42 tomcat

drwxr-xr-x 2 zabbix    zabbix    4096 Nov 17 19:42 zabbix

[root@azure_test_static1_11_35 history]#

然后开始建立初始化目录

[root@azure_test_static1_11_35 log]# mkdir /var/log/history/fastdfs

[root@azure_test_static1_11_35 history]# chown fastdfs:fastdfs fastdfs -R

[root@azure_test_static1_11_35 log]# mkdir /var/log/history/tomcat

[root@azure_test_static1_11_35 log]# chown -R tomcat:tomcat /var/log/history/tomcat

[root@azure_test_static1_11_35 log]# mkdir /var/log/history/zabbix

[root@azure_test_static1_11_35 log]# chown -R zabbix:zabbix /var/log/history/zabbix

[root@azure_test_static1_11_35 log]# mkdir /var/log/history/loguser

[root@azure_test_static1_11_35 log]# chown -R loguser:loguser /var/log/history/loguser

[root@azure_test_static1_11_35 log]# mkdir /var/log/history/adminuser

[root@azure_test_static1_11_35 log]# chown -R adminuser:adminuser /var/log/history/adminuser

 

 

 

4、用户登录验证

 

用其中一个用户fastdfs登录进程操作

 

[adminuser@azure_test_static1_11_35 ~]$ sudo -i

[sudo] password for adminuser:

[root@azure_test_static1_11_35 ~]# su - fastdfs

[fastdfs@azure_test_static1_11_35 ~]$ cp test1.log test3.log

[fastdfs@azure_test_static1_11_35 ~]$ echo "test 1"> test3.log

[fastdfs@azure_test_static1_11_35 ~]$ echo "1" >> test3.log

[fastdfs@azure_test_static1_11_35 ~]$ echo "2" >> test3.log

[fastdfs@azure_test_static1_11_35 ~]$ echo "3" >> test3.log

[fastdfs@azure_test_static1_11_35 ~]$ more test3.log

test 1

1

2

3

[fastdfs@azure_test_static1_11_35 ~]$

然后退出用户,重新登录进去日志目录/var/log/history/fastdfs/查看有最新的记录,一次用户登录到退出就会保存成一个日志文件记录:

 

 

# 进入日志目录

[root@azure_test_static1_11_35 fastdfs]# cd /var/log/history/fastdfs/

# 查看有2个操作日志记录

[root@azure_test_static1_11_35 fastdfs]# ll

total 8

-rw------- 1 fastdfs fastdfs  83 Nov 17 21:53 fastdfs@192.168.120.103_20161117_21:53:16

-rw------- 1 fastdfs fastdfs 139 Nov 17 21:59 fastdfs@192.168.120.103_20161117_21:56:47

# 打开当前的操作记录日志

[root@azure_test_static1_11_35 fastdfs]# more fastdfs@192.168.120.103_20161117_21:56:47

cp test1.log test3.log

echo "test 1"> test3.log

echo "1" >> test3.log

echo "2" >> test3.log

echo "3" >> test3.log

more test3.log

exit

[root@azure_test_static1_11_35 fastdfs]#

PS:可以看到记录的日志和我们的实际操作保持一致。证明我们要的功能实现了。

参考文章:http://www.heminjie.com/system/linux/412.html

 

 

相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
目录
相关文章
|
13天前
|
存储 安全 数据管理
探索Linux的挂载操作🌈
在Linux这个强大的操作系统中,挂载操作是一个基本而重要的概念。它涉及到文件系统、设备和数据访问,对于理解Linux的工作方式至关重要。那么,挂载操作究竟是什么,为什么我们需要它,如果没有它,我们将面临什么问题呢?让我们一起深入探讨。
探索Linux的挂载操作🌈
|
18天前
|
Linux Shell
Linux手动清理Linux脚本日志定时清理日志和log文件执行表达式
Linux手动清理Linux脚本日志定时清理日志和log文件执行表达式
72 1
|
22天前
|
Linux Windows
Linux之基本指令操作
Linux之基本指令操作
|
28天前
|
Shell Linux C语言
【Shell 命令集合 网络通讯 】Linux 查看系统中的UUCP日志文件 uulog命令 使用指南
【Shell 命令集合 网络通讯 】Linux 查看系统中的UUCP日志文件 uulog命令 使用指南
29 0
|
28天前
|
存储 算法 Shell
【Shell 命令集合 磁盘维护 】Linux 对软盘进行格式化操作 fdformat命令使用指南
【Shell 命令集合 磁盘维护 】Linux 对软盘进行格式化操作 fdformat命令使用指南
32 0
|
28天前
|
Shell Linux C语言
【Shell 命令集合 磁盘管理 】Linux 控制光驱或可移动媒体设备的弹出和关闭操作 eject命令使用教程
【Shell 命令集合 磁盘管理 】Linux 控制光驱或可移动媒体设备的弹出和关闭操作 eject命令使用教程
35 1
|
28天前
|
监控 Shell Linux
【Shell 命令集合 系统管理 】Linux 自动轮转(log rotation)日志文件 logrotate命令 使用指南
【Shell 命令集合 系统管理 】Linux 自动轮转(log rotation)日志文件 logrotate命令 使用指南
48 0
|
11天前
|
存储 监控 安全
Linux系统日志
【4月更文挑战第6天】Linux系统日志,关键用于记录系统状态和事件,包括内核、系统、安全和应用日志,助力管理员诊断问题、确保系统正常运行。日志管理涉及收集、分析、备份等,常用工具如rsyslog、systemd-journal和logrotate(用于日志轮转)。重视日志文件的存储管理,防止空间占用过多。
16 1
Linux系统日志
|
4天前
|
SQL 监控 安全
Linux&Windows 日志分析 陇剑杯 CTF
Linux&Windows 日志分析 陇剑杯 CTF
29 0
|
14天前
|
关系型数据库 MySQL Linux
linux特定服务日志
Linux系统的服务日志在`/var/log`目录下,如系统日志(`/var/log/syslog`或`/var/log/messages`)、认证日志(`/var/log/auth.log`)、SSH日志(`/var/log/auth.log`或`/var/log/secure`)。Web服务器(Apache和Nginx)的访问和错误日志、MySQL错误日志、Postfix及Dovecot邮件服务器日志也在此处。日志位置可能因发行版和服务配置而异,不确定时可查服务配置或用`grep`搜索。使用`logrotate`可管理日志文件大小。
17 6