最近Linux服務器上一些文件唄篡改,想追查已經查不到記錄了,因此得想個辦法記錄下全部用戶的操做記錄。linux
通常你們一般會採用history來記錄,可是history有個缺陷就是默認是1000行,固然你也能夠vim /etc/profile將1000修改爲1000000行,可是這只是比較籠統的作法,看不到詳細的用戶來源已經操做記錄,好比來源ip地址、操做時間、操做用戶等。nginx
因此咱們不得不本身寫代碼來實現這樣的功能。vim
在/etc/profile文件的末尾追加編寫腳本以下:服務器
#set user history 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} chown -R ${LOGNAME}:${LOGNAME} /var/log/history/${LOGNAME} chmod 770 /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 660 /var/log/history/${LOGNAME}/*history* 2>/dev/null
這個腳本須要放在/etc/profile文件的末尾。這裏默認寫了記錄日誌文件的根目錄是:/var/log/history,這個目錄須要初始化創建,而後經過「exportHISTFILE="/var/log/history/${LOGNAME}/${USER}@${USER_IP}_$DT"spa
」能夠看到記錄日誌的路徑是/var/log/history/${LOGNAME},因此這個目錄也須要事先創建,有多少個用戶,就要創建多少個目錄,並且要把目錄的使用權限賦予相對應的用戶。.net
而每次用戶登陸到退出都會產生以用戶名、登陸ip地址、操做時間爲文件名的文件,文件裏面包含本次用戶的全部操做記錄。日誌
用其中一個用戶alad登陸進程操做code
[alad@internal-nginx alad]$touch test_history [alad@internal-nginx alad]$cat >> test_history << EOF >123123 >1231435454 EOF [alad@internal-nginx alad]$ls test_history
而後退出用戶(須要退出當前用戶),從新登陸進去日誌目錄/var/log/history/alad/查看有最新的記錄,一次用戶登陸到退出就會保存成一個日誌文件記錄:blog
#進入日誌目錄 [alad@internal-nginx alad]$ cd /var/log/history/alad /var/log/history/alad #查看日誌記錄文件 [alad@internal-nginx alad]$ ls alad@192.168.20.199_20190115_17:44:51 alad@192.168.20.199_20190115_17:48:40 #打開操做記錄日誌 [alad@internal-nginx alad]$ cat alad\@192.168.20.199_20190115_17\:48\:40 #1547545726 ls #1547545788 touch 1 #1547545795 cat >> 1 << EOF 123123 1231435454 EOF #1547545798 ls
能夠清楚的看到cat後的內容爲以前操做的命令記錄,而且帶上時間戳!進程