linux日誌服務器審計客戶端history記錄

一、需求:

將服務器上的每個用戶執行的命令、執行時間、登錄時間、主機ip、當前切換用戶等信息保存到本地並實時傳輸至日誌服務器進行異地保存。

rsyslog-server: 192.168.1.240

rsyslog-client: 192.168.1.25

 

二、工具及服務:

1、logger
  logger 是一個shell接口,可以通過該接口使用rsyslog的日誌模塊。
  usage: logger [-is] [-f file] [-p pri] [-t tag] [-u socket] [ message ... ]
  -i 逐行記錄每一次logger的進程id
  -f file記錄特定的文件
  -p 輸入消息的特定優先級,默認是'user.notice'
  -t tag爲每行信息打上特定的標籤
  -u 以特定的socker代替內嵌系統常規工作
  
2、rsyslog日誌服務器
  rsyslog是syslog的加強版,可以用作客戶端及服務器,我們可以使用local0~local7來自定義設備傳輸至rsyslog
  
3、PROMPT_COMMAND
  Linux系統的環境變量PROMPTCOMMAND的內容會在bash提示符顯示之前被執行。
  該環境變量的默認值是 history -a 功能是將目前新增的history追加到histfiles 中,默認寫入隱藏文件~/.bash_history中

 

三、實現:

1、配置rsyslog日誌服務器:

# vim /etc/rsyslog.conf
# 添加以下幾行
  
# 啓動udp端口也可以是tcp端口
$ModLoad imudp
$UDPServerRun 514
# 設置白名單
$AllowedSender UDP, 192.168.1.0/24, 10.0.0.0/8
# 配置模板,以客戶端ip爲目錄,以日期命名文件
$template Remote,"/var/log/syslog/%fromhost-ip%/%$YEAR%-%$MONTH%-%$DAY%.log"
# 把非本地傳輸的日誌按照指定的模板存放
:fromhost-ip, !isequal, "127.0.0.1" ?IpTemplate
# & 表示已經匹配處理的內容,~ 表示不再進行其他處理
& ~

# 重啓服務
# service rsyslog restart

 

2、配置rsyslog客戶端:

# 配置PROMP_COMMAND
# vim /etc/bashrc
readonly PROMPT_COMMAND='logger -p local3.notice -t bash "$(who am i |awk "{print \$5,\$2}" | tr -d "[()]") [`pwd`] user=$(whoami) cmmd=$(history 1 | { read x cmd; echo "$cmd"; })"'

source /etc/bashrc

其中:

local3.notice 使我們自定義的設備,用於rsyslog調用;
bash 是我們爲每行打印的信息打印的tag;
who am i |awk “{print $1\” \”$2\” \”$3\” \”$4\” \”$5}”用於獲取我們當前用戶的登錄信息;
pwd 用於列出我們當前所在的目錄;
whoami 用於獲取我們當前切換的執行命令的用戶,例如我們從test 用戶 sudo -i,執行命令的用戶爲root,但是登錄的用戶test,方便我們區分;
command 是我們當前用戶執行的命令。

注意:

1.我們需要在/etc/bashrc或/etc/profile中添加環境變量,用於所有用戶。
2.export PROMPT_COMMAND 如果將PROMPT_COMMAND導出到用戶工作區,那麼對於有經驗的用戶就可以做賦值操作 export PROMPT_COMMAND ="",
簡單的語法就會導致記錄功能當前session端不可用,所以PROMPT_COMMAND必須設置成只讀的屬性,readonly PROMPT_COMMAND

 

3、配置rsyslog客戶端:

# vim /etc/rsyslog.conf
# 添加如下行
# 添加local3.none
*.info;mail.none;authpriv.none;cron.none;local3.none    /var/log/messages
# 保存到本地的文件
local3.notice                        /var/log/audit.log
# 遠程日誌服務器
local3.notice                        @192.168.1.240

# 重啓rsyslog
# service rsyslog restart

其中:

1.local3.notice 是在logger中定義的設備,rsyslog調用並將打印信息輸出至指定文件。
2.添加local3.none是避免日誌寫入 /var/log/messages

 

4、配置輪轉日誌(client端):

/var/log/audit.log{
daily
rotate 4
missingok
notifempty
nocompress
create
dateext
sharedscripts
    postrotate
       /bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null || true
   endscript
}


# 強制輪轉
 logrotate -vf /etc/logrotate.d/rsyslog
 
 ls /var/log|grep audit
 audit.log  audit.log-20190430

 

三、驗證測試:

1、rsyslog服務端:

[root@rsyslog-server ~]# tail -f /var/log/syslog/192.168.1.25/192.168.1.25_2019-05-02.log 
May  2 08:10:37 localhost bash: 192.168.1.65 pts/2 [/root] user=root cmmd=service sshd restart
May  2 08:12:22 localhost bash: 192.168.1.65 pts/2 [/root] user=root cmmd=vim /etc/rsyslog.conf
May  2 08:12:31 localhost bash: 192.168.1.65 pts/2 [/root] user=root cmmd=service rsyslogd restart
May  2 08:12:35 localhost kernel: imklog 5.8.10, log source = /proc/kmsg started.
May  2 08:12:35 localhost rsyslogd: [origin software="rsyslogd" swVersion="5.8.10" x-pid="14495" x-info="http://www.rsyslog.com"] start
May  2 08:12:35 localhost bash: 192.168.1.65 pts/2 [/root] user=root cmmd=service rsyslog restart

 

2、rsyslog客戶端:

[root@client ~]# tail -f /var/log/audit.log 
May  2 08:10:37 localhost bash: 192.168.1.65 pts/2 [/root] user=root cmmd=service sshd restart
May  2 08:12:22 localhost bash: 192.168.1.65 pts/2 [/root] user=root cmmd=vim /etc/rsyslog.conf
May  2 08:12:31 localhost bash: 192.168.1.65 pts/2 [/root] user=root cmmd=service rsyslogd restart
May  2 08:12:35 localhost bash: 192.168.1.65 pts/2 [/root] user=root cmmd=service rsyslog restart
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章