Linux系统通常将当前用户登录信息存储在 中/var/run/utmp
,将历史信息存储在 中/var/log/wtmp
。
那么,它们之间是如何同步信息的,
- 当登录发生时,它会写入这两个文件还是稍后合并它们?
- /var/run/utmp 不应该是持久的,并且它会在系统关闭或重新引导时丢失?
答案1
在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.
*/
实际上/var/run/utmp
首先更新,然后立即通过调用写入日志updwtmp()
(如果使用PAM,则PAM写入日志)。在这两种情况下,信息都是明确写入且不同步的,因此您的第 2 点不相关。
在 Debian 系统上找到它。首先猜测谁可以编写(内核、login
命令)。内核中的搜索utmp
和wtmp
字符串没有提供太多信息。因此,请使用dpkg -S $(which login)
查找包名称的来源login
和 google for debian login package
。这将引导您在这些源中找到编写和shadow*.tar.gz
的代码。utmp
wtmp