工做中,須要把用戶執行的每個命令都記錄下來,併發送到日誌服務器的需求,爲此我作了一個簡單的解決方案。這個方案會在每一個用戶退出登陸 時把用戶所執行的每個命令都發送給日誌守護進程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