1、起因
最近Linux服務(wù)器上一些文件唄篡改,想追查已經(jīng)查不到記錄了,所以得想個(gè)辦法記錄下所有用戶(hù)的操作記錄。
一般大家通常會(huì)采用history來(lái)記錄,但是history有個(gè)缺陷就是默認(rèn)是1000行,當(dāng)然你也可以vim /etc/profile將1000修改成1000000行,但是這只是比較籠統(tǒng)的做法,看不到詳細(xì)的用戶(hù)來(lái)源已經(jīng)操作記錄,比如來(lái)源ip地址、操作時(shí)間、操作用戶(hù)等
所以我們不得不自己寫(xiě)代碼來(lái)實(shí)現(xiàn)這樣的功能。
編寫(xiě)腳本如下
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
這個(gè)腳本需要放在/etc/profile文件的末尾。這里默認(rèn)寫(xiě)了記錄日志文件的根目錄是:/var/log/history,這個(gè)目錄需要初始化建立,然后通過(guò)“exportHISTFILE="/var/log/history/${LOGNAME}/${USER}@${USER_IP}_$DT"
”可以看到記錄日志的路徑是/var/log/history/${LOGNAME},所以這個(gè)目錄也需要事先建立,有多少個(gè)用戶(hù),就要建立多少個(gè)目錄,而且要把目錄的使用權(quán)限賦予相對(duì)應(yīng)的用戶(hù)。
而每次用戶(hù)登錄到退出都會(huì)產(chǎn)生以用戶(hù)名、登錄ip地址、操作時(shí)間為文件名的文件,文件里面包含本次用戶(hù)的所有操作記錄。
先去/home查看有多少個(gè)用戶(hù)
[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]#
然后開(kāi)始建立初始化目錄
[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
用其中一個(gè)用戶(hù)fastdfs登錄進(jìn)程操作
[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 ~]$
然后退出用戶(hù),重新登錄進(jìn)去日志目錄/var/log/history/fastdfs/查看有最新的記錄,一次用戶(hù)登錄到退出就會(huì)保存成一個(gè)日志文件記錄:
# 進(jìn)入日志目錄
[root@azure_test_static1_11_35 fastdfs]# cd /var/log/history/fastdfs/
# 查看有2個(gè)操作日志記錄
[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:59fastdfs@192.168.120.103_20161117_21:56:47
# 打開(kāi)當(dāng)前的操作記錄日志
[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]#
參考:https://blog.csdn.net/tao19910610/article/details/53285010