Linux中多種方法實時記錄歷史命令

黃三每丘八發表於2018-09-10

系統中的歷史命令對於後期排除故障非常有用。一般都需要把歷史命令給儲存起來。
方法1:
實時記錄歷史命令到bash_history,不記錄日誌檔案中
[root@bing~]#vim /etc/bashrc
export HISTTIMEFORMAT=`%F %T ` #讓歷史命令記錄操作時間
export HISTSIZE=1000000 #設定儲存歷史命令條數
export HISTFILESIZE=1000000 #設定儲存歷史命令的檔案大小
shopt -s histappend
PROMPT_COMMAND=`history -a` #實時記錄歷史命令,防止丟失
優點:簡單方便,易設定
缺點:安全性較差,多使用者下,只能分別記錄到各自的.bash_history中,沒有統一管理

方法2:
實時記錄歷史命令到自定義檔案中,不記錄日誌檔案中
[root@bing~]#vim /etc/bashrc
export HISTORY_FILE=/var/.history/date `+%y-%m-%d`.log #自定義歷史命令儲存檔案
export PROMPT_COMMAND=` { date “+%Y-%m-%d %T – USER:$USER IP:$SSH_CLIENT PS:$SSH_TTY – $(history 1 | { read x cmd; echo “$cmd”; })”; } >> $HISTORY_FILE`

把所有使用者的登入時間、登入地址、操作記錄統一記錄到指定檔案中

優點:可隨意更改存放地址,隱蔽性高,記錄多使用者操作
缺點:安全性還是不高,非法使用者還是可能找到並進行刪除

方法3:(推薦)
實時記錄歷史命令,並記錄到日誌檔案中
[root@bing~]#vim /etc/bashrc
export PROMPT_COMMAND=`history -a { command=$(history 1 | { read x y;echo $y; } );logger -p local1.notice -t bash -i “user=$USER,ppid=$PPID,from=$SSH_CLIENT,pwd=$PWD,command:$command ” }`

[root@bing~]#vim /etc/syslog.conf
local1.notice /var/log/cmd.log
優點:記錄到日誌中,配合日誌伺服器,可把日誌傳送過去,安全性高

方法4:(這個方法我未實際操作過,以下引用別人的實驗)
利用bash的新特性來記錄歷史命令,可記錄到日誌檔案中
使用bash4.1的新功能:歷史命令儲存到syslog!然後使用syslog-ng構建集中型日誌伺服器收集主機日誌。
1 下載bash:

wget http://ftp.gnu.org/gnu/bash/bash-4.1.tar.gz

tar zxvf bash-4.1.tar.gz –C /usr/local/bash-4.1

cd /usr/local/bash-4.1

2 修改引數(根據個人需要,我只保留了pid,uid,sid等,引數請看目錄下的shell.c中):
檔案bashhist.c大約708行的位置開始,修改成以下一段:
syslog (SYSLOG_FACILITY|SYSLOG_LEVEL,”HISTORY: PID=%d PPID=%d SID=%d User=%s CMD=%s”, getpid(),getppid(), getsid(getpid()), current_user.user_name, line);
else
{
strncpy (trunc, line, SYSLOG_MAXLEN);
trunc[SYSLOG_MAXLEN -1]=`0`;
syslog (SYSLOG_FACILITY|SYSLOG_LEVEL,”HISTORY (TRUNCATED): PID=%d PPID=%d SID=%d User=%s CMD=%s”, getpid(),getppid(), getsid(getpid()), current_user.user_name, trunc);
}
注:ppid:bash父程式號
Sid: 跟蹤 su 切換後的程式號
第二段代表log長度超過600後使用的語句
3 去掉config-top.h中define SYSLOG_HISTORY的註釋。
結果如下:

define SYSLOG_HISTORY

4 編譯安裝

./configure & make && make install

5 修改使用者配置:
將使用者的bash換成現在的bash4.1

vi /etc/passwd

dongwm:x:501:501::/home/dongwm:/usr/local/bash_4.1/bin/bash
這樣日誌就會記在/var/log/messages

結果類似這樣:
Dec 2317:40:28 server -bash: HISTORY: PID=4089 PPID=4088 SID=4089 User=dongwm CMD=exit
……
在整個環境佈置了記錄功能,就能方便的查出來誰-在何時,用什麼賬號,做了什麼操作…

6 主機syslog配置(新增日誌伺服器的地址)

vi /etc/syslog.conf

在最後新增一列:
. @server.dongwm.com(你的日誌伺服器的地址)


相關文章