共计 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