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
脚本功能解析
-
获取用户信息
- 通过
whoami
获取当前登录的用户名。 - 通过
who -u am i
获取用户的IP地址,并清理格式。如果无法获取IP地址,则使用主机名代替。
- 通过
-
创建日志目录
- 检查
/var/log/history
目录是否存在,若不存在则创建并设置权限为777
。 - 为每个用户创建专属日志目录(
/var/log/history/${LOGNAME}
),并赋予相应的用户权限。
- 检查
-
设置历史记录大小
- 通过
export HISTSIZE=4096
,设置每个用户的history
记录最大为4096条。
- 通过
-
生成日志文件
- 每次用户登录时,生成一个以用户名、IP地址和操作时间为命名的日志文件,路径为
/var/log/history/${LOGNAME}/${USER}@${USER_IP}_$DT
。 - 日志文件中将记录用户从登录到退出的所有操作。
- 每次用户登录时,生成一个以用户名、IP地址和操作时间为命名的日志文件,路径为
3. 实施步骤与注意事项
实施步骤
-
初始化日志目录
- 手动创建
/var/log/history
目录,并确保其权限为777
。 - 为每个用户创建相应的子目录(
/var/log/history/${LOGNAME}
),并赋予相应的权限。
- 手动创建
-
修改
/etc/profile
文件- 将上述脚本追加到
/etc/profile
文件的末尾。
- 将上述脚本追加到
-
测试脚本
- 重新登录服务器,检查日志文件是否生成,并验证日志内容是否符合预期。
注意事项
- 日志文件命名:每次用户登录时,都会生成一个新的日志文件,文件名包含用户名、IP地址和操作时间,确保日志文件的唯一性。
- 日志内容:日志文件中将记录用户从登录到退出的所有操作,便于后续追溯和分析。
- 权限管理:确保日志目录和文件的权限设置合理,防止未授权访问。
4. 总结
通过自定义脚本,我们成功实现了对Linux服务器用户操作记录的详细追踪。这种方法不仅弥补了history
命令的局限性,还为服务器的安全管理提供了有力支持。无论是审计需求还是故障排查,详细的日志记录都是不可或缺的工具。
关键词:Linux操作记录、用户日志管理、服务器审计、history优化、日志追踪
适用场景:Linux服务器管理、系统审计、安全管理、故障排查