Linux Kernel (Ядро линукса) (часть 3)


Списки управления доступом

Списки управления доступом были предложены довольно давно для усовершенствования механизма защиты файлов в файловых системах Unix. Вместо классификации пользователей файла по трем категориям (владелец, группа и все остальные) с каждым файлом можно ассоциировать список управления доступом. Благодаря такому списку пользователь может для каждого своего файла указать имена конкретных пользователей (или групп пользователей) и предоставленные им привилегии.

Linux 2.6 полностью поддерживает списки управления доступом, для чего пользуется расширенными атрибутами индексного дескриптора. Фактически расширенные атрибуты были введены, в основном, для поддержки этих списков. Таким образом, библиотечные функции chaclO, setfaclO И getfaclO, позволяющие манипулировать списком управления доступом к файлу, основываются на системных вызовах setxattro и getxattro, представленных в предыдущем разделе.

К сожалению, материалы рабочей группы, которая определила расширения безопасности в рамках семейства стандартов POSIX 1003.1, так и не были оформлены в виде нового стандарта POSIX. В результате списки управления доступом поддерживаются сегодня файловыми системами разнообразных типов во многих Unix-подобных операционных системах, но эти реализации имеют ряд тонких различий.

Как файлы разных типов используют блоки на диске

Файлы разных типов, поддерживаемых в Ext2 (обычные файлы, каналы и т. д.), используют блоки данных по-разному. Некоторые файлы не хранят данные на диске, и, следовательно, им вообще не нужны блоки данных

Обычный файл

Обычные файлы — самый распространенный тип, и в этой главе им уделяется больше всего внимания. Обычному файлу блоки данных требуются только тогда, когда он приступает собственно к хранению данных. Когда обычный файл создается, он пуст, и блоки данных ему не нужны; кроме того, он может стать пустым в результате работы системных вызовов truncate о или open о. Обе ситуации являются вполне типичными. Например, когда вы выдаете команду оболочки, включающую В себя строку >filename, оболочка создает пустой файл или усекает существующий.

Каталог

В файловой системе Ext2 каталоги реализованы как специальный тип файлов, блоки которых содержат имена файлов и номера соответствующих индексных дескрипторов. В частности, такие блоки содержат структуры типа ext2_dir_entry_2. Поля такой структуры приведены в табл. 18.5. Структура имеет переменную длину, поскольку ее последнее поле паше является массивом переменной длины, который может содержать до ext2_name_len символов (обычно 255). Кроме того, по соображениям эффективности длина элемента каталога всегда кратна 4, и поэтому в конец имени файла добавляется необходимое количество нулевых символов (\о). Поле name ien содержит фактическую длину файла Поле fiie type содержит тип файла Поле rec ien можно интерпретировать как указатель на следующий корректный элемент каталога: это смещение, которое следует добавить к начальному адресу элемента каталога, чтобы получить начальный адрес следующего элемента. Чтобы удалить элемент каталога, достаточно записать 0 в его поле inode и соответственно увеличить значение поля rec ien у предыдущего элемента. Взгляните внимательно на столбец rec ien и вы увидите, что элемент oldfile был удален, поскольку поле rec ien элемента usr равно 12+16 (длины элементов usr и oldfile).

Предыдущая страница | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 | Следующая страница




Возможно, Вас также заинтересует:

ОС Knoppix - это Linux без про...

ВведениеЕсли вы цените свое время, умеете считать деньги и знаете стоимость информации, то эта книга...

Linux Kernel (Ядро линукса) (ч...

Спин-блокировкаСпин-блокировка необходима в многопроцессорной системе, потому что могут возникнуть...

Linux Kernel (Ядро линукса) (ч...

Копирование при записи В системах Unix первых поколений создание процесса было реализовано довольно...

Linux Kernel (Ядро линукса) (ч...

Буферы блоков и головы буферовУ каждого буфера есть дескриптор голова буфера, имеющий тип buffer...