Я хочу убедиться, что никто не менял файл. Для этого я хочу не только проверить сумму файла MD5, но и проверить его размер, поскольку, насколько я понимаю, эта дополнительная простая проверка может усложнить фальсификацию на несколько цифр.
Могу ли я доверять размеру, который stat
возвращается? Я не имею в виду, если в stat
сам. Я не хожу который глубокий. Но, например, можно скомпрометировать размер файла, который stat
возвращается, взломав файл каталога? Или аналогичным способом, не требующим привилегий суперпользователя?
Это Linux.
Вот демонстрация разреженных файлов, размер которых в одну сторону может ввести в заблуждение:
$ 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
даже близки к фактическому содержанию файла.
Вы спрашиваете, может ли кто-то скомпрометировать размер файла, возвращаемого stat, взлом файла каталога. Нет, это невозможно. Каталог - это просто список имен файлов и номеров inode. Вся остальная информация о файле (владелец, группа, режим, размер и т. Д.) Содержится в индексном дескрипторе (по крайней мере, в файловых системах, совместимых с POSIX), и именно отсюда stat собирает эту информацию.
Почему вас волнует размер файла? Сравнение сумм MD5 покажет вам с абсолютной уверенностью, был ли файл изменен или нет. Перемещение битов внутри файла сохранит размер файла, но это может быть совершенно другой файл.