Индексирование дескрипторов
Индексные дескрипторы файлов данной группы блоков хранятся в логических блоках, расположенных следом за битовой картой индексных дескрипторов. В одном 4-килобайтном логическом блоке помещается 32 таких записи. Таким образом, 16416 индексных дескрипторов, приходящихся на одну группу (см. листинг 8), займут подряд 513 логических блоков. Такой расчет справедлив для файловой системы EXT2FS, однако, если на логическом разделе смонтирована файловая система EXT3FS, информация, выводимая отладчиком debugfs, будет неверна. В журнализируемой файловой системе EXT3FS между битовой картой inode и таблицей индексных дескрипторов размещается журнал транзакций, под который обычно отводится 8192 блока. Таким образом, в первой группе блоков таблица индексных дескрипторов будет начинаться не с 4-го, а с 8195-го логического блока.
Индексный дескриптор файла имеет объем 128 байт и следующее строение:
Таблица 4 Структура индексного дескриптора файла
Размер поля в байтах |
Смещение байт |
Описание |
2 |
0 |
Тип файла и права доступа к нему |
2 |
2h |
Идентификатор владельца файла UID |
4 |
4h |
Размер файла в байтах |
4 |
8h |
Время последнего обращения к файлу |
4 |
Ch |
Время создания файла. |
4 |
10h |
Время последней модификации файла |
4 |
14h |
Время удаления файла |
2 |
18h |
Идентификатор группы GID |
2 |
1Ah |
Счетчик числа связей («жестких» ссылок на файл) |
4 |
1Ch |
Число секторов по 512 байт, занимаемых файлом |
4 |
20h |
Флаги файла |
4 |
24h |
Зарезервировано для ОС |
15x4 |
28h |
Указатели на блоки, в которых содержатся данные файла |
4 |
64h |
Версия файла (для NFS) |
4 |
68h |
ACL файла |
4 |
6Ch |
ACL каталога |
4 |
70h |
Адрес фрагмента |
1 |
74h |
Номер фрагмента |
1 |
75h |
Размер фрагмента |
2 |
76h |
Заполнение |
4x2 |
78h |
Зарезервировано |
Таблицу индексных дескрипторов можно вывести поблочно с помощью команды lde -b block_numder device. Произвольно взятый фрагмент из двух индексных дескрипторов представлен для анализа в листинге 11. Размер каждого из inode составляет 128 байт, следовательно, интервал между ними -80h и их начала выровнены по смещению 80h.
0х02003А00 |
ED |
41 |
00 |
00 |
00 |
10 |
00 |
00 |
DC |
09 |
69 |
40 |
ОС |
96 |
59 |
40 |
0х02003А10 |
ОС |
96 |
59 |
40 |
00 |
00 |
00 |
00 |
00 |
00 |
02 |
00 |
08 |
00 |
00 |
00 |
0х02003А20 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
IB |
82 |
06 |
00 |
00 |
00 |
00 |
00 |
0х02003А30 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
0х02003А40 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
0х02003А50 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
0х02003Аб0 |
00 |
00 |
00 |
00 |
9С |
79 |
17 |
Е5 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
0х02003А70 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
0х02003А80 |
А4 |
81 |
00 |
00 |
37 |
00 |
00 |
00 |
1А |
96 |
59 |
40 |
ОС |
96 |
59 |
40 |
0х02003А90 |
12 |
6Е |
А8 |
ЗЕ |
00 |
00 |
00 |
00 |
00 |
00 |
01 |
00 |
08 |
00 |
00 |
00 |
0х02003АА0 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
1С |
82 |
06 |
00 |
00 |
00 |
00 |
00 |
0х02003АВ0 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
0х02003АС0 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
0x02003AD0 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
.А i. .Y@
¦ -Y@
У
7 Y@. .Y@
.n.>
Листинг 11. Фрагмент таблицы индексных дескрипторов
Индексный дескриптор определяет порядок доступа к конкретному файлу, поэтому, модифицируя эту запись, можно манипулировать файлом как угодно. Не обязательно редактировать inode прямо в таблице индексных дескрипторов -нужную запись нелегко идентифицировать с номером inode, и для этого удобнее использовать одну из команд отладчика debugfs.