CentOS 操作记录
背景和起因
在 Linux 服务器上,尤其是 CentOS 系统中,记录用户的操作日志是一项重要的任务,系统管理员会使用history
命令来查看用户的命令历史,但这种方法存在一些局限性,例如默认只保存最近的 1000 条命令,无法详细记录用户的来源 IP 地址、操作时间等信息,为了更全面地记录所有用户的操作,我们需要采用更复杂的方法来实现这一目标。
自动记录脚本
为了实现详细的用户操作记录,可以在/etc/profile
文件的末尾追加以下脚本:
set user history 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
命令获取当前登录用户的用户名。
获取用户 IP 地址:通过who u am i
命令获取用户的 IP 地址,并使用awk
和sed
进行处理,如果没有获取到 IP 地址,则使用主机名代替。
创建日志目录:检查是否存在/var/log/history
目录,如果不存在则创建,并设置适当的权限。
用户专属目录:为每个用户在日志目录下创建专属目录,并设置权限。
设置历史记录文件:将用户的历史记录文件路径设置为/var/log/history/${LOGNAME}/${USER}@${USER_IP}_$DT
,其中包含用户名、登录 IP 地址和操作时间。
修改历史记录大小:将HISTSIZE
设置为 4096,确保保存更多的历史记录。
效果
每次用户登录到退出系统时,都会生成一个以用户名、登录 IP 地址和操作时间为文件名的日志文件,文件里面包含本次用户的所有操作记录。
查看和清除历史记录
查看历史记录
要查看当前用户执行过的命令,可以使用history
命令:
history
如果不加参数,默认显示全部操作记录。
清除历史记录
要清除所有历史记录,可以使用以下命令:
history c
执行完后可以再执行一次history
命令查看是否成功清除。
要删除特定的历史记录,可以使用d
参数,后面跟上要删除的记录编号:
history d 2
这将删除编号为 2 的历史记录。
常见问题解答(FAQs)
问题1:如何修改历史记录的文件数限制?
默认情况下,history
命令只保存最近的 1000 条命令,可以通过修改/etc/profile
文件中的HISTSIZE
变量来增加保存的历史记录数,将HISTSIZE
设置为 4096:
export HISTSIZE=4096
然后重新加载配置文件或重新启动终端:
source /etc/profile
问题2:如何查看特定用户的操作记录?
每个用户的操作记录都保存在/var/log/history/${LOGNAME}
目录下,文件名格式为${USER}@${USER_IP}_$DT
,要查看特定用户的操作记录,可以导航到该目录并查看相应的日志文件,要查看用户admin
的操作记录,可以使用以下命令:
cd /var/log/history/admin ls l cat admin@192.168.1.1_20240705_123045
这将列出admin
用户的所有操作记录文件,并显示指定文件的内容。