通过系统自带的历史记录命令、审计日志模块以及虚拟化平台的管理日志这三大路径,即可完整还原操作轨迹。无论是排查故障还是安全审计,多数情况下不需要第三方工具,但前提是你得知道去哪个文件里找、用哪条命令捞数据。
云服务器查看操作记录命令的前提条件
想在虚拟机上查历史操作,得先搞清楚我们面对的是哪种环境,绝大多数云服务器默认的Linux发行版都带bash或zsh,记录操作的关键在于Shell的历史记录文件,你需要确认当前用户的家目录下有.bash_history或.zsh_history文件,并且Shell配置没有禁用历史记录功能,部分云厂商的镜像会做精简,遇到过直接清空该文件的情况,遇上了别慌,还有第二道保险。
同时需要确认你有sudo权限,因为查看审计日志和别的用户的操作记录时,普通用户的权限通常是受限的,没有权限的话,先联系管理员授权,后续步骤才能走通。
通过history命令查看当前会话操作记录
这是最直接的办法,适用于登录虚机后想知道自己或当前用户最近的敲了哪些命令,直接在终端输入history就能列出带序号的历史命令列表,默认显示最近1000条,这个数字不同发行版设置不同,CentOS和Ubuntu默认值就有差异。
几个实用的用法:
history 50:只显示最近50条!1080:快速重新执行编号为1080的命令history | grep ssh:筛选包含“ssh”字符的记录history -c:清空当前历史记录(如果你有洁癖可以用)
有个细节容易被忽略:history命令显示的记录是当前已经退出的Shell会话留下的,如果你在某个终端里连续敲了10条命令但没关闭窗口,这些命令可能还没写入.bash_history文件,强制写入用history -w,立即把当前缓冲区的历史记录落盘。
深入Linux审计日志查看虚机操作记录
history只能覆盖当前用户,而且动作快的用户顺手执行unset HISTORY HISTFILE就能抹掉痕迹,行业共识认为,真正可靠的记录藏在系统审计日志里,以RHEL系发行版为例,重点排查
/var/log/secure和/var/log/audit/audit.log。
/var/log/secure记录的是认证和权限变更事件,包括谁在什么时间通过SSH登录、是否切换了root身份、有哪些失败的登录尝试,用这条命令精准抽取登录行为:
cat /var/log/secure | grep -i "session opened"
audit.log更加底层,叫审计子系统,由内核直接记录系统调用,属于不可逆的记录,查询执行过useradd命令的操作轨迹可以这样:
ausearch -k user_add -i
需要先确认在/etc/audit/rules.d/audit.rules里配置了-w /usr/sbin/useradd -p x -k user_add监控规则,没有规则的话日志里不会有对应的记录,场地访问受限的情况下,用journalctl -u auditd查看auditd服务自身的运行状态。
用last和who命令反向排查虚拟机登录痕迹
这类命令不属于交互式命令记录范畴,而是读取二进制日志文件/var/log/wtmp,专门回答“谁在哪天几点几分登过机”这个问题。
last命令输出完整的登录记录,包含用户、终端、来源IP、时间、会话时长。last -10只看最后10条。last root只看root用户的登录情况。
lastb命令同样重要,它专门查看失败的登录尝试,实测发现暴力破解的IP基本都会在这里露出马脚,如果lastb提示没有权限或者没有日志,多半是/var/log/btmp文件轮转或者未创建。
其运行机制为:每次SSH连接建立和断开,系统都会自动向wtmp和btmp文件追加记录,需要留意,这些文件不能直接cat,会显示乱码,必须通过last系列命令读取。
VMware虚拟机历史操作记录具体查看方式
以VMware Workstation为例,它本身不记录客户机内部的命令操作,但记录了资源层面的操作活动,打开虚拟机目录,找到.vmx配置文件和.log后缀的日志文件,使用记事本程序打开查看内容。
主要包含:
- 虚拟机的启动、挂起、恢复时间节点
- 硬件配置变更操作记录,如添加硬盘
- 快照创建与删除的时间信息
ESXi环境则不同,我们可以借助vCenter的审计日志整体回顾操作行为,登录vCenter管理界面,在“监控”或“系统日志”的位置检索虚拟机相关的任务操作,整理下来,VMware平台的日志解决的是基础设施操作查询,而虚拟机内部的命令操作需要依赖客户机系统日志。
针对无法直接登录云服务器的场景,云厂商控制台的关键操作记录同样值得优先查阅,大多数情况下,通过控制台-审计日志或事件追踪模块,能够查询到重装系统、调整配置、安全组变更等操作的行为记录,以下汇总了常见场景的参考处理思路:
| 需求场景 | 参考路径 | 所需权限 |
|---|---|---|
| 查看云服务器控制台操作 | 对应云厂商控制台-日志服务 | 主账号或授权子账号 |
| 排查Linux命令输入记录 | 用户家目录.bash_history |
对应用户权限 |
| 审计全部登录行为 | /var/log/secure或journalctl |
root或sudo |
| 追溯进程级系统调用 | auditd审计日志 |
root,需配置规则 |
| 检测SSH暴力破解来源 | lastb命令 |
root |
| 虚拟机自身事件的追踪 | vmware.log |
虚机所在宿主机文件权限 |
操作记录被清空空怎么办的应对思路
如果发现.bash_history是空的,或者对方执行了rm -rf .bash_history,不要立刻下结论认为查无可查,有两条间接路径可作为兜底:
第一招,翻/var/log/messages或/var/log/syslog,大部分命令执行产生的网络连接、进程调用、cron任务日志都会出现在这里,虽然拼不出完整的命令语句,但能推断出大致的行为时间线。
第二招,检查用户的~/.viminfo文件,如果对方用vim编辑过文件,这个文件里会留下编辑过的文件名和时间戳,属于比较容易忽略的痕迹,对还原操作场景有相当帮助。
审计日志文件本身的完整性也值得关注,logrotate默认配置下日志会定期切割或清理,缩短保留期会导致历史窗口变窄,生产环境建议在
/etc/audit/auditd.conf中将max_log_file_action调整为keep_logs,并且考虑将日志远程转发到独立的存储节点做集中留存,批量处理云服务器记录时,建议统一规划日志目录挂载到独立数据盘,避免虚拟机快照回滚导致操作记录连坐丢失。
虚拟主机蓝屏信息的排查技巧
“蓝屏”这个词很容易让人联想到Windows虚拟机,Windows虚机中查看历史操作记录的方式与Linux完全不同,主要依赖事件查看器,在虚机内按Win+R输入eventvwr.msc并回车,打开Windows日志-系统分支,筛选事件ID 6009和6006分别对应系统启动和意外关闭的时间,筛选事件ID 41代表断电或崩溃恢复记录,这种排查技巧在处理Windows虚机维护反馈时有实际意义,通过比对系统日志与应用日志,能够梳理出崩溃前的操作行为轨迹。
运维视角建议加看Windows的PowerShell历史记录文件路径:%APPDATA%\Microsoft\Windows\PowerShell\PSReadLine\ConsoleHost_history.txt,这个文件记录了PowerShell会话中输入的命令行。
更多使用疑问的及时解答
改掉history命令记录会背上安全责任风险吗
普通操作者手动清除个人命令历史,常见于隐私保护的诉求,并不会直接触发安全告警,但从管理视角而言,这类行为会加大异常行为追溯的难度,部分高安全级别环境已将修改或删除历史记录作为违规行为纳入审计条款,生产环境内按要求保留完整操作日志。
如何防止其他用户查看我的虚拟机的历史记录?
在Linux系统中,各个用户的历史记录文件默认归属各自的家目录,权限设置为600,运维人员可使用“账户权限最小化”策略,交互式登录只分配给有实际诉求的角色,同时借助chattr +a命令给历史记录文件增加追加属性,该命令需要root权限执行,可有效防御文件被覆盖或删除。
云厂商提供的日志服务能替代系统自带的history吗
日志服务大多展示控制台操作层面的行为轨迹,而虚拟机的Shell内部操作依然只能通过客户机的历史记录和审计日志查看,两者相互补充,无法替换。
首发原创文章,作者:王坚,如若转载,请注明出处:https://idctop.com/article/630405.html





