Centos7分用户记录历史命令至日志文件教程

电子说

1.4w人已加入

描述

在企业级Linux运维中,实时记录用户操作历史是审计排查的关键步骤。本文华纳云针对CentOS7系统,提供三种高效方案实现分用户日志记录+防篡改管理。所有步骤均经过实际验证,代码段内含执行逻辑剖析。

一、核心原理剖析

1. 原生历史记录缺陷 (~/.bash_history)

默认延迟写入:会话退出后才保存命令

易被清空:用户可通过 history -c或删除文件清除记录

混合存储:不同用户命令混合在同一文件

2. 改进方案设计要点

实时写入:通过 PROMPT_COMMAND变量实现逐条记录

独立日志:按用户名生成隔离文件

权限控制:仅允许追加写入(chattr +a)

完整元数据:记录时间/IP/用户等上下文信息

二、实战配置流程 (推荐方案)

步骤1:创建受保护日志目录

 

sudo mkdir -p /var/log/command_audit  #创建统一存放目录
sudo chmod 755 /var/log/command_audit  #设置为全局可读但不可写
sudo chown root:root /var/log/command_audit  #权限归属root
sudo chattr +a /var/log/command_audit  #启用仅追加模式防止删除

 

代码说明:

chattr +a锁定文件属性,用户无法删除或修改现有内容

/var/log为系统日志规范存放位置,便于统一管理

步骤2:全局配置脚本部署

新建配置文件:

 

sudo vim /etc/profile.d/command_logger.sh

 

内容模板?:

 

# 定义日志格式
export HISTTIMEFORMAT="%F %T `whoami` "  #时间戳+用户标识
# 实时写入逻辑
export PROMPT_COMMAND='
 CURRENT_CMD=$(history 1 | sed "s/^[ ]*//g");  #提取最新命令
 echo "${CURRENT_CMD}" | tee -a 
 "/var/log/command_audit/`whoami`-$(date +%Y%m%d).log"
 >/dev/null 2 >&1'  #按天分文件记录

 

代码说明:

PROMPT_COMMAND:每次新命令行提示符出现前触发执行

tee -a:同时输出到屏幕和日志(防丢失)

whoami与 date:动态生成带用户+日期的唯一文件名

步骤3:权限加固与审计优化

设置日志防篡改:

 

sudo touch /var/log/command_audit/*.log  #初始化空文件
sudo chmod 640 /var/log/command_audit/*.log  #仅root可写,用户只读
sudo chattr +a /var/log/command_audit/*.log  #强制追加模式

 

三、附加安全防护技巧

1. 增强版元数据记录

修改 PROMPT_COMMAND添加更多审计信息:

 

export PROMPT_COMMAND='
 REMOTE_IP=$(echo ${SSH_CONNECTION} | awk "{print $1}");  #获取客户端IP
 LOG_TIME=$(date "+%Y-%m-%d %H:%M:%S");  #精确到秒的时间
 CMD_CONTENT=$(history 1 | sed "s/^[ ]*//g");  #提取命令
 echo "${LOG_TIME} | ${REMOTE_IP} | ${USER} | ${CMD_CONTENT}" 
 > > /var/log/command_audit/${USER}.audit.log'

 

2. 定期日志转储策略

新增 logrotate配置文件:

 

sudo vim /etc/logrotate.d/command_audit 

 

内容模板:

 

/var/log/command_audit/*.log {
    daily        #每日切割
    rotate 90    #保留90天
    compress     #启用压缩
    missingok    #允许文件不存在
    notifempty   #空文件不处理
}

 

四、效果验证与问题排查

1. 实时验证

新开终端执行:

 

tail -f /var/log/command_audit/testuser.log  #实时追踪日志

 

2. 关键故障点分析

权限不足:检查 chattr +a和目录所有权

SELinux拦截:查看 /var/log/audit/audit.log过滤关键字

时区错误:使用 timedatectl确认系统时间配置

多会话覆盖:确认 shopt -s histappend已启用历史追加模式

五、扩展应用场景

容器环境适配:Docker镜像构建时预置配置

自动化巡检:通过ELK搭建集中式日志分析平台

高危命令告警:结合grep实时监控 rm -rf等危险操作

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分