stat 返回的文件大小是否会受到影响?

stat 返回的文件大小是否会受到影响?

我想确保没有人更改文件。为了实现这一点,我不仅要检查文件的 MD5 值,还要检查其大小,因为据我所知,这个额外的简单检查可以通过几位数字来伪造。

我可以相信返回的大小stat吗?我不是说它stat本身是否发生了变化。我不去深。但是,例如,有人可以stat通过破解目录文件来损害返回的文件大小吗?或者通过类似方法,不需要超级用户权限?

它是 Linux。

答案1

你问是否有人可以通过以下方式泄露 stat 返回的文件大小破解目录文件。不,这不可能。目录只是文件名和 inode 编号的列表。所有其他文件信息(所有者、组、模式、大小等)都包含在 inode 中(至少在符合 POSIX 的文件系统中),stat 就是从那里收集这些信息的。

答案2

下面是稀疏文件的演示,其大小可能会产生误导:

$ dd if=/dev/zero of=sparse.out bs=512 seek=100000 count=0
0+0 records in
0+0 records out
0 bytes (0 B) copied, 7.5053e-05 s, 0.0 kB/s
$ echo hi>>sparse.out
$ ls -l sparse.out
-rw-r--r-- 1 user group 51200003 2010-04-13 02:09 sparse.out
$ stat sparse.out
  File: `sparse.out'
  Size: 51200003        Blocks: 24         IO Block: 4096   regular file
Device: 802h/2050d      Inode: 1111111     Links: 1
Access: (0644/-rw-r--r--)  Uid: ( 1111/  user)    Gid: ( 1111/  group)
Access: 2010-04-13 02:09:11.000000000 -0500
Modify: 2010-04-13 02:09:09.000000000 -0500
Change: 2010-04-13 02:09:09.000000000 -0500
$ hexdump -C sparse.out
00000000  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
*
030d4000  68 69 0a                                          |hi.|
030d4003
$ du sparse.out
12       sparse.out

如您所见,ls和中的字节数stat显示分配的空间,但只有的块数stat和的输出du才接近文件的实际内容。

答案3

你为什么要关心文件的大小?比较 MD5 总和可以绝对肯定地告诉你文件是否已更改。翻转文件内的位将保留文件大小,但可能是完全不同的文件。

相关内容