麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 學院 > 操作系統 > 正文

Bash記錄所有用戶的歷史記錄

2024-06-28 16:03:59
字體:
來源:轉載
供稿:網友

bash是多數linux發行版默認的shell,雖然不及zsh好用,但比其它的shell好太多。我們的生產服務器很多,沒有用跳板機,又是多人共用root用戶,為了審計用戶操作,需要記錄執行命令的用戶、時間和ip等信息。本文之所以要優化,主要是因為bash默認配置存在以下幾點不足:

歷史記錄保存數目有限,默認1000條記錄不詳細,不記錄命令執行時間/執行用戶名/用戶ip等歷史記錄會丟失,主要有兩種情況: 1. bash異常退出 2.同一用戶多處登錄或開了多個會話,只會記錄最后退出的會話歷史

上面這三點不足,都可以通過調整bashrc的參數解決,怎么做就不說了。服務器這么多,如何用最省事方法解決才是關鍵。我采用的是用syslog記錄bash歷史命令

一、常規配置syslog做法

1.1 配置全局bash歷史記錄格式編輯/etc/bashrc(centos)或/etc/bash.bashrc(debian),增加:

export PROMPT_COMMAND='RETRN_VAL=$?;logger -p local6.debug "$(who am i) [$$]: $(history 1 | sed "s/^[ ]*[0-9]/+[ ]*//" ) [$RETRN_VAL]"'

1.2 配置rsyslog新增文件/etc/rsyslog.d/bash.conf,內容:

local6.*    /var/log/bash_history.log

重啟rsyslog :

service rsyslog restart

1.3 配置日志分割雖然bash歷史記錄不會占用太多空間,但為了方便查看還是用logrotate分割一下。,按天切分日志,新建文件/opt/logrotate_bash.conf,內容:

/var/log/bash_history.log{   sharedscripts   postrotate   /bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null || true  endscript}

添加定時任務:

59 23 *  *  * root /usr/sbin/logrotate -f /opt/logrotate_bash.conf

如果不介意兩天的日志混在一起,可以直接將/var/log/bash_history.log加入/etc/logrotate.d/syslog中即可。

二、使用logger命令記錄到syslog

服務器這么多,這樣配置有些麻煩,能不能更簡單一點,答案是可以的。logger命令是一個shell接口,可以通過它使用Syslog日志系統。直接編輯/etc/profile文件,在最后加入:

    function log2syslog    {export HISTTIMEFORMAT="[%Y-%m-%d %H:%M:%S] [`who am i 2>/dev/null| awk '{print $NF}'|sed -e 's/[()]//g'`] "export PROMPT_COMMAND='/  if [ -z "$OLD_PWD" ];then        export OLD_PWD=$(pwd);  fi;  if [ ! -z "$LAST_CMD" ] && [ "$(history 1)" != "$LAST_CMD" ]; then        logger  `whoami`_shell_cmd "[$OLD_PWD]$(history 1)";  fi ;  export LAST_CMD="$(history 1)";  export OLD_PWD=$(pwd);'}   trap log2syslog DEBUG

即可將bash的歷史記錄打入/var/log/message中,同時系統會自動切割,查看命令只需grep一下shell_cmd即可,美中不足是cronjob不是每天0點執行,所以日志不是按天分割,兩天的日志會混在一起

三、直接打到指定文件

bash命令即使記錄時間非常久也很小,不需要切割;同時為方便查看,不想bash歷史日志和message日志混在一起,所以需要單獨打到一個文件中。只需按第二種做法稍稍改變一下即可,同樣編輯/etc/profile文件,在最后加入:

    function log2file    {export HISTTIMEFORMAT="[%Y-%m-%d %H:%M:%S] [`who am i 2>/dev/null| awk '{print $NF}'|sed -e 's/[()]//g'`] "export PROMPT_COMMAND='/  if [ -z "$OLD_PWD" ];then        export OLD_PWD=$(pwd);  fi;  if [ ! -z "$LAST_CMD" ] && [ "$(history 1)" != "$LAST_CMD" ]; then        echo  `whoami`_shell_cmd "[$OLD_PWD]$(history 1)" >>/var/log/bash_history.log;  fi ;  export LAST_CMD="$(history 1)";  export OLD_PWD=$(pwd);'}   trap log2file DEBUG

將logger命令改成echo,即可將bash歷史記錄打到/var/log/bash_history.log

四、三種做法的效果

正常做法,使用syslog,日志輸出到/var/log/bash_history.log ,格式:

Feb 20 01:44:07 Centos-Test root: root     pts/2        2016-02-20 01:44 (will-pc.52os.net) [17983]: ps -ef [0]

第二種方法,通過logger使用syslog,日志輸出到/var/log/messages,格式:

Feb 20 01:37:44 Centos-Test root: root_shell_cmd [/etc/rsyslog.d] 1179  [2016-02-20 01:37:44] [will-pc.52os.net] ps -ef

第三種方法,不用syslog直接打到文件,日志輸出到/var/log/bash_history.log,格式:

    root_shell_cmd [/root]   76  [2016-03-27 07:27:41] [10.11.15.41] vim /var/log/messages

參考文章:

https://www.ttlsa.com/linux/history-record-in-message-log/http://askUbuntu.com/questions/93566/how-to-log-all-bash-commands-by-all-users-on-a-server


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 欧美综合在线观看 | 香蕉国产片 | 国产羞羞视频免费在线观看 | 一区二区三区在线观看免费视频 | 免费a观看 | 精品一区二区在线播放 | 欧美日韩在线视频一区二区 | 日韩视频一二区 | 97久久日一线二线三线 | 国产午夜精品久久久久久久蜜臀 | 国产成人精品区 | 激情网站在线观看 | 免费在线看a | 久久久aa| 成人福利视频在线观看 | 国产精品亚洲一区二区三区在线观看 | 久久里面有精品 | 国产亚洲精品久久久久久久久久 | 黄色三级网站 | 久久精品视频国产 | 日韩视频区 | 午夜视频国产 | 亚洲综合色视频在线观看 | 插插操 | 香蕉黄色网 | 毛片视频免费播放 | 精品亚洲一区二区 | 久久一本日日摸夜夜添 | 国产二区三区四区 | 中国洗澡偷拍在线播放 | 午夜精品成人一区二区 | www.91视频com | 黄视频免费在线观看 | 国产精品自拍99 | 久久久久久久久成人 | 国产亚洲精品久久久久久久久 | 国产精品久久久久久久av三级 | 一级做a爱片性色毛片高清 日本一区二区在线看 | 亚洲一区国产二区 | 日日草夜夜 | 久久国产一级 |