x(выполнение);
Для примера, ACL довольно часто используются, когда компьютер с ОС FreeBSD выступает в качестве файлового сервера интегрированного в среду Windows с помощью ПО Samba. В этой системе Вы можете устанавливать права доступа с помощью галочек с машины, на которой установлена Windows, а также через ACL непосредственно в самой системе FreeBSD.
Для того чтобы ACL начали работать необходимо собрать ядро с опцией:
Тему по пересборки ядра мы ещё не затрагивали, но вы можете не беспокоиться, так как эта опция по умолчанию находится в стандартном ядре системы с именем GENERIC.
После того, как Вы добавите необходимую опцию в ядро и соберёте ядро, это если в друг Вы уже знакомы с тем как пересобирать ядро, необходимо включить поддержку ACL для конкретной файловой системы, т.е назначить определённой точке монтирования. Существует два способа включения ACL для файловой системы:
1.   Через файл /etc/fstab путём добавления необходимого флага к файловой системе mount(8). В результате ACL включается во время загрузки ОС и монтирования файловой системы:
cat /etc/fstab
# Device Mountpoint FStype Options
/dev/ad0s1b none swap sw
/dev/ad0s1a / ufs rw,suiddir
/dev/ad0s1f /home ufs rw,acls
/dev/ad0s1e /tmp ufs rw
/dev/ad0s1g /usr ufs rw,suiddir
/dev/ad0s1d /var ufs rw
/dev/acd0 /cdrom cd9660 ro,noauto
|
Как можно видеть из примера, флаг acls добавлен для точки монтирования /home. После перезагрузки системы можно будет использовать ACL на данной файловой системе. Для проверки того установлен ли флаг acls для файловой системы, используйте команду mount(8) без параметров:
mfdesktop1# mount
/dev/ad0s1a on / (ufs, local, suiddir)
devfs on /dev (devfs, local)
/dev/ad0s1f on /home (ufs, local, soft-updates, acls)
/dev/ad0s1e on /tmp (ufs, local, soft-updates)
/dev/ad0s1g on /usr (ufs, local, suiddir, soft-updates)
/dev/ad0s1d on /var (ufs, local, soft-updates)
|
Включение ACL во время загрузки системы, т.е при монитровании файловых систем имеет ряд недостатков:
Установка флага в суперблоке файловой системы приводит к постоянному монтированию системы с флагом acls, если он даже не установлен в файле /etc/fstab.
Для использования второго способа Вам понадобится команда tunefs(8). Если вы захотите включить ACL с использованием tunefs(8) Вам необходимо:
1.Размонтировать umount(8) файловую систему, на которой Вы собираетесь подключать ACL
2.Выполнить команду tunefs(8) с опцией ‘–a enable’
3.Примонтировать файловую систему обратно mount(8)
Посмотрим содержание файла /etc/fstab, оно нам далее понадобится и определимся с файловой системой, на которой нам необходимо включить поддержку ACL:
fdesktop1# cat /etc/fstab
# Device Mountpoint FStype Options Dump Pass#
/dev/ad0s1b none swap sw 0 0
/dev/ad0s1a / ufs rw 1 1
/dev/ad0s1f /home ufs rw 2 2
/dev/ad0s1e /tmp ufs rw 2 2
/dev/ad0s1g /usr ufs rw 2 2
/dev/ad0s1d /var ufs rw 2 2
/dev/acd0 /cdrom cd9660 ro,noauto 0 0
|
Будем включать поддержку ACL для файловой системы /home. Если файловая система, на которой Вы хотите включить ACL, используется и её нельзя размонтировать, то необходимо перейти в однопользовательский режим (boot –s или 3 пункт в меню загрузки):
fdesktop1# umount /home
fdesktop1# tunefs -a enable /dev/ad0s1f
tunefs: ACLs set
fdesktop1# mount -o rw /dev/ad0s1f /home
fdesktop1# mount
/dev/ad0s1a on / (ufs, local, suiddir)
devfs on /dev (devfs, local)
/dev/ad0s1e on /tmp (ufs, local, soft-updates)
/dev/ad0s1g on /usr (ufs, local, suiddir, soft-updates)
/dev/ad0s1d on /var (ufs, local, soft-updates)
/dev/ad0s1f on /home (ufs, local, soft-updates, acls)
|
  После того как Вы включили поддержку ACL для файловой системы, Вам необходимо узнавать файлы на которые установлены ACL. Это можно сделать с помощью команды ls(1):
