为什么更改 root 密码后 /etc/nshadow 文件仍然存在?

为什么更改 root 密码后 /etc/nshadow 文件仍然存在?

我在linux中更改root密码后发现一些异常情况。当我ls -al /etc/ | grep shadow更改root密码后输入时,结果如下。

-r--------  1 root root   653 Mar  9  2018 gshadow
-r--------  1 root root   800 Jul 25 06:43 shadow
-r--------  1 root root   796 Jul 25 06:43 shadow-

但有时结果与上面不同。

-r--------  1 root root   653 Mar  9  2018 gshadow
-r--------  1 root root   ?   Jul 25 06:43 nshadow
-r--------  1 root root   ?   Jul 25 06:43 shadow
-r--------  1 root root   ?   Jul 25 06:43 shadow-

我只是展示一个示例,不记得这些文件的确切大小(nshadow、shadow、shadow-)。

据我研究,/etc/nshadow更改密码时由passwd写入,然后passwd只是重命名/etc/nshadow/etc/shadow.但我不知道这是正确的。

无论如何,这是什么/etc/nshadow?为什么会生成这个文件?请告诉我原因:(

答案1

是的,该passwd命令首先将文件的修改内容/etc/shadow完整写入/etc/nshadow,运行fsync()以确保 nshadow 文件确实写入磁盘,然后重命名/etc/nshadow/etc/shadow

这样做是为了消除出现不完整文件的可能性/etc/shadow,即使是在最短的时间内。 POSIX 规范规定单个文件系统中的文件重命名操作必须是原子,即任何其他操作必须只能将重命名操作视为“尚未开始”或“完全完成”,而绝不能处于任何类型的“正在进行”中途状态。

当您使用该命令将陈旧的非阴影密码文件转换为阴影格式时,该pwconv命令还将生成/etc/npasswd和。/etc/nshadow某些版本pwconv可能需要系统管理员手动将这些文件移动到位。

如果您的系统上存在,它可能是过去某个时间运行的命令/etc/nshadow的残余......或者可能是因为某些密码更改操作结束时的系统调用失败而存在。此类失败表明可能存在文件系统损坏或其他问题。pwconvrename("/etc/nshadow", "/etc/shadow")

如果文件的时间戳nshadowJul 25 06:43,那么您可能想了解当时系统上发生了什么。是否存在某种问题已被修复,或者是否有人pwconv出于任何原因运行了该命令?

如果使用某种自动化工具更改了 root 密码,您可能想确切地了解该自动化工具实际上会做什么。也许无论pwconv出于什么原因它都会运行。

相关内容