Мы — долго запрягаем, быстро ездим, и сильно тормозим.

FreeBSD
  настройка
  подсчёт трафика
  программы
  почтовые системы
  Шелезяки
  Мелочи
  Файловая система
  WWW
  Security
  system
  /bin
  /sbin
  /usr/bin
  /usr/sbin
  Управление правами доступа
  Пользователи FreeBSD
  ACL и специальные флаги
  Записки про IBM AIX
  Games Servers
  X11
  Programming
Очумелые Ручки
OpenBSD
Cisco


www.lissyara.su —> статьи —> FreeBSD —> system —> ACL и специальные флаги

ACL и специальные флаги

Автор: atrium.


       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
    




    Offline версия
    файл скачан размер размещён примечание
    AdminFreeBSD_10082009.pdf
    921 985.7kb 2009-08-10 Offline руководство



    Ссылка на обсуждение: http://forum.lissyara.su/viewtopic.php?f=14&t=19749.

    размещено: 2009-08-10,
    последнее обновление: 2010-04-10,
    автор: atrium

    оценить статью:


    Оставьте свой комментарий:
    Ваше имя:   *
    e-mail:  
    жирный
    наклонный
    подчёркнутый
    ссылка
    цвет
    Нынешний год:   *
     


  • Хостинг HOST-FOOD

    2014-07-27, lissyara
    gmirror

    Удалённое создание софтверного зеркала средствами gmirror, на диске разбитом с использованием gpart. Использование меток дисков для монтирования разделов.
    2013-08-20, zentarim
    Scan+Print server FreeBSD 9

    Настройка сервера печати и сервера сканирования под управлением операционной системы FreebSD 9 для МФУ Canon PIXMA MP540
    2011-11-20, BlackCat
    Разъём на WiFi-карту

    Делаем съёмной несъёмную антену на WiFi-карте путём установки ВЧ-разъёма
    2011-09-14, manefesto
    Настройка git+gitosis

    Настройка системы контроля версия исходного кода в связке git+gitosis+ssh
    подписка

        вверх      
    Статистика сайта
    Сейчас на сайте находится: 10 чел.
    За последние 30 мин было: 69 человек
    За сегодня было
    5470 показов,
    607 уникальных IP
     

      Этот информационный блок появился по той простой причине, что многие считают нормальным, брать чужую информацию не уведомляя автора (что не так страшно), и не оставляя линк на оригинал и автора — что более существенно. Я не против распространения информации — только за. Только условие простое — извольте подписывать автора, и оставлять линк на оригинальную страницу в виде прямой, активной, нескриптовой, незакрытой от индексирования, и не запрещенной для следования роботов ссылки.
      Если соизволите поставить автора в известность — то вообще почёт вам и уважение.

    © lissyara 2006-10-24 08:47 MSK

    Время генерации страницы 0.1832 секунд
    Из них PHP: 60%; SQL: 40%; Число SQL-запросов: 78 шт.
    Исходный размер: 89561; Сжатая: 16548