用日誌記錄Linux用戶執行的每一條命令(history)


工做中,須要把用戶執行的每個命令都記錄下來,併發送到日誌服務器的需求,爲此我作了一個簡單的解決方案。這個方案會在每一個用戶退出登陸 時把用戶所執行的每個命令都發送給日誌守護進程rsyslogd,你也可經過配置「etcrsyslog.conf」進一步將日誌發送給日誌服務器linux

第一種方法shell

# vi etcprofile緩存

#設置history格式bash

export HISTTIMEFORMAT=[%Y-%m-%d %H%M%S] [`who am i 2devnull 服務器

awk '{print $NF}'sed -e 's[()]g'`] 併發

#記錄shell執行的每一條命令運維

export PROMPT_COMMAND='tcp

if [ -z $OLD_PWD ];thenspa

    export OLD_PWD=$PWD;.net

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 etcprofile

#用戶登陸時執行此腳本

#設置history顯示格式

export HISTTIMEFORMAT=[%Y-%m-%d %H%M%S] [`who am i 2devnull

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

#登陸時清空當前緩存 echo   .bash_history

 

第二步:不一樣用戶分別設置

# source etcprofile

# vi homeuser1.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 etcrsyslog.conf

 #增長以下行,IP本身換,也能夠用域名,@表示用UDP協議,@@表示用TCP協議

 .  @192.168.0.1

 

不足之處:

1. 不能實時記錄命令併發送log

2. 要記錄終端桌面下的命令須要重啓。

免費領取兄弟連IT教育原創linux運維工程師視頻/細說linux教程,詳情諮詢官網客服:http://www.lampbrother.net/linux/

學PHP、Linux、HTML五、UI、Android等視頻教程(課件+筆記+視頻)!聯繫Q2430675018

       兄弟連linux課堂實錄視頻,領取聯繫Q2430675018

相關文章
相關標籤/搜索