Введение
Аналитику розничной компании нужно читать набор данных о товарах, но не изменять его. Файл существует, его блоки исправны, однако другой пользователь всё равно может получить 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 для владельца, группы и остальных, назначили группу общего доступа и использовали разные режимы для каталога и файла. Проверки от реальных учётных записей подтвердили, что аналитик может читать, но не писать, а посторонний пользователь не может читать.
Убрав и восстановив разрешение обхода каталога, вы узнали, почему файл с разрешённым чтением всё же может быть недоступен по своему пути. В следующем задании вы самостоятельно найдёте и исправите похожую проблему общего доступа.



