Списки управления доступомРефераты >> Программирование и компьютеры >> Списки управления доступом
Записи владельца и остальных не принадлежат к классу групп. Их разрешения всегда эффективны и никогда не маскируются.
3.1.2 ACL по-умолчанию
До сих пор рассматривались ACL, определяющие текущие разрешения для доступа к объектам файловой системы. Этот тип называется ACL доступа (access ACL). Другой определенный тип называется ACL по-умолчанию (default ACL). Он определяет разграничения прав доступа к объектам файловой системы, которые наследуются у родительского каталога в процессе создания объекта. Только каталоги могут быть ассоциированными с ACL по-умолчанию. ACL по-умолчанию для объектов, отличных от каталогов, не имеют никакого смысла, поскольку никакие объекты файловой системы не могут быть созданы внутри объекта, отличного от каталога. ACL по-умолчанию напрямую не участвует в процессе проверки прав доступа.
Когда каталог создается внутри другого каталога, имеющего ACL по-умолчанию, новый каталог наследует ACL доступа и ACL по-умолчанию каталога-родителя. Объекты, не являющиеся каталогами, наследуют ACL по-умолчанию каталога-родителя в качестве своего ACL доступа.
Разрешения наследованного ACL доступа далее модифицируются параметром режима доступа, который имеется в каждом системном вызове создания объекта файловой системы. Этот параметр состоит из 9 битов разрешений, которые представляют собой классы разрешений для владельца, группы и остальных. Эффективным разрешением для каждого класса устанавливается пересечение разрешений, определенных для класса в ACL и в параметре режима доступа.
Если каталог-родитель не имеет ACL по-умолчанию, разрешения нового файла определятся согласно тому, как это рекомендовано в POSIX.1. Эффективными разрешениями устанавливаются разрешения, определенные параметром режима доступа за исключением тех, которые установлены текущем параметром umask (user mask, маска пользователя).
Umask не оказывает никакого эффекта в случае, если ACL по-умолчанию определен.
3.1.3 Алгоритм проверки прав доступа
Процесс запрашивает доступ к объекту файловой системы. Сначала выбирается ACE, которая в наибольшей степени совпадает с запросом процесса. ACE просматриваются в следующем порядке: владелец, именованный пользователь, группа (группа-владелец или именованная группа), остальные. Доступ определяется только одной единственной ACE. Далее проверяется, содержит ли соответствующая ACE достаточные разрешения на доступ.
Процесс может быть членом более чем одной группы, то есть ему могут соответствовать несколько ACE. Если какая-нибудь из этих ACE содержит необходимые разрешения, то она и выбирается. Если ни одна ACE не содержит достаточных разрешений, то в доступе будет отказано независимо от выбора ACE.
Алгоритм проверки прав доступа может быть описан в псевдокоде следующим образом:
1. If
UID процесса совпадает с UID владельца Þ доступ будет определяться ACE владельца
else if
UID процесса совпадает с квалификатором в одной из ACE именованных пользователей Þ доступ будет определятся этой ACE
else if
один из GID процесса совпадает с GID группы-владельца и ACE группы владельца содержит необходимые разрешения Þ доступ будет определяться этой ACE
else if
один из GID процесса совпадает с квалификатором одной из ACE именованной группы и эта ACE содержит необходимые разрешения Þ доступ будет определяться этой ACE
else if
один из GID процесса совпадает GID группы-владельца или одной из именованных групп, но ни одна из этих ACE не содержит необходимых разрешений Þ в доступе будет отказано
else
доступ будет определяться ACE для остальных пользователей и групп.
2. If
соответствующая ACE (выбранная на предыдущем этапе) – это либо ACE владельца, либо ACE остальных и она содержит необходимые разрешения Þ доступ предоставляется
else if
соответствующая ACE – это ACE именованного пользователя, группы-владельца или именованной группы и она содержит необходимые разрешения и запись-маска также содержит необходимые разрешения (или запись-маска отсутствует) Þ доступ предоставляется
else
в доступе будет отказано
3.2 ACL в Linux
3.2.1 Статус ACL в Linux
Патчи, которые реализовывают ACL драфта 17 POSIX 1003.1e доступны для множества версий Linux уже несколько лет. Они были добавлены в версию 2.5.46 ядра Linux в ноябре 2002 года. Текущие дистрибутивы Linux до сих пор основаны на стабильной ветке ядер версии 2.4.x. Консорциум SuSE и United Linux интегрировал патчи ACL для ядер версии 2.4.x раньше остальных, и, таким образом, их текущие продукты предоставляют наиболее полную поддержку ACL в Linux на сегодняшний день.
Командные утилиты getfacl(1) и setfacl(1) в Linux не строго соответствуют драфту 17 стандарта POSIX 1003.2c. Это несоответствие выражается в основном в том, каким образом эти утилиты устанавливают ACL по-умолчанию.
Основные файловые системы, для которых реализована поддержка ACL в Linux, это Ext2, Ext3, IBM JFS, ReiserFS и SGI XFS.
3.2.2 Пример ACL доступа
Начнем с создания каталога и проверки разрешений на доступ к нему. Параметр umask определяет, какие разрешения будут замаскированы в процессе создания каталога. Если umask равен 027 (восьмеричное представление), то он будет запрещать доступ на запись для группы-владельца и полностью запрещать доступ для остальных пользователей.
$ umask 027
$ mkdir dir
$ ls -dl dir
drwxr-x--- . agruen suse . dir
Первый символ в выводе команды ls характеризует тип файла (d для каталога). Запись “rwxr-x---” характеризует разрешения на доступ к новому каталогу: чтение, запись и выполнение для владельца и чтение и выполнение для группы-владельца. Многоточие в данном примере соответствует тексту, которые не относится к данной теме, и поэтому он был убран с целью более легкого восприятия примеров.
Эти базовые разрешения имеют свой эквивалент в ACL. Просмотреть ACL можно при помощи команды getfacl.
$ getfacl dir
# file: dir
# owner: agruen
# group: suse
user::rwx
group::r-x
other::---
Первые три строки вывода команды getfacl содержат имя файла, владельца и группу-владельца файла в виде комментариев. Каждая из следующих строк содержит ACE одного из трех классов пользователей: владельца, группы и остальных.
Следующий пример добавляет права на чтение, запись и выполнение для пользователя Joe к существующим разрешениям. Для этого используется параметр –m (modify, изменить) команды setfacl(1). Вывод итогового ACL будет опять осуществляться командой getfacl(1). Опция –omit-header (пропуск заголовка) команды getfacl(1) не показывает первые три строки в выводе, которые содержат имя файла, владельца и группу-владельца файла и укорачивает вывод команды, как это показано ниже.
$ setfacl -m user:joe:rwx dir
$ getfacl --omit-header dir
user::rwx