刚刚注意到虚拟容器(Ubuntu Hardy)中有一些 640MB wtmp 文件。
# last -n 10000 -f /var/log/wtmp.1|wc -l
384
# ls -hl /var/log/wtmp.1
-rw-rw-r-- 1 root utmp 641M 21. Sep 07:49 /var/log/wtmp.1
logrotate 未安装(我只是这样做并强制旋转)。
是否有记录没有显示last
(应该显示最后 1000 条记录,但显然只有 384 条)。
从快速浏览wtmp/utmp
手册页来看,单个条目似乎不应该使用大约 1.6MB。
last
除了检查这些文件之外还有其他程序吗?
答案1
logrotate
是个好主意。
与任何常规文件一样,wtmp 可能是“稀疏”的(参见 lseek(2)“漏洞”和ls -s
),它可以显示实际上占用很少磁盘的极端文件大小。如果它是一个洞的话,这个洞是怎么到那里的?getty(8)
朋友们可能有一个错误。或者系统崩溃和 fsck 修复可能导致它。
如果您希望查看 wtmp 的原始内容,od
或者hd
适合查看二进制文件,并且具有显示长时间空运行的令人愉快的副作用。
除非它再次发生,否则我不会再想太多。一个稍有能力的入侵者会做得更好,内容并不那么有趣,而且很少依赖于它们。
答案2
只是为了帮助其他可能觉得这有用的人......
last
除了检查这些文件之外还有其他程序吗?
是的,尝试一下utmpdump
。
$ utmpdump /var/log/wtmp
答案3
cp --sparse
如果您怀疑 wtmp 可能有漏洞,如果您有足够新的 coreutils,或者fallocate --dig-holes
如果您使用尚未发布的 util-linux 2.25 版本,则可以使用它们来消除它们。也许更实际的方法是重新打包 wtmp。
utmpdump /var/log/wtmp | utmpdump -r > /tmp/newtmp
ls -l /var/log/wtmp /tmp/newtmp # if significantly smaller
chown root:root /tmp/newtmp
chmod 0554 /tmp/newtmp
mv /tmp/newtmp /var/log/wtmp
即使文件相当大,也只需旋转和压缩即可。
mv /var/log/wtmp{,.1}
gzip -9 /var/log/wtmp.1
答案4
utmp
通常是稀疏的 - 它的记录由会话控制终端的主要+次要设备号索引。这确保了注销期间未能删除的“陈旧”记录最终仍将被同一终端上的下一个会话覆盖。
每次系统启动时都可以安全地擦除它;可以说它应该是,/run/utmp
但大多数发行版还没有把它放在那里。
wtmp
是不是通常是稀疏的,因为它是每次发生事件时都会附加的日志。由于它的记录是固定大小的,因此很容易以相反的顺序读取它们以显示“最近的在前”。
两个文件具有相同的记录格式,因此您可以用来读取特定文件。less -f /var/log/whatever
它不会造成任何伤害,如果wtmp
是稀疏,因为这些洞只是读取为全字节零,而被忽略了。然而,漏洞可能表明由于系统突然关闭(元数据刷新但内容丢失)而丢失记录。
带后缀的变x
体具有更大的记录结构(旧的变体没有空间容纳整个 IPv6 地址或合理的 FQDN),但其他方面的行为类似。某些版本last
可以读取这两种记录结构。