$ ls -l
-rw-r--r-- 1 root wheel 374 Jun 2 02:14 login
-rw-r--r--+ 1 root wheel 0 Jul 8 00:07 login.conf
|
Как видно из примера, файл на котором установлены ACL отображается со знаком плюс после прав доступа.
При работе с ACL будут полезны следующие команды:
•setfacl(1) – установка, удаление ACL
•getfacl(1) – получение информации об установленных ACL
•ls(1) – получение списка файлов и информации о них
Перед тем как работать с командами, опишем самые необходимые опции, которые мы будем использовать, и определим порядок установки ACL.
Для setfacl(1):
-b – удаляет все установленные ACL
-m <entries> – добавляет и модифицирует существующие записи ACL
-M <file> - добавляет и модифицирует существующие ACL взятые из указанного файла
-n – не изменяет существующую маску максимальных полномочий при установке ACL
-x <entries> – удаляет конкретную запись ACL
-X <file> – удаляет записи ACL взятые из указанного файла
Порядок установки ACL:
1.Устанавливаем маску максимальных полномочий, она определяется из тех максимальных полномочий, которые должны быть у пользователя или группы на ресурс
2.Устанавливаем или модифицируем необходимые ACL с опцией отменяющей изменение маски максимальных полномочий
3.Удаляем все или необходимые ACL записи
Важно!
1.ACL никоим образом не влияет на права доступа для владельца
2.Изменение маски максимальных полномочий отражается на группе по умолчанию, т.е права определённые маской максимальных полномочий определяются и для группы по умолчанию
3.Изменение прав доступа для категории o(other) в ACL влияет на категорию o(other) по умолчанию
При установки ACL для многих групп (u,g,o) в качестве разделителя используется запятая(,).
Практика:
(Для более подробной информации о командах обязательно читайте маны)
Установим ACL на файл и проверим работоспособность наших ACL:
fdesktop1# touch test.file
fdesktop1# ls -l test.file
-rw-r--r-- 1 root 0 0 Jul 8 01:40 test.file
fdesktop1# setfacl -m m::rw test.file
fdesktop1# setfacl -n -m u:atrium:r,u:tests:rw test.file
fdesktop1# getfacl test.file
# file: test.file
# owner: root
# group: 0
user::rw-
user:atrium:r--
user:tests:rw-
group::r--
mask::rw-
other::r—
|
Далее заходим пользователем atrium и проверяем установленные полномочия:
$ echo "test message" >> /home/test.file
cannot create /home/test.file: Permission denied
|
Давайте теперь изменим полномочия для пользователя atrium и установим для него права доступа rw- и попробуем произвести запись в тот же файл:
fdesktop1# setfacl -n -m u:atrium:rw test.file
fdesktop1# getfacl test.file
# file: test.file
# owner: root
# group: 0
user::rw-
user:atrium:rw-
user:tests:rw-
group::r--
mask::rw-
other::r--
$ echo "test message" >> /home/test.file
$ cat /home/test.file
test message
$
|
При установке ACL важен порядок следования опций, опция –n должна следовать перед опцией –m или -x
Важно!
Обязательно не забывайте использовать опцию –n при установке, модификации или удалении существующих ACL, так как при добавлении, модификации или удалении ACL без опции –n происходит изменение максимальной маски полномочий в сторону уменьшения или увеличения, в зависимости от прав доступа.
Удалим ACL установленные для пользователя tests:
fdesktop1# getfacl test.file
# file: test.file
# owner: root
# group: 0
user::rw-
user:atrium:rw- # effective: r--
user:tests:rw- # effective: r--
group::r--
mask::r--
other::r--
fdesktop1# setfacl -n -x u:tests:rw test.file
fdesktop1# getfacl test.file
# file: test.file
# owner: root
# group: 0
user::rw-
user:atrium:rw- # effective: r--
group::r--
mask::r--
other::r--
|
Сделаем тоже самое, только без опции –n для демонстрации того, как меняется максимальная маска полномочий:
fdesktop1# getfacl test.file
# file: test.file
# owner: root
# group: 0
user::rw-
user:atrium:rw- # effective: r--
user:tests:rw- # effective: r--
group::r--
mask::r--
other::r--
fdesktop1# setfacl -x u:tests:rw test.file
fdesktop1# getfacl test.file
# file: test.file
# owner: root
# group: 0
user::rw-
user:atrium:rw-
group::r--
mask::rw-
other::r--
|
Как можно видеть максимальная маска полномочий изменилась в сторону увеличения, что соответственно может привести к проблемам с безопасностью, поэтому будьте внимательны.
Установим ACL для 2 или более пользователей одной командой:
fdesktop1# setfacl -m m::r test.file
fdesktop1# setfacl -n -m u:atrium:rw,u:root:r,u:tests:rw test.file
fdesktop1# getfacl test.file
# file: test.file
# owner: root
# group: wheel
user::rwx
user:root:r--
user:atrium:rw- # effective: r--
user:tests:rw- # effective: r--
group::rw- # effective: r--
mask::r--
other::r--
fdesktop1#
|
Посмотрим как действует маска максимальных полномочий:
Создадим файл и установим на него ACL в виде маски максимальных полномочий r(чтение), а для пользователя test и atrium установим права rw(чтение и запись), и попробуем произвести запись пользователем atrium.
Установили права
fdesktop1# setfacl -m m::r test.file
fdesktop1# setfacl -n -m u:atrium:rw,u:tests:rw test.file
fdesktop1# getfacl test.file
# file: test.file
# owner: root
# group: wheel
user::rwx
user:atrium:rw- # effective: r--
user:tests:rw- # effective: r--
group::rw- # effective: r--
mask::r--
other::r--
|
Попробуем произвести запись пользователем atrium в файл
$ echo "test string" >> ./test.file
cannot create ./test.file: Permission denied
|
Как видим, доступ запрещён, хотя права доступа для пользователя atrium – rw. Эффективные права доступа для пользователя определила маска максимальных полномочий, и отображаются эффективные права доступа напротив пользователя в виде строки:
Специальные флаги
  Для любого файла в ОС FreeBSD можно установить специальные флаги, которые накладывают определённые ограничения на манипуляции с этим файлом. Накладываемые ограничения определяются флагом, который будет установлен на файл. Использование флагов повышает безопасность файловой системы, особенно в сочетании с уровнями безопасности security(7), так как некоторые уровни(1,2) запрещаю снимать флаги даже администратору системы – root.
  Посмотреть установленные флаги для файла возможно с помощью команды ls(1) с опциями –ol. Для примера сделаем листинг каталога содержащего файл с установленным флагом schg:
