Linux 如何排查命令执行记录及开启审计

10次阅读

共计 1898 个字符,预计需要花费 5 分钟才能阅读完成。

了解是谁执行了这个操作以及具体执行了什么命令是非常重要的。
本文将详细介绍如何反查命令的执行人

1 背景

假设在某个时间点,我们发现某个服务被重启了。且通过目前的审计手段没有查到,为了确保安全性,我们需要查明是谁在什么时间执行了命令,以及具体执行了什么命令。

2 排查过程

2.1 检查系统日志

根据一些时间、关键字,过滤出可能的命令,从中找到执行该命令的 UID,即系统用户

$ cat /var/log/messages | grep eks-server

Jul  5 16:17:07 VM-46-151-centos -bash: HISTORY: PID=8165 UID=60282 ./ceks.sh sh edit statefulset eks-server

2.2 通过 UID,查询执行用户

$ getent passwd $UID

2.3 进入用户,查看历史记录

$ su - $USER
$ cat ~/.bash_history | grep edit | grep sh | grep eks-server

3 如何开启命令记录

3.1 确保安装rsyslog

$ yum install rsyslog -y

3.2 配置记录用户操作日志

rsyslog 的配置文件通常位于 /etc/rsyslog.conf/etc/rsyslog.d/ 目录下。我们需要编辑这些配置文件来记录用户的操作日志。
打开 /etc/rsyslog.conf 文件:

$ sudo nano /etc/rsyslog.conf
# 在文件中添加以下配置,以记录用户的命令操作日志:
authpriv.* /var/log/messages

这行配置的含义是将所有 authpriv 级别的日志记录到 /var/log/messages 文件中。

3.3 配置记录命令和格式

为了确保所有用户的命令操作被记录,我们需要在全局配置文件中添加相应的配置。编辑 /etc/profile 文件:

$ sudo nano /etc/profile
# 在文件末尾添加以下内容
export PROMPT_COMMAND='history -a >(logger -t bash -i -p authpriv.info "UID=$(id -u) PID=$$ CMD=$(history 1 | sed "s/^[ ]*[0-9]\+[ ]*//")")'
HISTSIZE=3000
HISTTIMEFORMAT='%F %T '
if [ "$HISTCONTROL" = "ignorespace" ] ; then
    export HISTCONTROL=ignoreboth
else
    export HISTCONTROL=ignoredups
fi
export PATH USER LOGNAME MAIL HOSTNAME HISTSIZE HISTCONTROL

这行配置的含义是将每个命令通过 logger 命令发送到 syslog,并标记为 authpriv.info 级别,同时记录 UID、PID 和命令。

这里的配置在所有终端加载文件中都可以生效,根据需要配置即可

  • /etc/profile (对所有登陆用户生效)
  • /etc/bash.bashrc (对 su 切换用户生效)
  • /root/.bashrc (对 root 用户生效 sudo su)

附终端文件加载顺序

1. 登录 Shell:当用户通过登录终端(如 SSH 或控制台)登录时,系统会加载以下文件:
- `/etc/profile`
- 用户的 `~/.bash_profile`、`~/.bash_login` 或 `~/.profile`(按顺序查找,找到第一个就停止)
2. 非登录 Shell:当用户打开一个新的终端窗口或执行一个新 shell(如通过 `su` 命令切换用户)时,系统会加载以下文件:
- `/etc/bash.bashrc`
- 用户的 `~/.bashrc`

3.4 重启服务

配置完成后,需要重启 rsyslog 服务以使配置生效:

$ systemctl restart rsyslog

3.5 验证配置

执行一些命令,然后检查 /var/log/messages 文件,确认用户的操作日志已经被记录:

$ tail -f /var/log/messages

你应该能够看到类似以下的日志条目:

Jul  5 18:58:08 VM-8-15-centos bash[30550]: UID=1004 PID=30486 CMD=2024-07-05 18:51:11 ls
Jul  5 18:58:12 VM-8-15-centos bash[30578]: UID=1004 PID=30486 CMD=2024-07-05 18:58:12 echo
Jul  5 18:58:13 VM-8-15-centos bash[30586]: UID=1004 PID=30486 CMD=2024-07-05 18:58:13 test
正文完
 
mervinwang
版权声明:本站原创文章,由 mervinwang 2024-07-05发表,共计1898字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
文章搜索