我的 /var/log/lastlog 文件非常大。我知道它实际上只有几千字节,但 tar 不够智能,无法知道这一点,因此当我对虚拟机进行映像时,还原会失败,因为它认为我试图加载的数据超出了我磁盘的容量。
我想删除 /var/log/lastlog 并停止对文件的所有日志记录。我知道这会带来安全隐患。需要停止此日志记录以保留我的备份策略。
我对 /etc/pam.d/login 进行了更改,据说这将禁用对 /var/log/lastlog 的日志记录,但由于 /var/log/lastlog 不断增长,它似乎不起作用。
# Prints the last login info upon succesful login
# (Replaces the `LASTLOG_ENAB' option from login.defs)
#session optional pam_lastlog.so
有任何想法吗?
编辑
对于任何感兴趣的人,我使用 Centrify Express 通过 LDAP 对我的用户进行身份验证。Centrify Express 是“免费的”,但缺点之一是我无法通过 LDAP 管理用户 UID,因此当他们登录到服务器时,他们会被赋予一个动态 UID。Centrify 选择了一些非常高的 UID 值(因此它们不会与服务器上的本地用户发生冲突,大概)。/var/log/lastlog 由 UID 索引,并会增长以容纳系统上最大的 UID。这意味着当 Centrify 用户登录时,他们会获得 UID 范围上限的 UID,这会导致 lastlog 根据文件系统分配大量的空间。
~$ ll /var/log/lastlog
-rw-rw-r-- 1 root root 291487675780 Apr 10 16:37 /var/log/lastlog
~$ du -h /var/log/lastlog
20K /var/log/lastlog
更多内容 --->稀疏文件
答案1
尝试这个命令:
ln -sfn /dev/null /var/log/lastlog
答案2
我认为,这里最好的解决方案是使用 tar 的 -S / --sparse 选项来正确处理稀疏文件。
答案3
如果第三方正在使用您的系统 tar,请将 tar 重命名为 tar.real;然后创建一个名为 tar 的脚本,该脚本仅在被第三方软件调用时才使用 -S。
更好的是,通过包装脚本调用第三方,该脚本在 PATH 前面添加一个特殊的 bin 目录,其中有 tar 的包装器,只有当第三方不使用绝对路径时才有效。
答案4
我正在使用带有 systemd 的 Arch Linux。这对我来说很有效。
以 root 身份:
1. systemctl stop systemd-update-utmp
systemctl disable systemd-update-utmp
systemctl mask systemd-update-utmp
cp /usr/lib/tmpfiles.d/var.conf /etc/tmpfiles.d/
vi 或 nano /etc/tmpfiles.d/var.conf
注释掉这三行:
#f /var/log/wtmp 0664 root utmp -
#f /var/log/btmp 0660 root utmp -
#f /var/log/lastlog 0664 root utmp -从 /var/log 中删除有问题的 3 个文件
完毕。