linux中利用日誌記錄使用者執行的命令

來源:互聯網
上載者:User


工作中,需要把使用者執行的每一個命令都記錄下來,並發送到Log Service器的需求,為此我做了一個簡單的解決方案。這個方案會在每個使用者退出登入 時把使用者所執行的每一個命令都發送給日誌守護進程rsyslogd,你也可通過配置“/etc/rsyslog.conf”進一步將日誌發送給Log Service器
第一種方法

 # 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. 要記錄終端案頭下的命令需要重啟。

原文來自 :http://www.ttlsa.com/

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.