天天看點

history linux 日志伺服器_Linux中将執行過的指令記錄到日志并發送到伺服器的方法...

工作中,需要把使用者執行的每一個指令都記錄下來,并發送到日志伺服器的需求,為此我做了一個簡單的解決方案。這個方案會在每個使用者登出 時把使用者所執行的每一個指令都發送給日志守護程序rsyslogd,你也可通過配置“/etc/rsyslog.conf”進一步将日志發送給日志伺服器

第一種方法

# vi /etc/profile

#設定history格式

export HISTTIMEFORMAT="[%Y-%m-%d %H:%M:%S] [`who am i 2>/dev/null| \

awk '{print $NF}'|sed -e 's/[()]//g'`] "

#記錄shell執行的每一條指令

export PROMPT_COMMAND='\

if [ -z "$OLD_PWD" ];then

export OLD_PWD=$PWD;

fi;

if [ ! -z "$LAST_CMD" ] && [ "$(history 1)" != "$LAST_CMD" ]; then

logger -t `whoami`_shell_cmd "[$OLD_PWD]$(history 1)";

fi ;

export LAST_CMD="$(history 1)";

export OLD_PWD=$PWD;'

第二種方法第一步:全局設定(這是一次性設定,需要root使用者權限)

# vi /etc/profile

#使用者登入時執行此腳本

#設定history顯示格式

export HISTTIMEFORMAT="[%Y-%m-%d %H:%M:%S] [`who am i 2>/dev/null\

| awk '{print $NF}'|sed -e 's/[()]//g'`] "

#登入時清空目前緩存 echo "" > .bash_history

第二步:不同使用者分别設定

# source /etc/profile

# vi /home/user1/.bash_logout

#當使用者登出時會執行此腳本

tmpfile="/tmp/`whoami`_history.tmp"

#把格式化的history記錄到檔案裡

history > $tmpfile

#讀取檔案,一行一行把檔案内容發送到給syslogd。

#不要試圖用"history | logger"或"logger -f $tmpfile"來替代下面的代碼,

#否則将隻能記錄前200行。

k=1

while read line; do

((k++))

logger -t `whoami`_shell_cmd "$line"

done < $tmpfile

rm -f $tmpfile

(如果還有其它使用者需要監控,則重複第二步驟)

第三步:把日志發送給遠端主機(可選)

# vi /etc/rsyslog.conf

#增加如下行,IP自己換,也可以用域名,@表示用UDP協定,@@表示用TCP協定

*.* @192.168.0.1

不足之處:

1. 不能實時記錄指令并發送log

2. 要記錄終端桌面下的指令需要重新開機。

=========

history linux 日志伺服器_Linux中将執行過的指令記錄到日志并發送到伺服器的方法...