fdesktop1# ls -ol test.file
-rw-r--r-- 1 root wheel schg 0 Jul 28 03:12 test.file
|
Как можно видеть из примера, в столбце 5 установлен флаг schg.
Давайте перечислим флаги, которые мы будем использовать, и определим их значение:
•arch, archived – архивный файл
•opaque – флаг непрозрачности для каталогов
•nodump – флаг исключает из резервной копии
•sappnd, sappend – системный флаг, устанавливающий возможность только добавления. Может устанавливаться только суперпользователем, т.е пользователем с UID=0.
•schg, schange, simmutable – системный флаг, устанавливающий запрет на изменение. Может устанавливаться только суперпользователем, т.е пользователем с UID=0.
•sunlnk, sunlink - системный флаг, запрещает удаление. Может устанавливаться только суперпользователем, т.е пользователем с UID=0.
•uappnd, uappend – пользовательский флаг, устанавливающий возможность только добавления. Может устанавливаться владельцем файла или суперпользователем, т.е пользователем с UID=0.
•uchg, uchange, uimmutable - пользовательский флаг, устанавливающий запрет на изменение. Может устанавливаться только владельцем файла или суперпользователем, т.е пользователем с UID=0.
•uunlnk, uunlink - пользовательский флаг, запрещает удаление. Может устанавливаться только владельцем файла или суперпользователем, т.е пользователем с UID=0.
Для установки и снятия флагов используется команда chflags(1). Для снятия флага необходимо использовать приставку no к флагу, т.е допустим необходимо снять флаг запрещающий изменение файла schg, для этого вместе с командой chflags(1) будем использовать флаг noschg:
fdesktop1# ls -ol test.file
-rw-r--r-- 1 root wheel schg 0 Jul 28 03:12 test.file
fdesktop1# chflags noschg test.file
fdesktop1# ls -ol test.file
-rw-r--r-- 1 root wheel - 0 Jul 28 03:12 test.file
fdesktop1#
|
Если необходимо установить несколько флагов для файла, то в качестве разделителя используется запятая (,).
 
