Linux 审计用户执行的命令

Linux系统中需要对用户输入的命令进行审计记录,系统自带有 history 功能,但是默认显示的内容有限,且 root 用户需要要看全部用户的操作记录,需要查看所有用户 home 目录下的 .bash_histroy 文件,而且默认查看到的 histroy 命令记录所记录的信息有限,只有命令内容,没有记录所运行的时间、当时登录执行操作的来源 ip ,无法满足实际的审计需求。

默认能使用 shell 的用户基本都是 bash shell ,bash 有一个内置的环境变量 PROMPT_COMMAND,这个环境变量的内容会在 bash 显示提示符之前,作为常规的 bash 命令运行。
即在你运行命令回车之后,显示下一个命令行之前,运行 PROMPT_COMMAND 里面的内容,如下图。
在这里插入图片描述
所以基于审计的需求,可以使用 PROMPT_COMMAND 的方式来将所有用户的命令都集中记录到某个文件去,最后统一对检查该文件就可以知道各个用户的命令执行信息。

配置方式:在 /etc/profile 最后新增以下内容。(如连续运行多次同个命令,则最终在文件中只会记录第一次运行的记录)

export PROMPT_COMMAND="HistID0=\$(history 1|awk '{print \$1}'); \
lastcommand=\$(history 1|awk '{\$1=\"\" ;print}');\
login_pid=\$(who -u am i | awk '{print \$(NF-1)}')
login_ip=\$(who -u am i | awk -F '\\\(|\\\)' '{print \$2}'); \
if [ \${HistID0}x != \${HistID1}x ];then \
echo -E [\$(date \"+%Y/%m/%d %H:%M:%S\")] [sshpid:\${login_pid}] [fromip:\${login_ip}] [\$(id -un)@\$(hostname) \$(pwd)]  \${lastcommand} >> /var/log/cmd_audit.log; \
HistID1=\${HistID0}; \
fi;"

效果图如下。
在这里插入图片描述

PROMPT_COMMAND 编写需要注意:

  1. PROMPT_COMMAND 所涉及到的命令内容,不是直接运行,而是为了应用之后,以原始的命令在运行命令前应用运行,所以涉及到变量或者命令时,如 ${var1} 或 $(date) ,$ 需要使用 \ 进行转义
  2. 建议使用双引号 " " 包含内容,用单引号也可以,但是如果内容中涉及到的命令内容也必须使用到单引号,则会有出现无法识别解释的情况,内容中涉及到的命令内容使用到双引号时,也许同样使用 \ 进行转义

参考链接:
https://tldp.org/HOWTO/Bash-Prompt-HOWTO/x264.html
https://tldp.org/HOWTO/Bash-Prompt-HOWTO/x279.html
https://spin.atomicobject.com/2016/05/28/log-bash-history/ (空内容回车会重复记录上一条命令)
https://stackoverflow.com/questions/3058325/what-is-the-difference-between-ps1-and-prompt-command

https://jaminzhang.github.io/shell/PROMPT-COMMAND-in-bash-shell/
https://www.jianshu.com/p/0749ddc6b760
https://www.cnblogs.com/music378/p/7429088.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值