Дерево страниц

Вы просматриваете старую версию данной страницы. Смотрите текущую версию.

Сравнить с текущим просмотр истории страницы

Версия 1 Следующий »


Данная статья применима к:

  • Astra Linux


Введение. Что такое ACL

Списки управления доступом (Access Control Lists, ACL) предоставляют администраторам ОС Astra Linux расширенные возможности точного определения индивидуальных правил дискреционного доступа к файловым объектам (далее — ФО). При использовании ACL правила могут быть заданы индивидуально для любых пользователей и/или групп пользователей, дополняя и расширяя базовый механизм «пользователь-владелец — группа-владелец - прочие».

С помощью ACL доступ может быть предоставлен пользователю или группе независимо от доступа других пользователей, участия в группах и предоставления доступа к иным ФО. Дополнительно появляются:

  • механизм масок, позволяющий ограничивають права доступа;

  • механизм наследования ACL (ACL по умолчанию), позволяющий определять порядок присвоения атрибутов доступа создаваемым новым ФО.

Обозначения

Дискреционные права доступа управляют возможностью выполнения следующих операций:

  • чтение (read, буквенный код r, числовой код 4, битовая маска 100);

  • изменение (write, буквенный код w, числовой код 2, битовая маска 010);

  • выполнение (execute, буквенный код x, числовой код 1, битовая маска 001).

Набор прав может обозначаться строками, числами и битовыми масками, при этом на первом месте всегда операция чтение, на втором — операция изменение и на третьем — операция выполнение. Порядок записи:

  • При обозначении строкой каждое из прав обозначается соответствующим ему буквенным кодом, а отсутствие права — символом «-» в соответствующе позиции, например:

    • rwx — разрешены все операции;

    • r-x — разрешены операции чтения и выполнения (r и x),Э операция изменения запрещена;

  • При обозначении числами используются суммы числовых кодов разрешенных прав, например:

    • буквенному коду rwx соответствует число 7 (4+2+1);

    • буквенному коду r-x соответствует число 5 (4+1);

  • При обозначении битовыми масками суммируются битовые маски разрешенных прав:

    • буквенному коду rwx соответствуют число 7 и битовая маска 111;

    • буквенному коду r-x соответствуют число 5 и битовая маска 101.

Для каждого ФО базовые дискреционные права доступа определяются для трех субъектов доступа:

  • Пользователь-владелец;

  • Группа-владелец;

  • Прочие;

Соответственно, полный набор прав ФО может быть представлен:

  • Символьной строкой из 9 символов, по три символа для каждого субъекта доступа:
    rwxr-xr-x;

  • Числом из трех восьмеричных цифр, по одной цифре для каждого субъекта доступа:
    755;

  • Битовой маской, по три бита для каждого субъекта доступа:
    111 101 101

При этом на первом месте всегда записываются права пользователя-владельца, на втором — права группы-владельца, на третьем — прочих субъектов доступа.

Базовая модель управления дискреционным доступом к ФО

Как указано выше, каждому ФО присваивается набор из трех групп прав доступа:

  • Для пользователя-владельца (user);

  • Для группы-владельца (group);

  • Для прочих (other).

При этом для каждого ФО используется один и только один такой набор. В такой модели управления доступом чтобы предоставить доступ к ФО пользователю, не являющемуся пользователем-владельцем, нужно:

  • Либо сменить пользователя-владельца — тогда доступ потеряется у исходного пользователя-владельца;

  • Либо включить нового пользователя в группу-владельца - но тогда этот пользователь получит доступ ко всем ФО, у которых владельцем является эта группа;

  • Либо разрешить доступ «всем остальным», но доступ будет предоставлен всем, а не только новому пользователю.

Такая точность управления доступом недостаточна для решения практических задач, поэтому в дополнение к базовым атрибутам используются списки управления доступом (Access Control Lists, ACL).

Создание новых ФО и umask

При создании новых ФО в рамках базовой модели по умолчание применяются следующие права доступа:

  • Для файлов: 666 т.е для всех разрешены чтение и изменение;

  • Для каталогов: 777, т.е для всех разрешено чтение, запись и выполнение (выполнение для каталогов имеет значение «поиск в каталогах»);

Однако внутри системных вызовов, создающих файловые объекты, к запрошенным по умолчанию правам доступа применяется системное значение umask.

Umask — это битовая маска, в которой единичные биты обозначают запрет выставления соответствующего бита разрешения. По умолчанию значение umask равно 022, то есть:

  • Для файлов при запрошенных по умолчанию правах доступа 666 (rw-rw-rw-, 110 110 110) после применения umask 022 (000 010 010) файл будет создан с правами 644 (rw-r--r--, 110 100 100):
    110 110 110
    000 010 010
    110 100 100

  • Для каталогов при запрошенных по умолчанию правах доступа 777 (rwxrwxrwx, 111 111 111) после применения umask 022 (000 010 010) файл будет создан с правами 755 (rwxr-xr-x, 111 101 101):
    111 111 111
    000 010 010
    111 101 101

