Особенности ACL для HDFS

Реализация POSIX ACL

Списки ACL на HDFS реализуются с помощью модели ACL POSIX. Если вы когда-либо использовали POSIX ACL в файловой системе Linux, ACL на HDFS работает также.

Совместимость и применение

HDFS может связывать дополнительный ACL с любым файлом или каталогом. Все операции HDFS, которые обеспечивают соблюдение разрешений, выраженных с помощью Permission Bits, также должны обеспечить любой ACL, который определен для файла или каталога. Любая существующая логика, которая обходит Permission Bits, также обходит и ACL. Включая супер-пользователя HDFS и установку false в конфигурации dfs.permissions.

Доступ через ориентированные на пользователя конечные точки

HDFS поддерживает операции по настройке и получению ACL, связанного с файлом или каталогом. Эти операции доступны через несколько ориентированных на пользователя конечных точек. Эти конечные точки включают FsShell CLI, программную манипуляцию через классы FileSystem и FileContext, WebHDFS и NFS.

Обратная связь пользователя: индикатор CLI для ACL

К перечисленным разрешениям любого файла или каталога с соответствующим ACL добавляется символ “+” (результат команды ls -l).

Обратная совместимость

Реализация ACL обратно совместима с существующим применением разрешенных битов. Изменения, применяемые посредством Permission Bits (то есть chmod), также отображаются как изменения в ACL. Аналогично, изменения, применяемые к записям ACL для базовых классов пользователей (“Владелец”, “Группа” и “Другие”), также отображаются в виде изменений в Permission Bits. Другими словами, операции Permission Bits и ACL управляют совместно используемой моделью, и операции Permission Bits можно рассматривать как подмножество операций ACL.

Низкие накладные расходы

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

Использование ACL влияет на производительность NameNode. Поэтому рекомендуется использовать Permission Bits, если это возможно, прежде чем использовать ACL.

Ограничения ACL

Количество записей в одном ACL ограничено максимум до 32. Попытки добавить записи ACL сверх максимума выполняются с ошибкой, обращенной к пользователю. Это делается по двум причинам: упростить управление и ограничить потребление ресурсов.

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

Число 32 соответствует максимальному количеству записей ACL, принудительно используемых семейством файловых систем ext.

Символические ссылки

У символических ссылок нет собственных списков ACL. ACL символической ссылки всегда рассматривается как разрешения по умолчанию (777 в Permission Bits). Операции, которые изменяют ACL символической ссылки, вместо этого изменяют саму символическую ссылку.

Снапшоты

При создании снапшота все списки ACL блокируются. Изменения в ACL в момент создания снапшота не фиксируются.

Инструментарий

Инструмент, который распространяет Permission Bits, не распространяет ACL. ACL включается командой cp -p и distcp “-p”.

Варианты использования ACL на HDFS

ACL на HDFS поддерживает следующие варианты использования:

Доступ нескольким пользователям

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

В данном случае устанавливается ACL доступ, содержащий несколько именованных пользовательских записей:

ACLs on HDFS supports the following use cases:

Доступ нескольким группам

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

В данном случае устанавливается ACL доступ, содержащий несколько именованных групповых записей:

group:sales:rw-
group:execs:rw-

Hive Partitioned Tables

В данном случае Hive содержит секционированную таблицу данных о продажах. Ключ раздела – country. Hive сохраняет секционированные таблицы с помощью отдельного подкаталога для каждого определенного значения ключа раздела, поэтому структура файловой системы в HDFS выглядит так:

user
`-- hive
    `-- warehouse
        `-- sales
            |-- country=CN
            |-- country=GB
            `-- country=US

Группа salesadmin – это группа для всех этих файлов. Члены группы имеют доступ на чтение и запись ко всем файлам. Отдельные группы, зависящие от конкретной страны, могут запускать запросы на использование, которые только считывают данные для конкретной страны, например, sales_CN, sales_GB и sales_US. У этих групп нет доступа на запись.

Этот вариант использования можно решить, установив ACL доступ в каждом подкаталоге, содержащем запись собственной группы и именованной группы:

country=CN
group::rwx
group:sales_CN:r-x

country=GB
group::rwx
group:sales_GB:r-x

country=US
group::rwx
group:sales_US:r-x

Important

Функциональность записи ACL группы владельца (запись группы без имени) эквивалентна установленным Permission Bits

Хранение в Hive в настоящее время не учитывает разрешения ACL в HDFS. Скорее, он проверяет доступ с использованием традиционной модели разрешений POSIX.

ACL по умолчанию

В данном случае администратор файловой системы или владелец поддерева хотел бы определить политику доступа, которая будет применяться ко всему поддереву. Эта политика доступа должна применяться не только к текущему набору файлов и каталогов, но также к любым новым файлам и каталогам, которые будут добавляться позже.

Этот вариант использования можно решить, установив ACL по умолчанию в каталог. ACL по умолчанию может содержать любую произвольную комбинацию записей. Например:

default:user::rwx
default:user:bruce:rw-
default:user:diana:r--
default:user:clark:rw-
default:group::r--
default:group:sales::rw-
default:group:execs::rw-
default:others::---

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

Минимальные ACL/Permissions

ACL на HDFS поддерживают развертывания, использующие Permission Bits, а не ACL с именованными пользователями и группами. Биты разрешения эквивалентны минимальному ACL, содержащему только 3 записи. Например:

user::rw-
group::r--
others::---

Блокировка доступа к поддереву для конкретного пользователя

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

Этот пример можно решить, установив ACL в корневое дерево, с именованной пользовательской записью, которая удаляет весь доступ пользователя. Для этой файловой системы:

dir1
`-- dir2
    `-- dir3
        |-- file1
        |-- file2
        `-- file3

dir1`-- dir2`-- dir3|-- file1|-- file2`-- file3

Установка ACL на dir2 блокирует доступ для Bruce к dir3, file1, file2 и file3:

user:bruce:---

Удаление разрешений на выполнение на dir2 означает, что Брюс не может получить доступ к dir2 и, следовательно, не может видеть ни один из его дочерних элементов. Это также означает, что доступ блокируется автоматически для любых вновь добавленных файлов под dir2. То есть если file4 создается под dir3, Брюс не сможет получить к нему доступ.

ACL с Sticky Bit

В данном случае нескольким именованным пользователям или группам требуется полный доступ к каталогу общего назначения, например, / tmp. Однако разрешения “Write” и “Execute” в каталоге также дают пользователям возможность удалять или переименовывать любые файлы в каталоге, даже файлы, созданные другими пользователями. Разрешения пользователей необходимо ограничить, чтобы у них был допуск на удаление или переименование созданных только ими файлов.

Этот случай можно решить, объединив ACL с Sticky bit. Sticky bit – это функциональность, которая в настоящее время работает с Permission Bits. И она работает в сочетании с ACL.