很多情況下我們需要記錄用戶執(zhí)行過的命令敏晤,不管是root還是其他普通用戶,我們可以通過以下方式來記錄。
1.1艘蹋、預(yù)備知識
-
1)PROMPT_COMMAND
這個環(huán)境變量中設(shè)定的內(nèi)容將在交互式腳本的提示(PS1)出現(xiàn)之前被執(zhí)行。也就意味著用戶登錄后每次執(zhí)行命令前都會執(zhí)行這個變量中給出的命令票灰。 -
2)rsyslog
系統(tǒng)用來實現(xiàn)日志功能的女阀,配置文件在/etc/rsyslog.conf
宅荤,格式日志設(shè)備(類型).(連接符號)日志級別 日志處理方式(action)
-
3)logrotate
Logrotate是基于CRON來運(yùn)行的,其腳本是/etc/cron.daily/logrotate浸策,日志輪轉(zhuǎn)是系統(tǒng)自動完成的冯键。
實際運(yùn)行時,Logrotate會調(diào)用配置文件/etc/logrotate.conf庸汗。
1.2惫确、實戰(zhàn)演練
# 1. 修改rsyslog配置,local7下面添加如下行,注意用tab分割蚯舱,不是空格
vim /etc/rsyslog.conf
local6.* /var/log/auditlog
# 2. 重啟rsyslog服務(wù)
systemctl restart rsyslog
# 3. 修改環(huán)境變量文件,文件末尾新增如下行
vim /etc/bashrc
readonly PROMPT_COMMAND='{ date "+%Y-%m-%d %T # $(who am i |awk "{print \$2,\$5}") $(whoami):[$PWD]# $(history 1 | { read x cmd; echo ${cmd}; })"; } | logger -p local6.info'
# 4. 新增logrotate配置audit日志的切割策略
vim /etc/logrotate.d/audit
/var/log/auditlog {
daily
compress
rotate 365
missingok
notifempty
dateext
}
1.3改化、工作原理
PROMPT_COMMAND會在命令執(zhí)行前執(zhí)行。
$(who am i |awk '{print \$2,\$5}')
會輸出登錄用戶用的tty和登錄服務(wù)器的遠(yuǎn)程電腦IP或者主機(jī)名枉昏。
$PWD
是內(nèi)建變量陈肛,顯示當(dāng)前執(zhí)行命令的工作目錄。
history 1 | { read x cmd; echo ${cmd};
會輸出最后一條歷史命令中的執(zhí)行信息凶掰。
為了不讓用戶修改變量燥爷,使用declare -rx
命令定義了只讀環(huán)境變量。這里要注意使用readonly
命令也可以定義只讀變量懦窘,但是用戶用env命令看不到前翎,只有用export PROMPT_COMMAND
命令將變量設(shè)置為環(huán)境變量后才能看到。
變量加到/etc/bashrc
是因為用戶登錄后會加載這里的配置畅涂,包括sudo
sudo su
sudo su -
su root
su - root
港华。如果加到其他文件里則部分命令后就不會加載變量,自行嘗試午衰。
修改rsyslog是可以自定義日志輸出的文件路徑和名字立宜,用logger -p
這個命令配合使用。
新增logrotate配置則是需要切割日志臊岸,防止單個日志文件太大橙数,以及做好切割備份,方便查詢帅戒。
其他實現(xiàn)
【一】
declare -rx PROMPT_COMMAND='{ date "+%Y-%m-%d %T # $(who am i |awk "{print \$2,\$5}") $(whoami):[$PWD]# $(history 1 | { read x cmd; echo ${cmd}; })"; } | logger -t auditlog'
在/etc/profile
最后添加如下行灯帮,則日志會直接輸出到messages
日志里。
logger -t auditlog
-t tag 指定日志標(biāo)簽逻住,結(jié)果格式為
Jun 3 17:32:25 XXX auditlog: 日志信息
這種方式:不定義日志格式钟哥,直接將日志寫到messages日志文件里,和其他日志放一起瞎访,但是可以指定日志標(biāo)簽腻贰,方便檢索。
缺點是(1)會導(dǎo)致日志增大扒秸,并且用戶提權(quán)后因-t標(biāo)簽的存在播演,導(dǎo)致不會記錄提權(quán)前的用戶冀瓦。(2)不能自定義日志路徑。
【二】
# 1. 創(chuàng)建審計用戶組
groupadd audit
# 2. 將普通用戶caoshibo加入audit組
usermod -a -G audit caoshibo
# 3. 創(chuàng)建存放審計日志的目錄
mkdir -p -m 2775 /var/log/Command/
chmod o+t /var/log/Command/
# 4.修改目錄的屬組為audit
chgrp audit /var/log/Command/
# Command audit
export DA=$(date +"%Y%m%d")
export HISTORY_FILE=/var/log/Command/Command-${DA}.log
(umask 002 && touch $HISTORY_FILE)
declare -rx PROMPT_COMMAND='{ date "+%Y-%m-%d %T # $(who am i |awk "{print \$2,\$5}") $(whoami):[$PWD]# $(history 1 | { read x cmd; echo ${cmd}; })"; } >>$HISTORY_FILE'
缺點:用戶可以刪除日志文件写烤。
因為普通用戶和root都要往日志文件里寫咕幻,所以需要給普通用戶加一個附加組;并且如果日志文件不存在顶霞,普通用戶登錄后也需要新建,所以普通用戶必須有日志文件父目錄的寫權(quán)限锣吼。為了能讓所有普通用戶都可以寫选浑,就給Command目錄加了SGID權(quán)限以及修改目錄屬組為audit。這樣普通用戶在這個目錄下創(chuàng)建的日志文件的屬組會自動繼承Command目錄的屬組玄叠,也就是audit古徒。(umask 002 && touch $HISTORY_FILE)
命令則是因為root用戶生成的日志文件權(quán)限是644,屬組沒有寫權(quán)限读恃。所以這里用 啟動子shell并修改umask的方式生成日志文件隧膘。這樣就不會修改root默認(rèn)的0022
的umask。
其他審計軟件:
https://www.splunk.com/ 免費(fèi)2個月