Существует небольшая особенность флага sunlnk которую необходимо учитывать при его установке. Как мы знаем данный флаг, запрещает удаление файла, но никто не отменял команду:
которая как Вы уже догадались, удалит всё содержимое файла. Поэтому флаг sunlnk лучше комбинировать с флагом sappnd. Рассмотрим небольшой пример:
fdesktop1# ls -ol test.file
-rw-r--r-- 1 root wheel - 1 Aug 6 02:05 test.file
fdesktop1# echo "test message" > test.file
fdesktop1# cat test.file
test message
fdesktop1# chflags sunlnk test.file
fdesktop1# ls -ol test.file
-rw-r--r-- 1 root wheel sunlnk 13 Aug 6 02:12 test.file
fdesktop1# rm test.file
rm: test.file: Operation not permitted
fdesktop1# echo "" > test.file
fdesktop1# cat test.file
fdesktop1#
|
как видим всю информацию из файла test.file удалили, т.е мы добились практически эффекта от удаления самого файла. Теперь добавим к этому файлу флаг sappnd и проделаем тоже самое:
fdesktop1# ls -ol test.file
-rw-r--r-- 1 root wheel - 1 Aug 6 02:13 test.file
fdesktop1# echo "test message" > test.file
fdesktop1# cat test.file
test message
fdesktop1# chflags sunlnk,sappend test.file
fdesktop1# ls -ol test.file
-rw-r--r-- 1 root wheel sappnd,sunlnk 13 Aug 6 02:18 test.file
fdesktop1# echo "" > test.file
test.file: Operation not permitted.
fdesktop1# cat test.file
test message
fdesktop1#
|
Как видим, теперь информацию и сам файл удалить невозможно.
Важно!
В начале главы мы упоминали так называемые уровни безопасности, они так же играют важную роль при работе с флагами. FreeBSD по умолчанию, использует (-1) уровень безопасности:
fdesktop1# sysctl kern.securelevel
kern.securelevel: -1
|
При данном уровне у пользователя с UID=0 (root) существует возможность, как установить, так и удалить флаг. При повышении уровня безопасности до (1), такая возможность отсутствует, т.е флаги можно будет снять только при понижении уровня до (-1) или (0).
При работе с флагами будут полезны следующие команды:
•ls(1) – получение списка файлов и информации о них
•chflags(1) – установка и удаление флагов
•security(7) – прочитать про уровни безопасности.
Практика:
(Для более подробной информации о командах обязательно читайте маны)
Давайте установим на файл, два любых флага, а потом удалим один из них:
fdesktop1# ls -ol test.file
-rw-r--r-- 1 root wheel - 13 Aug 6 02:18 test.file
fdesktop1# chflags sunlnk,sappend test.file
fdesktop1# ls -ol test.file
-rw-r--r-- 1 root wheel sappnd,sunlnk 13 Aug 6 02:18 test.file
fdesktop1# chflags nosappend test.file
fdesktop1# ls -ol test.file
-rw-r--r-- 1 root wheel sunlnk 13 Aug 6 02:18 test.file
fdesktop1#
|
Удалим с файла заранее установленный флаг schg
fdesktop1# ls -ol test.file
-rw-r--r-- 1 root wheel schg 13 Aug 6 02:18 test.file
fdesktop1# chflags noschg test.file
fdesktop1# ls -ol test.file
-rw-r--r-- 1 root wheel - 13 Aug 6 02:18 test.file
|
Offline версия
|
файл
|
скачан
|
размер
|
размещён
|
примечание
|
|
971
|
985.7kb
|
2009-08-10
|
Offline руководство
|
|
Ссылка на обсуждение: http://forum.lissyara.su/viewtopic.php?f=14&t=19749.
размещено: 2009-08-10,
последнее обновление: 2010-04-10,
автор: atrium
|
|
Комментарии пользователей [0 шт.]