Расшифровка записей

Произведем разбор байтов в представленных фрагментах. Используя вышеприведенную таблицу inode, попробуем расшифровать шестнадцатеричные записи.

Первые два байта несут очень важную информацию о типе файла и правах доступа к нему. Как уже было указано, в ОС UNIX может быть 7 типов файлов. Информация о типе файла расположена в старшем нибле (полубайте) старшего байта. Информацию о типах файлов можно свести в табл. 5.

Таблица 5 Обозначение функциональных типов файлов

Тип файла

Обозначение типа файла в листинге

Шестнадцатеричная цифра

Обычный файл

-

8

Каталог

d

4

Символическая ссылка

/

С

Сокет

s

А

Именованный канал

f

1

Файл блочного устройства

b

6

Файл символьного устройства

с

2

Права доступа к файлу отображаются 12 двоичными разрядами, состоящими из 4-ех полей по 3 разряда в каждом. Для удобства чтения оставшиеся 3 шестнадцатеричных цифры следует преобразовать в двоичную форму.

Двоичные разряды старшей тройки обозначают дополнительные (эффективные) права на файл. Они условно обозначаются: SUID - бит, позволяющий

35

любому запускать исполняемый файл с правами его владельца (действует лишь в отношении бинарных исполняемых файлов), SGID - очень редко используемый бит, позволяющий запустить процесс с правами группы владельца, Sticky bit - бит, не позволяющий пользователю удалять из каталога файлы, ему не принадлежащие (устанавливается только для каталога в отношении пользователей, не являющихся его владельцами).

Все оставшиеся тройки интерпретируются одинаково: левый бит - право на чтение, средний - на запись, правый - на исполнение. Левая тройка - права владельца, средняя тройка - права его пользователей из его группы, правая тройка - права для остальных зарегистрированных пользователей.

Так, в первых двух байтах первого inode в листинге 11 записано шестна-дцатеричное число 41 EDh. По старшей цифре 4 мы определяем, что перед нами

- каталог. Оставшуюся часть числа преобразуем в двоичную форму, для нагляд
ности отделяя по три разряда: lEDh = 0001 1110 1101b = 000 111 101101. При
определенном навыке читать права доступа можно и без подобного преобразо
вания. Читаем:

>- эффективных прав доступа к каталогу не установлено.

>- все остальные зарегистрированные пользователи также имеют права на чтение и исполнение (вполне естественно для каталога).

Следующее слово является идентификатором владельца файла Owner UID. На это поле выделено два байта, поэтому всего пользователей (включая псевдопользователей) может быть 65536. Только администратор системы имеет нулевой идентификатор. По числу 00 00h убеждаемся, что владельцем каталога именно он и является.

Следующее двойное слово содержит информацию о размере файла в байтах. 00 00 10 00h = 4096 байт - обычный при данном размере логического блока объем каталога.

Четыре поля по 4 байта в каждом отображают временные отметки файла:

>- последней модификации,

> удаления.

Разработчики системы, предусмотрев в индексном дескрипторе файла время его удаления, предполагали, что удаление файла - процесс логический, после совершения которого inode какое-то время будет существовать. Как будет показано ниже, удаление файла фактически не сопровождается ни удалением inode, ни стиранием информации в блоках, выделенных файлу. Удаление файла

- это лишь стирание его последнего имени («жесткой» ссылки) в каталоге.

Все поля, содержащие временные отметки, содержат число секунд, прошедших с полуночи 1 января 1970 года. Чтобы узнать это время, нужно вначале преобразовать число в десятичное, затем преобразовать секунды в дату и время. Утилиты для преобразования в обычное представление даты и времени в штатной инсталляции операционной системы нет, но зато есть системная функция, которую можно вызвать из исполняемого файла или сценария, написанного на Perl.

По порядку расшифровываем следующие поля. Идентификатор группы имеет значение равное 00 00h - это группа root (администратора). На каталог имеются две жесткие ссылки (00 02h). Каталог занимает 8 секторов по 512 байт на диске, что соответствует размеру одного блока в 4096 байт. Дополнительные права доступа (флаги) не устанавливались. Единственный логический блок, в котором хранится таблица соответствия между именами файлов данного каталога и их индексными дескрипторами, имеет порядковый номер 00 06 82 lBh.

Аналогично определим параметры другого файла, приведенные в листинге 11. Первая шеснадцатеричная цифра слова 81A4h указывает на то, что это обычный файл, а двоичная комбинация lA4h = 0001 1010 0100b = 000 110 100 100 дает всю необходимую информацию о правах доступа: >- эффективные права доступа не установлены, >- владелец файла имеет право чтения и записи,

Файл имеет размер 37h = 55 байт и так далее. По информации, содержащейся в inode, уже нетрудно найти и идентифицировать файл.

В более удобной для анализа форме вывести информацию об индексном дескрипторе можно, воспользовавшись для этого командой lde. Ниже приведен пример вывода этой команди для индексного дескриптора каталога /bin.

lde -i 131329 /dev/hda5

INODE: 131329 (0x00020101)

drwxr-xr-x 0 0 4096 Thu Mar 18 17:42:58

2004

TYPE: directory

LINKS: 2

MODEFLAGS.MODE: 004.0755

SIZE: 4096

BLOCK COUNT: 8

UID: 00000

GID: 00000

ACCESS TIME: Tue Mar 30 11:46:37 2004

CREATION TIME: Thu Mar 18 17:42:58 2004

MODIFICATION TIME: Thu Mar 18 17:42:58 2004

DELETION TIME: Thu Jan 1 05:00:00 1970

DIRECT BLOCKS: 0x00040203

INDIRECT BLOCK: DOUBLE INDIRECT BLOCK: TRIPLE INDIRECT BLOCK:

Листинг 12. Информация об inode каталога /bin, выведенная редактором Lde

Ниже для сравнения приведена запись об этом же каталоге, выведенная командой Is -ali /bin. Утилита Is для вывода этой информации также обращается к таблице индексных дескрипторов.

131329 drwxr-xr-x 2 root root 4096 Map 18 17:42 .