Документация по ОС FreeBSD Суббота, 20.04.2024, 07:29
Приветствую Вас Гость | RSS
Меню сайта

Категории каталога
Мои статьи [0]
Установка и настройка [281]
X Window [25]
Man pages [30]
Ports & Packages [26]
cvs [18]
Multimedia [20]
Нововсти в мире Unix [0]
RFC [4]
RFC (Request for Comments, Запрос на комментарии) - серия документов, публикуемая сообществом исследователей и разработчиков, руководствующихся практическими интересами, в которой описывается набор протоколов и обобщается опыт функционирования Интернет.
Безопасность [52]
Работа с железом [58]
Книги по FreeBSD [17]
Сеть [505]
Программирование [40]
FireWall [58]
Темы экзамена BSDA [14]
Официальные темы экзамена BSDA, включая подробноые описания и советы по обучению.

Главная » Статьи » Безопасность

ACL и специальные флаги [2009]
ACL (access control list) – списки управления доступом. Расширяют возможность установки прав доступа на различные ресурсы, что во много раз увеличивает гибкость системы выставления прав доступа. ACL позволят установить права доступа более чем для одного пользователя и одной группы. Так же имеется возможность задания маски максимальных полномочий, которая будет определять максимальные права доступа, которые может получить пользователь, группа или другие. В свою очередь такая гибкость в выставлении прав доступа увеличивает безопасность самой системы, так как позволяет выборочно назначить доступ к тому, или иному ресурсу.
   В ACL используются те же три категории, для которых можно выставлять  ACL, что и при выставлении обычных прав доступа:

  • u(user);
  • g(group);
  • o(other);
    и для них устанавливаются стандартные флаги доступа в символьном варианте (см. тему: Права доступа):
  • r(чтение);
  • w(запись);
  • x(выполнение

  • Для примера, ACL довольно часто используются, когда компьютер с ОС FreeBSD выступает в качестве файлового сервера интегрированного в среду Windows с помощью ПО Samba. В этой системе Вы можете устанавливать права доступа с помощью галочек с машины, на которой установлена Windows, а также через ACL непосредственно в самой системе FreeBSD.
    Для того чтобы ACL начали работать необходимо собрать ядро с опцией:

    options UFS_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 во время загрузки системы, т.е при монитровании файловых систем имеет ряд недостатков:


  • Если пользователь имеет необходимый уровень доступа, то возможно перемонитрование файловой системы без флага aclsumount(8)

  • Возможно, удаление флага из файла /etc/fstab и в результате файловая система после перезагрузки системы будет без поддержки ACL, что может вызвать проблемы с безопасностью.


    2.    Второй способ – это включение флага в заголовке файловой системы. Этот способ намного предпочтительней, чем первый по следующим причинам:
  • Постоянный флаг не может быть изменён путём перемонтирования файловой системы. Так же это означает, что Вы не можете выключить флаг acls на корневой и используемой файловой системе после.

  • Установка флага в суперблоке файловой системы приводит к постоянному монтированию системы с флагом 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. Эффективные права доступа для пользователя  определила маска максимальных полномочий, и отображаются эффективные права доступа напротив  пользователя в виде строки:

    # effective: r--

    Специальные флаги

       Для любого файла в ОС 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 которую необходимо учитывать при его установке. Как мы знаем данный флаг, запрещает удаление файла, но никто не отменял команду:

    echo “” > name_file

    которая как Вы уже догадались, удалит всё содержимое файла.  Поэтому флаг 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




    Источник: http://www.lissyara.su/?id=1970
    Категория: Безопасность | Добавил: oleg (10.08.2009) | Автор: atrium
    Просмотров: 787 | Рейтинг: 0.0/0 |
    Всего комментариев: 0
    Добавлять комментарии могут только зарегистрированные пользователи.
    [ Регистрация | Вход ]
    Форма входа

    Beastie

    Друзья сайта

    Статистика

    Онлайн всего: 1
    Гостей: 1
    Пользователей: 0
    links

    Copyright MyCorp © 2024