WD1X.COM - 问答一下,轻松解决,电脑应用解决专家
主板显卡CPU内存显示器
硬盘维修显卡维修显示器维修
注册表系统命令DOS命令Win8
存储光存储鼠标键盘
内存维修打印机维修
WinXPWin7Win11Linux
硬件综合机箱电源散热器手机数码
主板维修CPU维修键盘鼠标维修
Word教程Excel教程PowerPointWPS
网络工具系统工具图像工具
数据库javascript服务器
PHP教程CSS教程XML教程

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

更新时间:2021-05-31 11:56 作者:selectgo点击:
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
 
 
[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:可以看到记录的日志和我们的实际操作保持一致。证明我们要的功能实现了。
顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------
你可能感兴趣的内容