Linux系统如何同步wtmp和/var/run/utmp?

dai*_*isy 1 pam logs w

Linux系统一般将当前用户登录信息/var/run/utmp存储在/var/log/wtmp.

那么,它是如何同步它们之间的信息的,

  1. 当登录发生时,它是写入这两个文件还是稍后合并它们?
  2. /var/run/utmp 不应该是持久的,它会在系统关闭或重新启动时丢失吗?

Zel*_*lda 6

libmisc/utmp.c(对于软件包源中的 Debian login)第 301 行中,注释setutmp()如下:

/*
 * setutmp - Update an entry in utmp and log an entry in wtmp
 *
 *      Return 1 on failure and 0 on success.
 */
Run Code Online (Sandbox Code Playgroud)

实际上/var/run/utmp首先立即更新,然后通过调用写入日志updwtmp()(如果使用 PAM,则 PAM 写入日志)。在这两种情况下,信息都是明确写入的而不是同步的,因此您的第 2 点不相关。

在 Debian 系统上找到它。首先猜测谁可以编写(内核,login命令)。内核中的搜索utmpwtmp字符串没有提供太多信息。所以使用dpkg -S $(which login)来查找包名的login来源和 google for debian login package. 这将引导您shadow*.tar.gz在这些来源中找到编写utmpwtmp.