Linux OS下增加實時記錄用戶執行的命令
Linux是一種支持多用戶操作的OS, 經常OS文件做出了一些更改,但是無從查起是誰,是什麼時候做的修改。其實Linux下可以藉助PROMPT_COMMAND
這個環境變量實現這一功能,環境變量PROMPT_COMMAND
記錄了用戶操作終端命令提示符出現前執行的命令。
添加方法
在/etc/profile
中添加如下內容
export HISTFILE="/var/log/$(date '+%F').his" #定義保存的命令日誌文件
export HISTTIMEFORMAT='%F %T ' #定義命令日誌格式
export PROMPT_COMMAND='user=$(who am i | sed "s/[ ][ ]*/ /g"); history 1 | { read x date time cmd; echo "${date} ${time} ${user} ${cmd}"; } >> $HISTFILE' #主要的功能實現
HISTFILE
定義了要保存的命令日誌文件名格式,這裏是按照當天的日期命名,同一天會記錄在一個文件中。HISTTIMEFORMAT
這個是系統環境變量,主要是記錄命令執行的時間格式,支持的格式可以參考date
命令的日期時間格式。PROMPT_COMMAND
中,user=$(who am i | sed "s/[ ][ ]*/ /g")
用於獲取當前登陸的用戶名,這裏不用whoami
是有原因的,一直返回空;history 1
用於獲取上一條終端執行命令;read x date time cmd; echo "${date} ${time} ${user} ${cmd}";
獲取前一個的輸出作爲標準輸入,通過read
塊處理功能,分割爲date
、time
、cmd
, 分別對應日期,時間,和執行的命令。剩下的就是輸出附加到日誌記錄文件。
應用場景
通過這種方法可以實時記錄每個用戶執行的命令,當然最好是別大家都用相同的賬號登陸,但是這個也考慮到這種情況,記錄會保存登陸者的IP地址。最好是同時使用遠程備份該日誌記錄。如通過NFS,syslog等服務做到實時遠程備份。
如此,刪庫者,無處遁形!👍
日誌記錄
日誌文件格式:
日誌內容記錄:
📌轉載請註明來源,版權歸作者**@hualong1009**所有, 謝謝