为什么shadow文件的inode值会改变?

4
我为影子文件创建了一个硬链接。为了删除用户的密码,我在vi编辑器中打开了影子文件并删除了加密密码,然后保存。影子文件的inode值被改变。然后我更新了用户的密码,再次影子文件的inode值改变。为什么影子文件的inode会在编辑/更新时更改?

我认为这个问题与编程无关。 - glglgl
2个回答

2
VI将数据保存在一个新文件中,然后取消链接或重命名旧的目录条目。硬链接连接到旧的目录条目。
这是保证数据一致性的两种方法之一,以防保存失败。
另一种方法是复制旧文件,然后进行覆盖。旧副本将具有不同的inum,而新保存的文件将与以前相同。

0
处理文件写入的代码在文件被写入之前会创建一个完整文件的副本,以便它应该存在于磁盘上。一旦文件已经被写入磁盘并刷新,它将被重命名为正确的名称(/etc/shadow或/etc/gshadow,用于组影子文件)。
问题不仅仅是数据一致性。有少量文件必须存在才能使用系统,而安全文件就是其中之一。目标是避免出现这样的情况:系统崩溃或相关命令被挂起(Ctrl-Z键或SIGSTOP...),而文件处于不安全状态。 "不安全"也可能包括 "不存在" - 非原子地重命名文件可能会留下一个时间间隔,在此期间 /etc/shadow 文件根本不存在。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接