В дополнение к другим расширениям файловой системы, таким как снимки (snapshots), FreeBSD 5.0 и более поздние версии системы предлагают защиту с помощью списков контроля доступа файловой системы (File System Access Control Lists, ACLs).
Списки контроля доступа расширяют стандартную модель прав UNIX(R) высоко совместимым (POSIX(R).1e) способом. Эта возможность позволяет администратору получить преимущество от использования более интеллектуальной модели безопасности.
Для включения поддержки ACL в файловой системе UFS, следующая строка:
options UFS_ACL
должна быть добавлена в файл настройки ядра. Если параметр не
добавлен, при попытке монтирования систем, поддерживающих
ACL, появится предупреждающее сообщение.
Этот параметр включен в ядро GENERIC
.
ACL основывается на дополнительных атрибутах,
встроенных в файловую систему. Дополнительные атрибуты
поддерживаются по умолчанию следующим поколением файловых систем
UNIX(R), 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.
Этот, и другие документы, могут быть скачаны с https://download.freebsd.org/ftp/doc/.
По вопросам, связанным с FreeBSD, прочитайте
документацию прежде чем писать в
<questions@FreeBSD.org>.
По вопросам, связанным с этой документацией, пишите в рассылку
<doc@FreeBSD.org>.