Защита файлов в 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. После этого используйте команды, приведенные в следующих шагах:

  1. Прочитайте содержимое корневого каталога:

    $ 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 определяет права для остальных пользователей.

  2. Определите права на каталог /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 — на чтение и все остальные пользователи — на чтение.

  3. Прежде чем изменить права на файл, используйте команды sudo и su (switch user) для переключения на авторизацию с правами пользователя по имени hdfs (подмена пользователя или имперсонация).

    $ sudo -s
    $ su - hdfs

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

  4. Измените права доступа для группы (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:

  1. Разрешите ACL путем добавления следующего свойства в файле hdfs-site.xml:

    dfs.namenode.acls.enabled : true
    ПРИМЕЧАНИЕ

    Для настройки ADH рекомендуем воспользоваться менеджером управления кластерами Arenadata Cluster Manager (ADCM).

  2. Перезагрузите сервисы HDFS, чтобы применить измененные настройки. С помощью ADCM запустите задачу перенастройки и рестарта кластера.

    ВАЖНО

    Проверьте все ли ваши сервисы выделены зеленым цветом (нормальное состояние).

  3. Используйте терминал на узле NameNode, чтобы выполнить следующую команду для чтения содержимого вашего тестового каталога HDFS, например /tmp:

    $ hdfs dfs -ls /tmp

    Данная команда отображает все файлы и подкаталоги в каталоге /tmp.

  4. Выберите файл, например test01, и выполните следующую команду для считывания ACL этого файла:

    $ hdfs dfs -getfacl /tmp/test01

    Вывод на консоль приведен ниже:

    # file: /tmp/test01
    # owner: hdfs
    # group: hadoop
    user::rw-
    group::rw-
    other::rw-
  5. Добавьте в список пользователя, например yarn, со всеми привилегиями на этот файл с помощью следующей команды:

    $ hdfs dfs -setfacl -m user:yarn:rwx /tmp/test01
  6. Повторите команду 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.

Нашли ошибку? Выделите текст и нажмите Ctrl+Enter чтобы сообщить о ней