Lire et corriger les permissions HDFS de base

Big DataBeginner
Pratiquer maintenant

Introduction

L’analyste du commerçant doit pouvoir lire un jeu de données de produits, sans pouvoir le modifier. Le fichier est présent et ses blocs sont sains, mais un autre utilisateur peut tout de même recevoir Permission denied. L’état du stockage et l’autorisation répondent à des questions différentes : les données sont-elles disponibles, et cette identité a-t-elle le droit d’y accéder ?

HDFS utilise un propriétaire, un groupe et des bits de permission pour décider des accès de base. Vous travaillerez comme propriétaire ordinaire, labex, et partagerez un jeu de données avec l’identité analyst préparée via le groupe bigdata. Une autre identité ordinaire, nobody, représentera une personne extérieure à ce groupe. Le NameNode s’exécute sous l’identité hdfs ; vous n’êtes pas le superutilisateur HDFS.

Vous lirez les permissions existantes, établirez un accès de groupe en lecture seule et reproduirez un problème de traversée de répertoire. Ces vérifications portent sur les permissions HDFS, et non sur celles des fichiers Linux locaux. L’environnement est une configuration pédagogique à authentification simple, pas une démonstration d’authentification de production sécurisée comme Kerberos. Toutes les données d’exercice sont indépendantes des labs précédents. Utilisez le Terminal.

Lire les règles d’accès

Dans cette étape, vous identifierez le propriétaire, le groupe et les modes d’accès d’un jeu de données privé.

Commencez dans le répertoire local du projet :

cd /home/labex/project

L’option HDFS -ls -d liste l’entrée du répertoire lui-même plutôt que son contenu. Examinez ensemble le répertoire et le fichier :

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

Les champs importants doivent inclure ces modes et ces identités ; les tailles et les horodatages varient :

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

Le premier caractère décrit l’objet (d pour un répertoire, - pour un fichier). Les neuf caractères suivants forment trois groupes de trois : propriétaire, groupe et autres utilisateurs. r signifie lecture, w écriture et x exécution ou, pour les répertoires, traversée. Un tiret signifie que la permission correspondante est absente.

Pour un fichier, la lecture permet de lire son contenu et l’écriture de le modifier. Pour un répertoire, la lecture permet de lister les noms, l’écriture contrôle la création ou la suppression d’entrées conjointement avec la traversée, et l’exécution permet de passer par le répertoire pour accéder à un enfant nommé. Lire un fichier nécessite donc des permissions le long du chemin, ainsi que sur le fichier lui-même.

Le mode actuel du répertoire donne à labex un accès complet et aucun accès aux autres. Le fichier donne à labex un accès en lecture et en écriture. Confirmez que le propriétaire peut le lire :

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

Texte attendu :

notebook pen
folder notebook

Enregistrez la liste initiale avec une redirection de sortie locale :

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

Vous avez identifié un fichier privé, plutôt qu’un fichier manquant ou endommagé. La tâche suivante consiste à accorder au groupe prévu uniquement les accès nécessaires.

Partager avec un groupe en lecture seule

Dans cette étape, vous accorderez au groupe bigdata la traversée du répertoire et la lecture du fichier, puis testerez l’accès de l’analyste.

Les utilisateurs préparés labex et analyst sont tous deux membres de bigdata. L’opération HDFS -chgrp change le groupe d’un objet. En tant que propriétaire et membre du nouveau groupe, vous pouvez le définir sans devenir superutilisateur HDFS :

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

Définissez les modes avec -chmod. Chaque chiffre résume un ensemble de permissions : r=4, w=2 et x=1. Additionnez les valeurs nécessaires pour le propriétaire, le groupe et les autres :

Mode Propriétaire Groupe Autres
750 sur un répertoire lire, écrire, traverser lire et traverser aucun accès
640 sur un fichier lire et écrire lire aucun accès

Appliquez le mode du répertoire :

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

Appliquez le mode du fichier :

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

Testez maintenant l’identité réelle de l’analyste. sudo -u analyst exécute uniquement cette commande sous l’utilisateur ordinaire préparé ; le chemin absolu du client HDFS sélectionne le même outil. Il s’agit de tester une autre identité, et non d’effectuer les opérations habituelles sur les fichiers en tant qu’administrateur :

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

Les deux mêmes lignes de produits doivent apparaître. Le groupe peut traverser le répertoire et lire le fichier.

Testez aussi l’écriture. -appendToFile ajouterait le contenu d’un fichier local à un fichier HDFS si l’accès l’autorisait. Le fichier de test en lecture seule fourni dans /tmp contient un libellé supplémentaire qui ne doit pas intégrer le jeu de données de confiance. Il se trouve hors du répertoire personnel local privé pour que l’identité ordinaire de test puisse le lire ; cela isole la permission d’écriture HDFS testée. La commande suivante doit échouer.

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

Repérez Permission denied et une indication d’accès en écriture. Cet échec est le résultat souhaité : l’analyste peut lire, mais ne peut pas ajouter de contenu. Un code de sortie non nul est normal pour ce refus intentionnel ; passez à l’étape suivante. Autoriser tout le monde à écrire dans le fichier supprimerait cette protection.

Diagnostiquer un problème de traversée de répertoire

Dans cette étape, vous modifierez un bit de permission, observerez l’échec d’accès obtenu et rétablirez uniquement l’accès nécessaire.

Le fichier autorise actuellement la lecture au groupe. Prévoyez ce qui se passe si le répertoire permet aux membres du groupe de lister les noms, mais plus de traverser le répertoire. 740 conserve l’accès du propriétaire et la lecture du groupe tout en retirant le x du groupe :

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

Lisez le même fichier avec la même identité d’analyste. La commande suivante doit échouer.

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

Le message de refus d’accès doit indiquer l’absence de permission de traversée sur le répertoire. Ajouter davantage de permissions de lecture au fichier ne résout pas ce problème : le chemin doit d’abord être traversable. Rétablissez le bit x du groupe sur le répertoire en revenant au mode pratiqué :

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

Confirmez que la lecture par l’analyste fonctionne à nouveau :

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

Les deux lignes originales doivent réapparaître. Enfin, testez une identité ordinaire extérieure au groupe de partage. nobody sert uniquement d’identité sans lien avec le groupe dans ce lab. La commande suivante doit échouer.

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

Le refus confirme que le partage de groupe n’a pas rendu le jeu de données public. Enregistrez la liste finale :

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

Lisez le résultat :

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

Le répertoire doit afficher drwxr-x--- et le fichier -rw-r-----, avec le propriétaire labex et le groupe bigdata. Comparez leur signification aux modes privés initiaux. Vous avez accordé à un groupe précis l’accès minimal nécessaire, plutôt que de désactiver les vérifications de permissions ou d’utiliser 777.

Résumé

Vous avez lu les modes HDFS propriétaire/groupe/autres, attribué un groupe de partage et utilisé des modes différents pour un répertoire et un fichier. Des tests avec les identités réelles ont confirmé que l’analyste pouvait lire sans écrire, tandis qu’un utilisateur extérieur ne pouvait pas lire.

En retirant puis en rétablissant la traversée du répertoire, vous avez compris pourquoi un fichier lisible peut rester inaccessible par son chemin. Dans le prochain défi, vous localiserez et corrigerez de façon autonome un problème de partage semblable.