Защита файлов в HDFS
Существуют два метода защиты файлов в HDFS:
-
Настройка прав доступа в свойствах файлов.
-
Создание списков доступа (Access Control Lists, ACLs).
Права доступа к файлам и каталогам
В HDFS можно ограничивать доступ к файлам и каталогам с использованием стандартной модели защиты, базирующейся на соответствущем стандарте POSIX с некоторыми модификациями. Вы можете предоставлять права на файл или каталог отдельно владельцу этого объекта, определенной группе пользователей и всем остальным пользователям. Для файлов используют следующие флаги:
-
r
— право на чтение. -
w
— право на запись.
В отличие от других файловых систем, HDFS содержит только файлы с данными и не позволяет запустить какой-либо файл на выполнение.
По этой причине в файлах HDFS не используют флаг типа x
, который означал бы право на исполнение. По этой же причине HDFS не поддерживает флаги доступа типа setUID
и setGID
.
Следующие флаги гарантируют различные права доступа к каталогу HDFS:
-
r
— получить список содержимого каталога. -
w
— создавать, переименовывать и удалять дочерние файлы и каталоги (одновременно требуется правоx
). -
x
— входить внутрь каталога (командаcd
) и получать доступ ко всем дочерним файлам и каталогам (то есть возможность использовать каталог как рабочий).
Как и для файлов, HDFS не предоставляет флаги setUID
и setGID
для каталогов.
Прежде чем начать управление правами необходимо получить доступ к командному интерфейсу (Command-line Interface, CLI) узла NameNode. После этого используйте команды, приведенные в следующих шагах:
-
Прочитайте содержимое корневого каталога:
$ hdfs dfs -ls /
Вывод на консоль приведен ниже:
-rw-r--r-- 3 hdfs hadoop 20 2021-10-07 13:34 /hadoop drwxrwxrwt - yarn hadoop 0 2021-09-15 16:58 /logs drwxr-xr-x - hdfs hadoop 0 2021-10-12 13:17 /staging drwxr-xr-x - hdfs hadoop 0 2021-09-15 16:57 /system drwxrwxrwx - hdfs hadoop 0 2021-10-20 09:00 /tmp drwxr-xr-x - hdfs hadoop 0 2021-09-27 12:24 /user
Обратите внимание на каталог /logs с флагами
drwxrwxrwt
, которые означают следующее:-
d
обозначает каталог (directory). -
Первые три флага
rwx
определяют права владельца файла или каталога (в данном примере —hdfs
иyarn
). -
Вторая группа флагов
rwx
определяют права для группы пользователей (в примере —hadoop
). -
Третья группа флагов
rwx
определяет права для остальных пользователей.
-
-
Определите права на каталог /tmp как в следующем примере:
$ hdfs dfs -ls /tmp
Вывод на консоль приведен ниже:
drwxr-xr-x - hdfs hadoop 0 2021-10-20 09:03 /tmp/hadoop01 -rw-r--r-- 3 hdfs hadoop 20 2021-10-07 15:36 /tmp/test01 -rw-r--r-- 3 hdfs hadoop 21 2021-10-08 08:40 /tmp/test02 -rw-r--r-- 3 hdfs hadoop 19 2021-10-08 08:27 /tmp/test03 -rw-r--r-- 3 hdfs hadoop 0 2021-10-20 09:00 /tmp/test04
В данном примере все файлы имеют одинаковую настройку, то есть владелец имеет право на чтение и запись, группа
hadoop
— на чтение и все остальные пользователи — на чтение. -
Прежде чем изменить права на файл, используйте команды
sudo
иsu
(switch user) для переключения на авторизацию с правами пользователя по имениhdfs
(подмена пользователя или имперсонация).$ sudo -s $ su - hdfs
Выполненные команды предоставили вам привилегии владельца используемых файлов. С этого моменты вы будете выполнять последующие команды с привилегиями пользователя
hdfs
. -
Измените права доступа для группы (
g
) и других пользователей (o
) путем добавления им права на запись (+w
):$ hdfs dfs -chmod go+w /tmp/test01
Проверьте права на файл /tmp/test01:
$ hdfs dfs -ls /tmp
Убедитесь в том, что права доступа для группы
hadoop
и остальных пользователей изменились:drwxr-xr-x - hdfs hadoop 0 2021-10-20 09:03 /tmp/hadoop01 -rw-rw-rw- 3 hdfs hadoop 20 2021-10-07 15:36 /tmp/test01 -rw-r--r-- 3 hdfs hadoop 21 2021-10-08 08:40 /tmp/test02 -rw-r--r-- 3 hdfs hadoop 19 2021-10-08 08:27 /tmp/test03 -rw-r--r-- 3 hdfs hadoop 0 2021-10-20 09:00 /tmp/test04
Необходимые права назначены. Таким же образом вы можете изменять права на любые файлы и каталоги в HDFS.
Вы также можете назначить другую группу или другого владельца на файл или каталог с помощью команд chgrp
and chown
соответственно.
Список управления доступом
Список управления доступом (Access Control Lists, ACLs) содержит права доступа пользователей и групп на файлы и каталоги. К его достоинствам относится более гибкое и наглядное представление процесса управления привилегиями.
Например, вы можете использовать ACL, если необходимо назначить права различным пользователям и группам на один файл или каталог.
Для разрешения использования ACL в HDFS, активируйте соответствующее свойство в вашем кластере Hadoop.
Следующие шаги составляют процесс настройки ACL:
-
Разрешите ACL путем добавления следующего свойства в файле hdfs-site.xml:
dfs.namenode.acls.enabled : true
ПРИМЕЧАНИЕДля настройки ADH рекомендуем воспользоваться менеджером управления кластерами Arenadata Cluster Manager (ADCM).
-
Перезагрузите сервисы HDFS, чтобы применить измененные настройки. С помощью ADCM запустите задачу перенастройки и рестарта кластера.
ВАЖНОПроверьте все ли ваши сервисы выделены зеленым цветом (нормальное состояние).
-
Используйте терминал на узле NameNode, чтобы выполнить следующую команду для чтения содержимого вашего тестового каталога HDFS, например /tmp:
$ hdfs dfs -ls /tmp
Данная команда отображает все файлы и подкаталоги в каталоге /tmp.
-
Выберите файл, например test01, и выполните следующую команду для считывания ACL этого файла:
$ hdfs dfs -getfacl /tmp/test01
Вывод на консоль приведен ниже:
# file: /tmp/test01 # owner: hdfs # group: hadoop user::rw- group::rw- other::rw-
-
Добавьте в список пользователя, например
yarn
, со всеми привилегиями на этот файл с помощью следующей команды:$ hdfs dfs -setfacl -m user:yarn:rwx /tmp/test01
-
Повторите команду
hdfs dfs -getfacl /tmp/test01
для проверки обновленного списка, который теперь выглядит следующим образом:# file: /tmp/test01 # owner: hdfs # group: hadoop user::rw- user:yarn:rwx group::rw- mask::rwx other::rw-
Добавленный пользователь yarn
может читать и писать в тестовый файл. Этот пример демонстрирует, что ACL предоставляет более развитые возможности по управлению доступом к файлам и каталогам HDFS.