Вопрос 47. Операции над директориями.
Так же, как и в случае файлов, система обязана обеспечить пользователя набором операций, необходимых для работы с директориями, реализованных через системные вызовы. Несмотря на то, что директории, это файлы, логика работы с ними отличается от логики работы с обычными файлами и определяется природой этих объектов, предназначенных поддерживать структуру файлового архива. Совокупность системных вызовов для управления директориями зависит от особенностей конкретной ОС. Рассмотрим в качестве примера некоторые системные вызовы ОС Unix.
Create. Создание директории. Вновь созданная директория включает записи с именами '.' и '..', однако считается пустой.
Delete. Удаление директории. Удалена может быть только пустая директория.
Opendir. Открытие директории для последующего чтения. Например, чтобы перечислить файлы, входящие в директорию, процесс должен открыть директорию и считать имена всех файлов, которые она включает.
Closedir. Закрытие директории после ее чтения для освобождения места во внутренних системных таблицах.
Readdir. Данный системный вызов возвращает содержимое текущей записи в открытой директории. Вообще говоря, для этих целей может быть использован системный вызов Read, но в этом случае от программиста потребуется знание внутренней структуры директории. Readdir возвращает содержимое записи в стандартном формате, независимо от используемой структуры директорий.
Rename. Имена директорий можно менять, также как и имена файлов.
Link. Связывание - это техника, которая позволяет информации о файле появляться более чем в одной директории. Данный системный вызов связывает существующий файл с абсолютным именем директории, используя их в качестве параметров. При помощи вызова Link можно связать файл сразу с несколькими директориями.
Unlink. Удаление записи о файле из директории. Если удаляемый файл присутствует только в одной директории, то он вообще удаляется из файловой системы, в противном случае система ограничивается только удалением специфицируемой записи.
Имеется также ряд других системных вызовов, например, связанных с защитой информации.
Вопрос 48. Защита файлов.
Контроль доступа к файлам
Наличие в системе многих пользователей предполагает организацию контролируемого доступа к файлам. Выполнение любой операции над файлом должно быть разрешено только в случае наличия у пользователя соответствующих привилегий. Обычно контролируются следующие операции: Read, Write, Execute, Append, Delete, List
Другие операции, например, копирование файлов или их переименование также могут контролироваться. Однако они чаще реализуются через перечисленные. Так, операцию копирования файлов можно представить как операцию чтения и последующую операцию записи.
Списки прав доступа
Наиболее общий подход к защите файлов от несанкционированного использования - сделать доступ зависящим от идентификатора пользователя, то есть связать с каждым файлом или директорией список прав доступа (access control list), где перечислены имена пользователей и типы разрешенных для них способов доступа к файлу. Любой запрос на выполнение операции сверяется с таким списком. Основная проблема реализации такого способа - список может быть длинным. Чтобы разрешить всем пользователям читать файл, необходимо всех их внести в список. У этой техники есть два нежелательных следствия:
Конструирование такого списка может быть сложной задачей, особенно если мы не знаем заранее список пользователей системы.
Запись в директории должна теперь иметь переменный размер (включать список потенциальных пользователей).
Для решения этих проблем создают классификации пользователей, например, в ОС Unix все пользователи разделены на три группы:
- Владелец (Owner).
- Группа (Group). Набор пользователей, разделяющих файл и нуждающихся в типовом способе доступа к нему.
- Остальные (Univers), что позволяет реализовать конденсированную версию списка прав доступа. В рамках этой ограниченной классификации задаются только три поля (по одному для каждой группы) для каждой контролируемой операции. В итоге, в Unix операции чтения, записи и исполнения контролируются при помощи 9 бит (rwxrwxrwx).
Резюме
Итак, файловая система, есть набор файлов и директорий и операций над ними. Имена, структуры, файлов, способы доступа к ним и их атрибуты – важные аспекты дизайна файловой системы. Большинство современных ОС поддерживает иерархическую систему каталогов или директорий с возможным вложением директорий. Безопасность файловой системы – одна из важнейших концепций ОС.