在 CentOS 中,可以通过修改bash的配置来记录所有用户的命令历史到日志文件。以下是一种常见的实现方法:
配置bash
编辑/etc/profile文件(这个文件是系统范围的配置文件,对所有用户生效)。
在文件末尾添加以下内容:
bash
export PROMPT_COMMAND='{ msg=$(history 1 | { read x y; echo $y; }); logger -p local0.notice -t "[$USER]" "$msg"; }'
上述代码的解释:
PROMPT_COMMAND是bash的一个环境变量。bash在显示每个提示符之前都会执行这个变量所定义的命令。
history 1获取当前用户执行的最后一条命令。read x y从history命令的输出中读取,这里x是命令的编号,y是命令本身,echo $y输出命令内容。
logger是一个系统日志工具,-p local0.notice指定日志级别为local0.notice,-t "[$USER]"为日志添加一个标签,包含当前用户的名字,"$msg"是要记录的命令内容。
配置rsyslog(日志服务)
编辑/etc/rsyslog.conf文件。
找到以下行(如果没有就添加):
local0.notice /var/log/command.log
这行的意思是将local0.notice级别的日志信息发送到/var/log/command.log文件中。
重启rsyslog服务,使配置生效:
service rsyslog restart
通过以上步骤,所有用户在bash中执行的命令都会被记录到/var/log/command.log文件中。不过要注意,这种方法可能会对系统性能产生一定的影响,尤其是在高负载的服务器环境中,因为每次执行命令都要进行日志记录操作。