Получить текущее значение umask можно командой:
umask

Изменить значение umask можно командой:
umask 077

В приведенном примере устанавливается значение umask равное 077, то есть:

  • Файлы будут создаваться с правами по умолчанию 600 (полный запрет доступа всем, кроме пользователя-владельца);

  • Каталоги будут создаваться с правами по умолчанию 700 (также полный запрет доступа всем, кроме пользователя-владельца);

Поддерживает ли используемая ОС ACL

На момент написания данной статьи все варианты исполнения Astra Linux поддерживают ACL на уровне ядра. Также работа с ACL поддерживается рекомендованной к использованию в Astra Linux файловой системой ext4 (ACL также поддерживается файловыми системами Btrfs, ext2, ext3, xfs и др.).

Инструменты командной строки для работы с ACL содержатся в пакете acl и при стандартной установке Astra Linux устанавливаются по умолчанию.

При работе в командной строке проверить наличие пакета можно командой
apt-cache policy acl
Установить пакет можно командой:
sudo apt install ac
или использовать графический установщик пакетов.

Для работы с ACL используемая файловая система должна быть смонтирована с опцией монтирования acl. Проверить текущие опции монтирования можно командой:
sudo tune2fs -l /dev/sda1 | grep "Default mount options"

Default mount options: user_xattr acl
где /dev/sda1 — используемый для файловой системы дисковый раздел.

Файловые системы, монтируемые автоматически при загрузке ОС, обычно монтируются с поддержкой ACL (т. е. с опцей монтирования acl). Проверить опции монтирования, принятые по умолчанию, можно командой:
grep acl /etc/mke2fs.conf

default_mntopts = acl,user_xattr

Для добавляемых вручную файловых систем опцию монтирования acl может понадобиться указать явно:
sudo mount -o acl /dev/sdb1 /mnt

Модель управления доступом ACL

При использовании ACL каждому ФО могут быть присвоены дополнительные записи прав доступа к этому ФО. Записи могут быть следующих типов:

  • user — запись определяет индивидуальные права доступа для указанного пользователя, например:
    user:admin:rwx
    разрешает пользователю admin выполнять все операции с ФО.

  • group — индивидуальные права для группы, например:
    group:kvm:r-x

  • other -права для всех остальных;

Кроме того, существуют записи типа mask (маска) и записи, определяющие принятые по умолчанию ACL (default) для новых создаваемых ФО.

Назначенение ACL ФО выполняется командой setfacl:
setfacl -m u:username:rwx filename
Получение ACL выполняется командой getfacl:
getfacl filename

Маски ACL и эффективные права

Маска ACL позволяет принудительно ограничить действие всех назначенных для ФО прав ACL. Маска содержит разрешенные для ФО операции. По умолчанию маска ФО создается автоматически при создании первого ACL объекта, и изменяется автоматически, представляя собой объединение всех назначенных ACL (то есть маска, создаваемая по умолчанию, разрешает все операции, заданные правилами ACL, и не ограничивает работу правил ACL).

Получить значение маски можно командой:
getfacl filename

Например, после выполнения команды:
setfacl -m u:user1:r filename
маске будет автоматически присвоено значение
mask::r
А после выполнения команды
setfacl -m u:user2:rwx filename
маске будет автоматически присвоено значение
mask::rwx

При необходимости ограничить права доступа маску можно задать принудительно, например, запретить все операции изменения, разрешенные с помощью ACL:
setfacl -m m:rx filename

После принудительного задания маски проверка ACL ФО с помощью команды:
getfacl filename
покажет, что пользователь user2, которому ранее правилами ACL было разрешено изменение объекта, теперь имеет эффективные (действующие) права исключающие изменение объекта:
user:user2:rwx #effective:r-x

Применяемые по умолчанию ACL

Применяемые по умолчанию ACL обеспечивают механизм наследования прав доступа, удобный для управлять правами дискреционного доступа к вложенным каталогам с их содержимым. Применяемые по умолчанию ACL могут быть установлены только на каталоги. Если на каталог установлены применяемые по умолчанию ACL, то при любой вложенности каталогов всеми файловыми объектам, создаваемыми в этом каталоге наследуются эти ACL.

Важно: Применяемые по умолчанию ACL наследуются ФО, создаваемыми в каталоге, но не действуют на сам каталог, поэтому при работе с наследуемыми ACL следует не забывать устанавливать на каталоги их собственные ACL.

Важно:

