如何对linux命令行进行操作审计【记录-推荐】

使用介绍

# 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
}
声明:本文为原创,作者为 辣条①号,转载时请保留本声明及附带文章链接:https://boke.wsfnk.com/archives/1419.html
谢谢你请我吃辣条谢谢你请我吃辣条

如果文章对你有帮助,欢迎点击上方按钮打赏作者

最后编辑于:2024/11/18作者: 辣条①号

目标:网络规划设计师、系统工程师、ceph存储工程师、云计算工程师。 不负遇见,不谈亏欠!

暂无评论

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注

arrow grin ! ? cool roll eek evil razz mrgreen smile oops lol mad twisted wink idea cry shock neutral sad ???

文章目录