文章目录
使用介绍
# 1、写一个操作历史命令审计环境变量
cat > /etc/profile.d/history_audit.sh <<"EEOF"
#export PROMPT_COMMAND='RETRN_VAL=$?;logger -p local6.debug "$(whoami)[$$] on $(hostname) from $SSH_CLIENT: $(history 1|sed "s/^[ ]*[0-9]\+[ ]*//" ) [$RETRN_VAL]"'
export PROMPT_COMMAND='RETRN_VAL=$?;logger -p local6.debug "$(whoami)[$$] on $(hostname) from $SSH_CLIENT via $(tty): $(history 1|sed "s/^[ ]*[0-9]\+[ ]*//" ) [$RETRN_VAL]"'
readonly PROMPT_COMMAND
EEOF
# 2、写一个rsyslog的配置文件,并使用CustomFormat自定义时间格式模版
# 注意,若是配合promtail做日志收集,可以不使用自定义时间格式,因为promtail会自动加上时间格式
# 注意,我在实际使用中去掉了 %HOSTNAME% ,因为我在上面使用了 $(hostname)
cat > /etc/rsyslog.d/history.conf <<"EEOF"
#local6.debug /var/log/history-command.log
#template(name="CustomFormat" type="string" string="%TIMESTAMP:::date-rfc3339% %HOSTNAME% %syslogtag% %msg%\n")
#local6.debug /var/log/history-command.log
template(name="CustomFormat" type="string" string="%timegenerated:1:10:date-rfc3339% %timegenerated:12:19:date-rfc3339% %syslogtag% %msg%\n")
local6.debug /var/log/history-command.log;CustomFormat
EEOF
# 重启 rsyslog 服务
systemctl restart rsyslog.service
# 3、查看审计日志,是否有记录信息
root@debian:~# tail -f /var/log/history-command.log
2024-11-18 21:21:54 root: root[9198] on pve-ceph01 from via /dev/tty1: ip a [0]
2024-11-18 21:21:57 root: root[9198] on pve-ceph01 from via /dev/tty1: ls -lh [0]
2024-11-18 21:23:40 root: root[9198] on pve-ceph01 from via /dev/tty1: tcping baidu.com [127]
2024-11-18 21:23:49 root: root[9092] on pve-ceph01 from 192.168.60.25 51512 22 via /dev/pts/4: ip a [0]
2024-11-18 21:23:52 root: root[9362] on pve-ceph01 from 192.168.60.25 51512 22 via /dev/pts/5: ip a [0]
2024-11-18 21:23:57 root: root[9362] on pve-ceph01 from 192.168.60.25 51512 22 via /dev/pts/5: pwd [0]
2024-11-18 21:24:07 root: root[9362] on pve-ceph01 from 192.168.60.25 51512 22 via /dev/pts/5: whoami [0]
# 4、配置日志切割方案,按日志文件大小切割(正常不需要重启 logrotate 服务)
cat > /etc/logrotate.d/history_audit <<"EEOF"
/var/log/history-command.log {
size 100M
rotate 7
compress
delaycompress
missingok
notifempty
create 640 root root
postrotate
systemctl restart rsyslog
endscript
}
EEOF
# 检验配置是否正确,
logrotate -d /etc/logrotate.conf
# 并可以手动尝试触发切割
logrotate -f /etc/logrotate.conf
Tips:$SHELL不为bash的用户,不记录操作指令的解决办法(shell不是bash,PROMPT_COMMAND 不会生效)
echo $SHELL # 验证方式,
chsh -s /bin/bash test # 修改方式(将test用户的默认shell改成bash)
附、logrotate日志文件切割配置介绍(使用时,请去掉注释)
cat /etc/logrotate.d/history_audit
/var/log/history-command.log {
daily # 每天切割一次,(size 100M 也可以设置按大小切割)
rotate 7 # 保留最近 7 天的日志
compress # 压缩旧日志文件
delaycompress # 延迟到下一次切割时再压缩
missingok # 如果日志文件不存在,则跳过,不报错
notifempty # 如果日志为空,不切割
create 640 root root # 创建新的日志文件,并设置权限
postrotate
/bin/kill -HUP $(pidof rsyslogd) # 一定要给信号,不然切割后,新日志无法写到文件中,注意若是无法定位pid文件,可以使用pidof查找,或者直接systemctl restart rsyslog
endscript
}
如果文章对你有帮助,欢迎点击上方按钮打赏作者
暂无评论