1, 起因
最近 Linux 服务器上一些文件呗篡改, 想追查已经查不到记录了, 所以得想个办法记录下所有用户的操作记录.
极速赛车源码搭建开发 Q[1 1 4 8 9 1 6 8 8 8]
一般大家通常会采用 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]#
来源: http://www.bubuko.com/infodetail-2972202.html