Предоставил Tom Rhodes.
В дополнение к другим расширениям файловой системы, таким как снимки (snapshots),
FreeBSD 5.0 и более поздние версии системы предлагают защиту с помощью списков контроля
доступа файловой системы (File System Access Control Lists, ACLs).
Списки контроля доступа расширяют стандартную модель прав UNIX® высоко совместимым (POSIX®.1e) способом. Эта возможность позволяет
администратору получить преимущество от использования более интеллектуальной модели
безопасности.
Для включения поддержки ACL в файловой системе
UFS, следующая строка:
options UFS_ACL
должна быть добавлена в файл настройки ядра. Если параметр не добавлен, при попытке
монтирования систем, поддерживающих ACL, появится
предупреждающее сообщение. Этот параметр включен в ядро GENERIC. ACL основывается на
дополнительных атрибутах, встроенных в файловую систему. Дополнительные атрибуты
поддерживаются по умолчанию следующим поколением файловых систем UNIX, UFS2.
Замечание: Для включения дополнительных атрибутов в UFS1 требуется больше усилий по сравнению с UFS2. Производительность дополнительных атрибутов в UFS2 также существенно выше. По этим причинам для работы с
списками контроля доступа предпочтительно использование UFS2
ACL включаются во время монтирования флагом acls, который добавляется к /etc/fstab.
Этот флаг также можно сделать постоянным с помощью tunefs(8), изменив
флаг ACL в заголовке файловой системы. Вообще говоря,
использование флага в суперблоке предпочтительно по нескольким причинам:
-
Постоянный ACL флаг не может быть изменен путем
перемонтирования системы (mount(8) -u), а только через umount(8) и mount(8). Это
означает, что ACL нельзя включить на корневой файловой
системе после загрузки. Это также означает, что вы не можете изменить флаг на
используемой файловой системе.
-
Установка флага в суперблоке приводит к постоянному монтированию файловой системы с
включенным ACL, даже если нет записи в fstab или при смене порядка устройств. Это предотвращает случайное
монтирование файловой системы без ACL, которое может
повлечь за собой проблемы с безопасностью.
Замечание: Мы можем изменить поведение ACL
для включения флага без полного перемонтирования, но считаем, что желательно исключить
случайное монтирование без ACL, поскольку вы можете
попасть в неприятную ситуацию, если включите ACL,
затем выключите их, затем опять включите без сброса расширенных атрибутов. Обычно, как
только вы включили ACL в файловой системе, они не
должны быть выключены, поскольку получающаяся защита файлов может быть не совместима с
той, что применяется пользователями системы, и повторное включение ACL может подключить предыдущие списки контроля доступа к
файлам, права на которые изменены, что приведет к непредсказуемому поведению.
Файловые системы с включенными ACLs показывают знак
+ при просмотре прав на файлы. Например:
drwx------ 2 robert robert 512 Dec 27 11:54 private
drwxrwx---+ 2 robert robert 512 Dec 23 10:57 directory1
drwxrwx---+ 2 robert robert 512 Dec 22 10:20 directory2
drwxrwx---+ 2 robert robert 512 Dec 27 11:57 directory3
drwxr-xr-x 2 robert robert 512 Nov 10 11:54 public_html
Здесь мы видим, что каталоги directory1, directory2, и directory3 используют
преимущества ACL. Каталог public_html их не использует.
ACL файловой системы можно просмотреть с помощью
утилиты getfacl(1). Например,
для просмотра настроек ACL файла test, может использоваться команда:
% getfacl test
#file:test
#owner:1001
#group:1001
user::rw-
group::r--
other::r--
Для изменения ACL этого файла, вызовите утилиту setfacl(1).
Выполните:
% setfacl -k test
Параметр -k удалит все установленные на данный момент
ACL из файла или файловой системы. Более
предпочтительный метод это использование параметра -b, который
оставит необходимые для работы ACL поля.
% setfacl -m u:trhodes:rwx,group:web:r--,o::--- test
В вышеприведенной команде параметр -m использован для
изменения записей ACL по умолчанию. Поскольку
предустановленных записей не было (они были удалены предыдущей командой), эта команда
восстановит параметры по умолчанию и задаст приведенные параметры. Имейте ввиду, при
добавлении пользователя или группы, которых нет в системе, на stdout будет выведена ошибка ``Invalid
argument''.