CentOS历史命令查询、用户操作审计

目录

历史命令查询

常规方法

直接解析历史命令文件(推荐)

用户操作审计

sudo日志

audit日志

systemd日志(推荐)


历史命令查询

常规方法

# 显示历史命令
history

# 增加时间显示:
# 临时生效
export HISTTIMEFORMAT="%F %T "
# 永久生效
vim ~/.bashrc
export HISTTIMEFORMAT="%F %T "
source ~/.bashrc

存在的问题:实际执行可能不支持历史命令时间显示

-bash: HISTTIMEFORMAT: readonly variable

直接解析历史命令文件(推荐)

import time

history_path = r'/root/.bash_history'

lines = open(history_path, 'r').readlines()[1:]
for i in range(1000, len(lines), 2):
    time_num = int(lines[i].rstrip()[1:])
    time_stamp = time.localtime(time_num)
    time_str = time.strftime('%Y%m%d-%H%M%S', time_stamp)
    history = lines[i+1].rstrip()
    print('{}\t{}\t{}'.format(int(i / 2) + 1, time_str, history))
print(len(lines))

用户操作审计

sudo日志

# 查看sudo日志
cat /var/log/sudo.log
# 查看用户日志
cat /var/log/auth.log

存在的问题:实际可能不存在sudo相关日志

audit日志

# 查看audit日志:
cat /var/log/audit/audit.log
# 查找rm命令相关的日志:
ausearch -i -c rm
# 搜索包含rm关键字的日志:
ausearch -k rm

日志格式:

/var/log/audit/audit.log 是 Linux 系统中用于记录审计日志的文件,其中包含了系统操作的详细记录。每条日志都有特定的格式,通常包括以下几个字段:

  1. 时间戳:记录事件发生的时间,通常以日期和时间的形式呈现。
  2. 主机名:记录事件发生的主机名或 IP 地址。
  3. 事件类型:表示事件的类型,如 SYSCALL(系统调用)、EXECVE(执行程序)等。
  4. 用户名:执行操作的用户。
  5. 进程 ID:与事件相关的进程的标识符。
  6. 主题:描述事件所涉及的对象或资源。
  7. 动作:描述事件执行的具体操作。
  8. 结果:操作的结果,通常是成功或失败的标识。

一个典型的审计日志条目如下所示:

type=SYSCALL msg=audit(1623601161.930:254): arch=c000003e syscall=59 success=yes exit=0 a0=1d46a70f8c a1=1d46a70f72 a2=1d46a70ff8 a3=7fffdbc391d0 items=2 ppid=100 pid=101 auid=1000 uid=0 gid=0 euid=0 suid=0 fsuid=0 egid=0 sgid=0 fsgid=0 tty=pts0 ses=1 comm="ls" exe="/bin/ls"

上述示例中,type=SYSCALL 表示事件类型为系统调用,msg=audit 后的时间戳表示事件发生时间,uid=0 表示执行操作的用户为 root 用户,comm="ls" 表示执行了 ls 命令等等。

存在的问题:如果用户通过SSH登录,可能不会显示具体命令,事件类型CRYPTO_KEY_USER通常用于记录加密密钥用户相关的操作,而不是用户执行的具体命令:

type=CRYPTO_KEY_USER msg=audit(1714415.536:6045): pid=36936 uid=0 auid=4297295 ses=4294295 msg='op=destroy kind=session fp=? direction=from-client spid=36538 suid=0 rport=4207 laddr=192.168.0.10 lport=22  exe="/usr/sbin/sshd" hostname=? addr=192.168.0.20 terminal=? res=success'UID="root" AUID="unset" SUID="root"

添加审计规则:

# 查看当前已配置的审计规则
auditctl -l
# 添加审计规则监视用户执行rm命令的操作
auditctl -a always,exit -F arch=b64 -S unlink -S unlinkat -S rename -S renameat -k rm
# 重启服务
systemctl enable auditd
systemctl restart auditd

存在的问题:实际可能不支持audit服务重启

Failed to restart auditd.service: Operation refused, unit auditd.service may be requested by dependency only (it is configured to refuse manual start/stop).
See system logs and 'systemctl status auditd.service' for details.

尚未尝试的方法:系统重启

systemd日志(推荐)

# 查看systemd日志
journalctl
journalctl > log.txt
# -x: 显示完整的内容,包括消息、触发器、行号等。
# -e: 直接跳转到日志文件的最后,显示最新的日志。
journalctl -xe

实际操作发现systemd日志记录了所有历史命令和对应的SSH主机信息

GPT!未来可期!

  • 26
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值