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

我想确保没有人更改文件。 为了做到这一点,我不仅要检查文件的MD5总和,而且还要检查它的大小,因为据我了解这个额外的简单检查可以复杂的伪造几位数字。

我可以相信stat返回的大小吗? 我不是说如果对stat本身进行修改的话。 我不深究。 但是,例如,可能会破坏目录文件黑客stat返回的文件大小? 或者通过类似的方式,那不需要超级用户权限?

这是Linux。

你问是否有人可能通过黑客攻击目录文件来危害stat返回的文件的大小。 不,这是不可能的。 该目录只是一个文件名和索引节点号的列表。 所有其他文件信息(所有者,组,模式,大小等)都包含在索引节点(至less在POSIX兼容的文件系统中),也就是来自stat收集这些信息的地方。

下面是稀疏文件的演示,这是一种尺寸可能会引起误解的方式:

 $ 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 

正如你所看到的, lsstat的字节数显示了分配的空间,但是只有stat的块数和du的输出甚至接近文件的实际内容。

你为什么关心文件的大小? 比较MD5和会告诉你文件是否改变了。 在文件中翻转位将保留文件大小,但可能是一个完全不同的文件。