如何记录所有用户执行的所有命令

如何记录所有用户执行的所有命令

我想在一个日志行中获取以下格式的日志:

user_x executed command_y

我找到了以下解决方案:

但这里它只保存用户执行的命令root

我也尝试过使用审核规则,但上述解决方案对于我的用例来说更准确。

审核规则将日志保存在不同类型的不同行中:(SYSCALL用户信息)、EXECVE(执行的命令参数)等。相反,我需要在一个日志行中保存这些信息。

我已按照以下步骤操作:

  1. 编辑/etc/rsyslog.d/bash.conf

    vim /etc/rsyslog.d/bash.conf
    

    并添加以下内容:

    local6.*    /var/log/commands.log
    
  2. 打开/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]\+[ ]*//" )"'
    
  3. 重启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):

  1. 编辑/etc/bashrc

    sudo -e /etc/bashrc
    

    并添加这一行:

    export PROMPT_COMMAND='RETRN_VAL=$?;logger -p local6.debug "$(whoami) [$$]: $(history 1 | sed "s/^[ ]*[0-9]\+[ ]*//" )"'
    
  2. 运行以下命令来加载更改:

    source /etc/bashrc
    
  3. 编辑/etc/rsyslog.d/bash.conf

    sudo -e /etc/rsyslog.d/bash.conf
    

    并添加以下行:

    local6.*    /var/log/commands.log
    
  4. 编辑/etc/logrotate.d/syslog

    sudo -e /etc/logrotate.d/syslog
    

    并添加以下行:

    /var/log/commands.log
    
  5. 重启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]

相关内容