您的位置:首页 > 运维架构 > Linux

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

2016-11-17 22:04 656 查看
 
 
 

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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: