Ключевые слова:security, acl, freebsd, fs, (найти похожие документы)
From: http://wiki.bsdportal.ru
Date: Mon, 29 Jan 2006 18:21:07 +0000 (UTC)
Subject: Списки контроля доступа FreeBSD
Оригинал: http://wiki.bsdportal.ru/doc:acl1
Оригинал - "FreeBSD access control lists"
http://www.onlamp.com/pub/a/bsd/2003/08/14/freebsd_acls.html
Полномочия Unix гибки и могут решить почти любую проблему
управления доступом к файлам, но как обстоят дела с теми проблемами,
которые полномочия решить не могут ? Действительно ли Вы хотите
создавать группу каждый раз, разделяя доступ к файлу с другим
пользователем ? Возможно, Вы не имеете прав администратора
системы и не можете создать группу, как Вы этого желаете. Иногда
ограничения могут вызвать проблему безопасности, было бы неплохо
иметь возможность создать каталог, доступный процессу, имеющему
полномочия веб-сервера или другому пользователю без предоставления
чтения или записи всем остальным. Конфигурационные файлы,
которые могут быть изменены администратором системы, часто
необходимо изменять, не получая привилегий суперпользователя; взамен
использования программ вроде sudo или calife или "проваливания в
программу-оболочку" при редактировании было бы лучше просто
разрешать определенным пользователям редактировать эти файлы.
Списки контроля доступом (ACL) решают эти проблемы. Они дают
большую гибкость, чем стандартный набор полномочий
"пользователь/группа/остальные". ACL доступны в
коммерческих Unix-системах, таких как IRIX или Solaris (и в Windows
NT) в течение нескольких лет. В настоящее время, благодаря
проекту TrustedBSD, ACL доступны в FreeBSD 5.0 и выше. Многое из
нижеизложенного относится и к реализации ACL на других платформах;
тем не менее, Вам придется заглянуть в документацию к своей системе,
чтобы избежать ошибок из-за разницы в синтаксисе команд. Вряд ли Вы
найдете большое количество различий, так как FreeBSD
соответствует самому последнему стандарту POSIX.1e.
Включение ACL.
ACL активируются опцией в суперблоке файловой системы, который
редактируется с помощью tunefs.
Установка опций суперблока.
Команда tunefs может быть применена на отмонтированной либо доступной
только для чтения файловой системе. Это означает,
что, обычно, Вы должны загрузиться в однопользовательском режиме перед
запуском команды
/sbin/tunefs -a enable /fs
где /fs обозначает точку монтирования файловой системы (/, /usr, и так
далее). Если Вы не имеете доступа к терминалу
машины (например, в случае машины, находящейся на colocation), Вы
можете добавить вызов команды tunefs в начало файла
/etc/rc для включения ACL при последующей загрузке.
Если Вы используете файловую систему UFS2, включение ACL закончено.
Для включения ACL необходима только строчка
opions UFS_ACL
встроенная по умолчанию в GENERIC-конфигурацию ядра. Если же Вы
используете UFS1, следуйте инструкциям ниже.
Дополнительная конфигурация для UFS1.
Все усложняется, если Вы, подобно многим пользователям FreeBSD 5.0,
используете UFS1 (FreeBSD 5.1 и выше используют
UFS2 как файловую систему по умолчанию). ACL основаны на расширенных
атрибутах, которыми не обладает UFS1.
Для установки расширенных атрибутов Вы должны добавить строки
options UFS_EXTATTR
options UFS_EXTATTR_AUTOSTART
в файл конфигурации ядра системы, после чего
собрать и установить новое ядро. Не перезагружайте
машину- Вам все еще необходимо инициализировать расширенные атрибуты
на каждой файловой системе. Например,
для инициализации атрибутов на /var требуется выполнить следующее:
%mkdir -p /var/.attribute/system
% cd /var/.attribute/system
% extattrctl initattr -p /var/ 388 posix1e.acl_access
% extattrctl initattr -p /var/ 388 posix1e.acl_default
Используйте вместо /var/ любую файловую систему по своему выбору.
После инициализации перезагрузитесь и атрибуты будут
включены.
Взгляд на ACL
Работа с ACL проста. Файлы с ACL будут обозначены симолами "a+" в
листинге, выдаваемом по ls -l:
-rw-rw-r--+ 1 rob rob 0 Apr 19 17:27 acl-test
Чтобы увидеть ACL, достаточно использовать getfacl :
$ getfacl acl-test
#file:acl-test
#owner:1000
#group:1000
user::rw-
user:nobody:rw-
group::r--
group:wheel:rw-
mask::rw-
other::r--
Поля user::, group:: и other:: должны быть схожими. Они - не что иное,
как ACL-представление стандартной системы
полномочий Unix. Тем не менее, записи nobody и wheel являются новыми
Они обозначают права определенных пользователей и
групп (в данном случае - nobody и wheel) вдобавок к обычному набору
полномочий.
Добавление и удаление ACL.
Команда setfacl позволяет добавлять, изменять и удалять ACL. У команды
много опций, но для начала Вам нужно знать лишь
немногие из них, чтобы работать с ACL.
Во-первых, синтакс. ACL указываются так, как они отображаются на
выводе команды getfacl. Попробуем удалить и воссоздать
ACL для файла acl-test:
$ setfacl -b acl-test
$ setfacl -m user:nobody:rw-,group:wheel:rw- acl-test
Опция "-b" удаляет все ACL, кроме стандартных полномочий пользователя,
группы и остальных. Опция "-m" модифицирует ACL
указанным элементом (или несколькими элементами, разделенными
запятой). Можно использовать аббревиатуры элементов :
нижеприведенный пример может быть сокращен до
u:nobody:rw-,g:wheel:rw-. Вы даже можете использовать setfacl для
модификации "традиционных" полномочий; установка элемента user::rw-
эквивалентна запуску chmod u=rw для изменения прав
на файл.
Удаление ACL почти идентично:
setfacl -x u:nobody:rw-,g:wheel:rw-
удаляет указанный ACL.Также можно указать ACL
в файле. Опции -M и -X выполняют функции их аналогов, задающихся
строчными буквами, читая элементы их файла.
Рассмотрим файл acl-test вновь:
$ cat test-acl-list
u:nobody:rw-
# this is a comment
g:wheel:rw-
$ setfacl -X test-acl-list acl-test
$ getfacl acl-test
#file:acl-test
#owner:1000
#group:1000
user::rw-
group::r--
mask::r--
other::r--
ACL и другие Unix-утилиты.
К сожалению, большинство Unix-утилит все еще не поддерживает ACL.
Например, tar не архивирует и не восстанавливает ACL, в FreeBSD NFS
также игнорирует их. Ни формат файлов в утилите tar, ни протокол NFS
нет ни намека на возможность использования ACL. Тем не менее,
архивы полного раздела UFS1, сделанные с помощью tar или dump,
восстанавливают каталог .attribute, и утилита dump в
FreeBSD модицицирована для для "понимания" UFS2 (включающую ACL).
Каталог-скелет archivers/star поддерживает ACL. Вы даже можете
работать с архивами, созданными в Linux и FreeBSD С помощью
star и предохраняющей расширенные атрибуты (включающие и ACL).
Использование ACL с Samba и Windows.
Если вы собираете Samba с поддержкой ACL, Вы можете
отредактировать списки доступа к файлам, "раздаваемых" Samba, с
помощью поставляемых с Windows утилит для работы с ACL.
Просто пересоберите Samba с поддержкой ACL. Использую коллекцию
портов FreeBSD, Вы можете указать параметр утилиты
make WITH_ACL_SUPPORT в диалоге конфигурации порта net/samba.
Собрав и запустив Samba, просмотрите в Windows свойства файлов
на сетевом диске, созданном с помощью Samba. На закладке
"Безопасность" Вы можете просмотреть и изменить ACL, как если бы
файлы находились на Windows-сервере. Если сопротивлялись переходу с
Windows на использование Samba, мотивируя это отсутствием ACL в
последней, теперь самое время серьезно задуматься о развертывании
Samba и FreeBSD на своих файловых серверах.
ACL по умолчанию.
Расмотрим усложненный пример. Вы хотите сделать ваш
каталог cool_widgets доступным для пользователя Bob, кроме остальных.
Для этого необходимо добавить ACL-элемент. Хотя, когда вы добавляете
файлы в этот каталог, они не будут автоматически приобретать ACL
каталога. Вам необходимо установить для него ACL по умолчанию Любые
файлы, созданные в каталоге, будут наследовать ACL по умолчанию.
Используя опцию "-d" при вызове getfacl или setfacl эффект будет виден
на ACL каталога, а не на самом каталоге.
$ mkdir cool_widgets
$ chmod o-rwx cool_widgets
$ ls -l
...
drwxr-x--- 2 rob rob 512 Apr 19 21:21 cool_widgets
...
$ getfacl -d cool_widgets
#file:cool_widgets
#owner:1000
#group:1000
Добавляем ACL по умолчанию:
$ setfacl -d -m u:bob:rw- cool_widgets
setfacl: acl_calc_mask() failed: Invalid argument
setfacl: failed to set ACL mask on cool_widgets
Ой! ACL по умолчанию работают не так, как обычные ACL. Вы не можете
установить определенный элемент ACL по умолчанию,
пока не добавите общие элементы user::, group:: и other::.
$ setfacl -d -m u::rw-,g::r--,o::---,u:bob:rw- cool_widgets
$ setfacl -m u:bob:r-x cool_widgets
Обратите внимание на необычный элемент "r-x" для пользователя bob
в записях для каталога: ACL по умолчанию заметен в свойствах файлов,
созданных в каталоге, а не в свойствах самого каталога.
ACL-элемент "u:bob:rw-" будет добавлен к ACL любого файла, созданного
в каталоге cool_widgets. Теперь у Вас имеется каталог
cool_widgets, файлы в котором доступны для чтения и записи
пользователям rob и bob без использования группы. Если в дальнейшем
Вы решите избавиться от ACL по умолчанию, используйте опцию "-k"
команды setfacl, которая работает с ACL по умолчанию так же, как
опция "-b" - с ACL файлов.