我想在一个日志行中获取以下格式的日志:
user_x executed command_y
我找到了以下解决方案:
但这里它只保存用户执行的命令root
。
我也尝试过使用审核规则,但上述解决方案对于我的用例来说更准确。
审核规则将日志保存在不同类型的不同行中:(SYSCALL
用户信息)、EXECVE
(执行的命令参数)等。相反,我需要在一个日志行中保存这些信息。
我已按照以下步骤操作:
编辑
/etc/rsyslog.d/bash.conf
:vim /etc/rsyslog.d/bash.conf
并添加以下内容:
local6.* /var/log/commands.log
打开
/root/.bashrc
:vim /root/.bashrc
并输入以下内容:
# Enable CLI Logging whoami="$(whoami)@$(echo $SSH_CONNECTION | awk '{print $1}')"export PROMPT_COMMAND='RETRN_VAL=$?;logger -p local6.debug "$whoami [$$] $(history 1 | sed "s/^[ ]*[0-9]\+[ ]*//" )"'
重启
rsyslog
服务:sudo service rsyslog restart
/var/log/commands.log
通过上述,日志以以下格式保存:
Aug 13 10:10:31 ip-172-31-3-192 ec2-user: root [19399] cat /var/log/commands.log
sudo su
并且仅当我使用(root)时才会保存命令。如果我退出sudo su
并执行任何命令,那么这些命令不会保存在/var/log/commands.log
.
希望这一点是清楚的。
答案1
谢谢鲍勃和https://askubuntu.com/questions/93566/how-to-log-all-bash-commands-by-all-users-on-a-server/93570#93570,我正在发布我根据上述解决方案在我的案例中遵循的步骤(我使用的是 Amazon Linux):
编辑
/etc/bashrc
:sudo -e /etc/bashrc
并添加这一行:
export PROMPT_COMMAND='RETRN_VAL=$?;logger -p local6.debug "$(whoami) [$$]: $(history 1 | sed "s/^[ ]*[0-9]\+[ ]*//" )"'
运行以下命令来加载更改:
source /etc/bashrc
编辑
/etc/rsyslog.d/bash.conf
:sudo -e /etc/rsyslog.d/bash.conf
并添加以下行:
local6.* /var/log/commands.log
编辑
/etc/logrotate.d/syslog
:sudo -e /etc/logrotate.d/syslog
并添加以下行:
/var/log/commands.log
重启
rsyslog
服务:sudo service rsyslog restart
结果将类似于以下内容,您还可以看到 root 和其他用户执行的命令:
Aug 13 13:39:02 ip-172-31-3-192 ec2-user: root [23275]: rm logrotate.d/rsyslog [0]
Aug 13 13:39:08 ip-172-31-3-192 ec2-user: root [23275]: cat logrotate.d/rsyslog [1]
Aug 13 13:39:23 ip-172-31-3-192 ec2-user: root [23275]: sudo cat /var/log/commands.log [0]
Aug 13 13:39:27 ip-172-31-3-192 ec2-user: root [23275]: sudo cat /var/log/commands.log [0]
Aug 13 13:46:22 ip-172-31-3-192 ec2-user: ec2-user [17012]: sudo su [0]
Aug 13 13:46:54 ip-172-31-3-192 ec2-user: ec2-user [17012]: sudo /etc/rsyslog.d/bash.conf [1]
Aug 13 13:47:00 ip-172-31-3-192 ec2-user: ec2-user [17012]: sudo cat /etc/rsyslog.d/bash.conf [0]
Aug 13 13:47:10 ip-172-31-3-192 ec2-user: ec2-user [17012]: cat /etc/rsyslog.d/bash.conf [0]