stat 返回的文件大小可能会受到影响吗?

cod*_*lic 0 security linux files filesystems stat

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

我可以相信stat返回的尺寸吗?我不是说是否对stat自身进行了更改。我没那么深。但是,例如,是否可以stat通过破解目录文件来损害返回的文件大小?或者通过类似的方式,不需要超级用户权限?

它是Linux。

Den*_*son 5

这是稀疏文件的演示,这是大小可能会产生误导的一种方式:

$ 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
Run Code Online (Sandbox Code Playgroud)

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