1. 问题背景:为什么需要详细的操作记录?

最近,我们的Linux服务器上一些文件被篡改,但由于缺乏详细的操作记录,无法追查具体原因。为了解决这一问题,我们需要找到一种方法来记录所有用户的操作行为,以便后续排查和分析。

虽然常用的history命令可以记录操作历史,但它存在以下局限性:

  • 默认只保存最近的1000条记录。
  • 无法记录详细的用户来源信息(如IP地址)。
  • 无法记录具体的操作时间。
  • 无法区分不同用户的操作记录。

因此,仅依赖history无法满足需求,我们需要通过自定义脚本来实现更详细的操作日志记录。


2. 解决方案:自动记录用户操作日志

为了记录更详细的操作日志,我们可以在/etc/profile文件的末尾追加以下脚本:

# 设置用户操作历史记录
history
USER=`whoami`
USER_IP=`who -u am i 2>/dev/null| awk '{print $NF}'|sed -e 's/[()]//g'`
if [ "$USER_IP" = "" ]; then
    USER_IP=`hostname`
fi
if [ ! -d /var/log/history ]; then
    mkdir /var/log/history
    chmod 777 /var/log/history
fi
if [ ! -d /var/log/history/${LOGNAME} ]; then
    mkdir /var/log/history/${LOGNAME}
    chown -R ${LOGNAME}:${LOGNAME} /var/log/history/${LOGNAME}
    chmod 770 /var/log/history/${LOGNAME}
fi
export HISTSIZE=4096
DT=`date +"%Y%m%d_%H:%M:%S"`
export HISTFILE="/var/log/history/${LOGNAME}/${USER}@${USER_IP}_$DT"
chmod 660 /var/log/history/${LOGNAME}/*history* 2>/dev/null

脚本功能解析

  1. 获取用户信息

    • 通过whoami获取当前登录的用户名。
    • 通过who -u am i获取用户的IP地址,并清理格式。如果无法获取IP地址,则使用主机名代替。
  2. 创建日志目录

    • 检查/var/log/history目录是否存在,若不存在则创建并设置权限为777
    • 为每个用户创建专属日志目录(/var/log/history/${LOGNAME}),并赋予相应的用户权限。
  3. 设置历史记录大小

    • 通过export HISTSIZE=4096,设置每个用户的history记录最大为4096条。
  4. 生成日志文件

    • 每次用户登录时,生成一个以用户名、IP地址和操作时间为命名的日志文件,路径为/var/log/history/${LOGNAME}/${USER}@${USER_IP}_$DT
    • 日志文件中将记录用户从登录到退出的所有操作。

3. 实施步骤与注意事项

实施步骤

  1. 初始化日志目录

    • 手动创建/var/log/history目录,并确保其权限为777
    • 为每个用户创建相应的子目录(/var/log/history/${LOGNAME}),并赋予相应的权限。
  2. 修改/etc/profile文件

    • 将上述脚本追加到/etc/profile文件的末尾。
  3. 测试脚本

    • 重新登录服务器,检查日志文件是否生成,并验证日志内容是否符合预期。

注意事项

  • 日志文件命名:每次用户登录时,都会生成一个新的日志文件,文件名包含用户名、IP地址和操作时间,确保日志文件的唯一性。
  • 日志内容:日志文件中将记录用户从登录到退出的所有操作,便于后续追溯和分析。
  • 权限管理:确保日志目录和文件的权限设置合理,防止未授权访问。

4. 总结

通过自定义脚本,我们成功实现了对Linux服务器用户操作记录的详细追踪。这种方法不仅弥补了history命令的局限性,还为服务器的安全管理提供了有力支持。无论是审计需求还是故障排查,详细的日志记录都是不可或缺的工具。

关键词:Linux操作记录、用户日志管理、服务器审计、history优化、日志追踪

适用场景:Linux服务器管理、系统审计、安全管理、故障排查