Списки контроля доступа
– Что это? – вытянул шею Гмык, хмуро глядя на мои карты. – Но тут,же только.
– Минутку, – вмешался игрок слева от него. – Сегодня вторник. Выходит, его единороги дикие.
– Но в названии месяца есть "М" – вякнул еще кто-то. – Значит, его великан идет за половину номинальной стоимости!
– Но у нас четное число игроков…
– Вы все кое-что упускаете. Эта партия – сорок третья, а Скив сидит на стуле лицом к северу!
Приняв за указание стоны и все заметнее вырисовывавшееся выражение отвращения на лицах, я сгреб банк.
Р. Асприн
В общем случае совокупность всех ACL в системе представляет собой трехмерную матрицу, строки которой соответствуют пользователям, столбцы – операциям над объектами, а слои – самим объектам. С ростом количества объектов и пользователей в системе объем этой матрицы быстро растет, поэтому, как уже говорилось, разработчики реальных систем контроля доступа предпринимают те или иные меры для более компактного представления матрицы.
Хотя ухищрения для сокращения ACL дают определенный эффект, и в большинстве случаев список имеет всего лишь несколько записей (рис. 12.9), наложение ограничений на его размер часто считают неприемлемым или устанавливают такие ограничения весьма высокими, например в несколько тысяч записей. Это приводит к тому, что с файлом в ФС, поддерживающих списки контроля доступа, кроме основного массива данных, оказывается связан еще один массив, обычно уступающий в размерах основному, но, в принципе, способный достигать очень большого объема.
Впрочем, соответствующее усложнение файловой системы не так уж велико. Многие ФС позволяют хранить в дополнительных блоках данных не только записи ACL, но и другие сущности – расширенные атрибуты, ресурсную ветвь и т. д.
Рис. 12.9. Список контроля доступа
Есть три основных подхода, используемых для сокращения ACL.
- Использование прав по умолчанию
- Группирование пользователей и/или объектов
- Ограничение комбинаций прав, которыми пользователи и группы могут реально обладать
Права по умолчанию дают наибольший эффект тогда, когда большая часть прав большинства пользователей на большинство объектов одинакова. Чаще всего рекомендуют при установлении прав исходить из принципа "запрещено все, что не разрешено [явным образом]" – при последовательном его применении должно получаться, что большинство пользователей не имеет прав на подавляющую часть объектов в системе. Исходя из этого, в большинстве систем пользователи, явно или неявно не перечисленные в ACL объекта, не имеют на объект никаких прав. Многие системы также предоставляют специальную запись в ACL, соответствующую пользователям, которые не перечислены явно.
Объединение пользователей в группы представляет собой более универсальное средство, которое полезно не только для сокращения ACL, но и для других целей. Группа вводит дополнительный уровень косвенности (ACL ссылается на пользователя не прямо, а косвенно, через группу в систему установления прав и управления ими, и это дает дополнительную гибкость, полезную во многих практических случаях (рис. 12.10).
Рис. 12.10. Группы пользователей