Изучите и исправьте базовые права доступа HDFS

Биг датаBeginner
Практиковаться сейчас

Введение

Аналитику розничной компании нужно читать набор данных о товарах, но не изменять его. Файл существует, его блоки исправны, однако другой пользователь всё равно может получить Permission denied. Состояние хранилища и авторизация отвечают на разные вопросы: доступны ли данные и разрешён ли этой учётной записи доступ к ним?

Для определения базового доступа HDFS использует владельца, группу и биты прав. Вы будете работать как обычный владелец labex и предоставите подготовленному пользователю analyst доступ к данным через группу bigdata. Отдельная обычная учётная запись nobody будет представлять пользователя вне этой группы. NameNode работает от hdfs; вы не являетесь суперпользователем HDFS.

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

Прочитайте правила доступа

На этом шаге вы определите владельца, группу и режимы доступа закрытого набора данных.

Начните в локальном каталоге проекта:

cd /home/labex/project

Параметр HDFS -ls -d выводит запись самого каталога, а не его содержимое. Изучите каталог и файл вместе:

hdfs dfs -ls -d /user/labex/basic-permissions/team /user/labex/basic-permissions/team/products.txt

Важные поля должны содержать следующие режимы и учётные записи; размеры и временные метки различаются:

drwx------  ... labex labex ... /user/labex/basic-permissions/team
-rw-------  ... labex labex ... /user/labex/basic-permissions/team/products.txt

Первый символ описывает объект (d для каталога, - для файла). Следующие девять символов образуют три группы по три: для владельца, группы и остальных пользователей. r означает чтение, w — запись, а x — выполнение или, для каталогов, обход. Дефис означает отсутствие соответствующего разрешения.

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

Текущий режим каталога предоставляет полный доступ labex и запрещает доступ всем остальным. Файл разрешает labex чтение и запись. Убедитесь, что владелец может его прочитать:

hdfs dfs -cat /user/labex/basic-permissions/team/products.txt

Ожидаемый текст:

notebook pen
folder notebook

Сохраните исходный список с помощью локального перенаправления вывода:

hdfs dfs -ls -d /user/labex/basic-permissions/team /user/labex/basic-permissions/team/products.txt > /home/labex/project/output/initial-permissions.txt

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

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

На этом шаге вы разрешите группе bigdata обход каталога и чтение файла, затем проверите доступ аналитика.

Подготовленные пользователи labex и analyst входят в bigdata. Команда HDFS -chgrp меняет группу объекта. Как владелец и участник новой группы, вы можете назначить её, не становясь суперпользователем HDFS:

hdfs dfs -chgrp bigdata /user/labex/basic-permissions/team /user/labex/basic-permissions/team/products.txt

Задайте режимы с помощью -chmod. Каждая цифра обобщает один набор прав: r=4, w=2, x=1. Сложите нужные значения для владельца, группы и остальных:

Режим Владелец Группа Остальные
750 для каталога чтение, запись, обход чтение и обход нет доступа
640 для файла чтение и запись чтение нет доступа

Примените режим каталога:

hdfs dfs -chmod 750 /user/labex/basic-permissions/team

Примените режим файла:

hdfs dfs -chmod 640 /user/labex/basic-permissions/team/products.txt

Теперь проверьте доступ от настоящей учётной записи аналитика. sudo -u analyst запускает только эту команду от подготовленного обычного пользователя; абсолютный путь клиента HDFS выбирает тот же инструмент. Это проверка другой учётной записи, а не указание выполнять обычные файловые операции от администратора:

sudo -u analyst /usr/local/bin/hdfs dfs -cat /user/labex/basic-permissions/team/products.txt

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

Проверьте также запись. -appendToFile добавила бы содержимое локального файла в файл HDFS, если бы доступ это разрешал. Подготовленный файл проверки только для чтения в /tmp содержит дополнительное обозначение, которое не должно попасть в надёжный набор данных. Он находится вне закрытого локального домашнего каталога, чтобы обычная проверяемая учётная запись могла его прочитать; так проверка изолирует именно право записи HDFS. Следующая команда должна завершиться ошибкой.

sudo -u analyst /usr/local/bin/hdfs dfs -appendToFile /tmp/labex-hdfs-write-probe.txt /user/labex/basic-permissions/team/products.txt

Найдите Permission denied и указание на доступ для записи. Этот отказ — желаемый результат: аналитик может читать, но не добавлять данные. Ненулевой код завершения команды нормален для этого намеренного отказа; переходите к следующему шагу. Разрешение записи всем пользователям убрало бы эту защиту.

Найдите проблему обхода каталога

На этом шаге вы измените один бит прав, увидите возникший отказ доступа и восстановите только необходимое разрешение.

Сейчас файл разрешает группе чтение. Предположите, что произойдёт, если каталог позволит участникам группы видеть имена, но больше не позволит проходить через него. 740 сохраняет доступ владельца и чтение группы, убирая групповой x:

hdfs dfs -chmod 740 /user/labex/basic-permissions/team

Прочитайте тот же файл от того же аналитика. Следующая команда должна завершиться ошибкой.

sudo -u analyst /usr/local/bin/hdfs dfs -cat /user/labex/basic-permissions/team/products.txt

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

hdfs dfs -chmod 750 /user/labex/basic-permissions/team

Убедитесь, что чтение аналитиком снова работает:

sudo -u analyst /usr/local/bin/hdfs dfs -cat /user/labex/basic-permissions/team/products.txt

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

sudo -u nobody /usr/local/bin/hdfs dfs -cat /user/labex/basic-permissions/team/products.txt

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

hdfs dfs -ls -d /user/labex/basic-permissions/team /user/labex/basic-permissions/team/products.txt > /home/labex/project/output/final-permissions.txt

Прочитайте результат:

cat /home/labex/project/output/final-permissions.txt

У каталога должен быть режим drwxr-x---, у файла — -rw-r-----, владелец — labex, группа — bigdata. Сравните их смысл с исходными закрытыми режимами. Вы предоставили определённой группе минимально необходимый доступ, а не отключили проверку прав и не использовали 777.

Итоги

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

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