Создание гибких иерархий разрешений с использованием ACL
Практически всегда традиционная для Unix система файловых разрешений в полной мере удовлетворяет всем требованиям безопасности. Но в среде с обширными связями, где доступ к файлам должно получать множество людей, эта схема может стать неуклюжей. Списки управления доступом (Access control lists, ACL) (иногда называемые «аклес») — это относительно новая функция операционной системы Linux, с некоторых пор доступная также в ОС FreeBSD и Solaris. Хотя ACL не обладают наследственной способностью добавлять безопасность системе, они снижают сложность управления разрешениями. ACL обеспечивают новый способ применения разрешений в отношении файлов и каталогов, не прибегая к созданию излишних групп.
ACL хранятся в метаданных файловой системы как расширенные атрибуты. Как следует из имени, ACL позволяют определять списки, как предоставляющие, так и запрещающие доступ к определенному файлу, основываясь на представленном критерии. Однако ACL вовсе не отказываются от традиционной системы разрешений. ACL могут указываться как для пользователей, так и для групп и по-прежнему подразделяются на сферы чтения, записи и выполнения. Кроме того, список управления может быть определен для любого пользователя или группы, не относящихся к любому из ACL-списков пользователя или группы, практически как «другие» разряды режима файла. Списки управления доступом также имеют то, что называется ACL-маской, действующей как маска разрешений для всех ACL, которые специально ссылаются на пользователя или группу. Это подобно команде umask, но с некоторыми отличиями. Например, если установить ACL-маску в г—, то любые ACL-списки, относящиеся к определенному пользователю или группе и более свободные в плане ограничений (то есть rw-), в действительности становятся г—. Каталог также может содержать ACL по умолчанию, который указывает исходные ACL файлов и подкаталогов, создаваемых в нем. Для изменения или удаления ACL используется команда setfacl, в которой после параметра -т следует ACL-спецификация и имя файла либо список имен файлов. Удаляется ACL с помощью параметра -х и указанием конкретного ACL или списка ACL.
Существуют три общие формы ACL: одна — для пользователей, вторая — для групп и третья — для остальных. Давайте их рассмотрим:
# ACL пользователя u:[user]:<mode>
# ACL группы
g:[group]:<mode>
# Прочие ACL о:<mode>
Обратите внимание на то, что в ACL пользователя и группы действительные имена пользователя и группы, к которым относится ACL, являются необязательными. Если они опущены, то этот ACL будет применяться к базовому ACL, который определяется разрядами режима файла. Следовательно, при изменении ACL будут изменены и разряды режима, и наоборот.
Создайте файл и измените его базовый ACL. Данным пример показывает, что можно перечислить несколько ACL, разделив их запятыми. Кроме того, можно указывать ACL для произвольного числа пользователей и групп. Как можно заметить, список ACL можно получить с помощью команды getfacl. Эта команда очень проста и имеет лишь несколько параметров. Наиболее полезным является параметр -R, который рекурсивно выводит ACL и работает практически так же, как Is -R.