Создавать ФО можно разными способами.
Например:

  • При создании нового файлового объекта командой touch ему будут назначены ACL, полученные логической операцией ИЛИ из применяемых по умолчанию ACL и маски ACL, а бит выполнения будет всегда обнулен.
    Важно: независимо от применяемых по умолчанию ACL бит исполнения в новом объекте всегда обнулен и для исполняемых файлов должен быть установлен явно.

  • При копировании файла (команда cp) сначала создается пустой файл с атрибутами доступа, копирующими исходный файл. Назначаемые по умолчаню ACL при этом применяться не будет, а новый файл будет иметь копию атрибутов исходного файла.
    При этом в команде cp предусмотрена специальная опция -p (--preserve=mode), имеющая следующее действие:

    • При отсутствии назначаемых по умолчанию ACL файл-копия получит атрибуты исходного файла минус значение umask;

    • При наличии назначаемых по умолчанию ACL файлу-копия получит набор атрибутов, являющихся пересечением назначаемых по умолчанию ACL и набора атрибутов исходного файла (см. POSIX 1003.1e/2c draft standard).
      Важно: если в назначаемых по умолчанию ACL бит исполнения не разрешен, то и в копии он будет не разрешен.

Для создания применяемых по умолчанию ACL используется ключ -d команды setfacl, пример см. ниже.

Работа с ACL

Для работы с ACL доступны два инструмента командной строки:
setfacl — установка ACL файловых объектов;

getfacl — получение ACL файловых объектов.

Полная информация по опциям этих инструментов доступна в справочной системе man:
man setfacl
man getfacl

Далее приводятся примеры типичных операций с ACL.

Примеры

Разрешить операцию чтения указанного ФО указанному пользователю:
setfacl -m u:<имя_пользователя>:r <имя_ФО>

Получить ACL указанного ФО:
getfacl <имя_ФО>

Разрешить операцию записи указанному пользователю для указанного каталога и входящих в этот каталог ФО рекурсивно:
setfacl -R -m u:<имя_пользователя>:w <имя_каталога>

Разрешить операции чтения и записи указанной группе пользователей:
setfacl -m g:<имя_группы>:rw <имя_ФО>

Удалить все ACL ФО:
setfacl -b <имя_ФО>

Удалить ACL указанного пользователя для указанного ФО:
root@dlp:~# setfacl -x u:debian /home/test.txt

Установить для указанного каталога применяемые по умолчанию ACL, применяемые по умолчанию при создании новых ФО в этом каталоге. Устанавливаются права на чтение и исполнение для указанного пользователя:
setfacl -m u:<имя_пользователя>:r-x <имя_ФО>
setfacl -d -m u:<имя_пользователя>:r-x <имя_ФО>

Удалить ACL указанного каталога, применяемые по умолчанию:
setfacl -k <имя_каталога>

Установить ACL из конфигурационного файла. Конфигурационный файл задается в формате вывода команды getfacl. Пример конфигурационного файла:
# file: /home/testdir
# owner: root
# group: root
user::rwx
user:debian:r-x
group::---
mask::r-x
other::---

# file: /home/test.txt
# owner: root
# group: root
user::rwx
user:debian:r--
group::---
mask::r--
other::---
Команда для установки ACL
setfacl --restore=acl.txt

Запрет указанному пользователю доступа к указанному ФО:

setfacl -m user:<имя_пользователя>:0 <имя_ФО>

Пример использования наследования ACL

В примере создается и настраивается каталог, содержимое которого доступно одновременно двум пользователям. При создании файлов они сохраняют свои базовые атрибуты (пользователь-владелец и группа-владелец), и вдобавок получают унаследованные ACL. Такая организация прав доступа может применяться при совместной работе над проектами.


Содание каталога:

mkdir <имя_каталога>

Настройка ACL и DACL для пользователя 1:

setfacl -m u:<имя_пользователя1>:7 <имя_каталога>

setfacl -d -m u:<имя_пользователя1>:7 <имя_каталога>

Настройка ACL и DACL для пользователя 2:

setfacl -m u:<имя_пользователя2>:7 <имя_каталога>

setfacl -d -m u:<имя_пользователя2>:7 <имя_каталога>

Как упоминалось выше, применяемые по умолчанию ACL не действуют на сам каталог, поэтому ACL на каталог должны быть установлены отдельной командой.

В базовой модели управления дискрецонным доступом к ФО для каждого ФО используется один и только один набор «пользовател-группа-другие». В такой модели управления доступом чтобы предоставить доступ к ФО другому пользователю, не являющемуся пользователем-владельцем, нужно:

  • либо сменить пользователя-владельца — тогда доступ потеряется у исходного пользователя-владельца;

  • либо включить нового пользователя в группу-владельца - но тогда этот пользователь получит доступ ко всем ФО, у которых владельцем является это группа;

  • либо разрешить доступ «всем остальным», но доступ будет предоставлен всем, а не только новому пользователю.

Такая точность управления доступом недостаточна для решения практических задач, поэтому в дополнение к базовым атрибутам используются списки управления доступом (Access Control Lists, ACL).



Базовые атрибуты доступа ФО можно получить с помощью команды:
ls -l <имя_ФО>

При наличии ACL команда получения атрибутов доступа ls добавляет симовол «+» в конце строки атрибутов.

Подробную информацию о ACL ФО можно получить с помощью команды:
getfacl <имя_ФО>
подробнее см. ниже.

  • Нет меток