1船响、起因
最近Linux服務器上一些文件唄篡改衰絮,想追查已經查不到記錄了,所以得想個辦法記錄下所有用戶的操作記錄袖迎。
一般大家通常會采用history來記錄,但是history有個缺陷就是默認是1000行腺晾,當然你也可以vim /etc/profile將1000修改成1000000行燕锥,但是這只是比較籠統(tǒng)的做法,看不到詳細的用戶來源已經操作記錄悯蝉,比如來源ip地址归形、操作時間、操作用戶等
所以我們不得不自己寫代碼來實現(xiàn)這樣的功能鼻由。
編寫腳本如下
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地址躏嚎、操作時間為文件名的文件,文件里面包含本次用戶的所有操作記錄菩貌。
先去/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
用其中一個用戶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:59fastdfs@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]#
參考:https://blog.csdn.net/tao19910610/article/details/53285010