Leia e corrija permissões básicas do HDFS

Big DataBeginner
Pratique Agora

Introdução

A pessoa responsável pela análise na empresa varejista precisa ler um conjunto de dados de produtos, mas não deve poder alterá-lo. O arquivo está presente e seus blocos estão saudáveis; ainda assim, outro usuário pode receber Permission denied. Integridade do armazenamento e autorização respondem a perguntas diferentes: os dados estão disponíveis e esta identidade tem permissão para acessá-los?

O HDFS usa proprietário, grupo e bits de permissão para decidir o acesso básico. Você trabalhará como o proprietário comum, labex, e compartilhará um conjunto de dados com a identidade preparada analyst por meio do grupo bigdata. Uma identidade comum separada, nobody, representará alguém de fora desse grupo. O NameNode é executado como hdfs; você não é o superusuário do HDFS.

Você lerá as permissões existentes, estabelecerá acesso de grupo somente de leitura e reproduzirá um problema de travessia de diretório. Essas verificações usam permissões do HDFS, não permissões de arquivos locais do Linux. O ambiente é uma configuração didática de autenticação simples, não uma demonstração de autenticação segura de produção, como Kerberos. Todos os dados de exemplo são independentes dos laboratórios anteriores. Use o Terminal.

Leia as regras de acesso

Nesta etapa, você identificará proprietário, grupo e modos de acesso de um conjunto de dados privado.

Comece no diretório local do projeto:

cd /home/labex/project

A opção -ls -d do HDFS lista a entrada do próprio diretório, em vez de seu conteúdo. Inspecione o diretório e o arquivo juntos:

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

Os campos importantes deverão incluir estes modos e identidades; tamanhos e horários variam:

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

O primeiro caractere descreve o objeto (d para um diretório, - para um arquivo). Os nove caracteres seguintes formam três grupos de três: proprietário, grupo e outros usuários. r significa leitura, w significa gravação e x significa execução ou, para diretórios, travessia. Um traço significa que a permissão correspondente está ausente.

Para um arquivo, leitura permite ler seu conteúdo e gravação permite modificá-lo. Para um diretório, leitura permite listar nomes, gravação controla a criação ou remoção de entradas em conjunto com a travessia, e execução permite passar pelo diretório para acessar um item filho nomeado. Portanto, ler um arquivo exige permissão ao longo do caminho e também no próprio arquivo.

O modo atual do diretório dá a labex acesso completo e a ninguém mais. O arquivo dá a labex acesso de leitura e gravação. Confirme que o proprietário consegue lê-lo:

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

Texto esperado:

notebook pen
folder notebook

Salve a listagem inicial usando redirecionamento de saída local:

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

Você identificou um arquivo privado, em vez de um arquivo ausente ou danificado. A próxima tarefa é conceder ao grupo pretendido apenas o acesso necessário.

Compartilhe com um grupo somente de leitura

Nesta etapa, você concederá ao grupo bigdata travessia de diretório e leitura de arquivo e testará o acesso de analyst.

Os usuários preparados labex e analyst são membros de bigdata. O comando -chgrp do HDFS altera o grupo de um objeto. Como proprietário e membro do novo grupo, você pode defini-lo sem se tornar superusuário do HDFS:

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

Defina os modos com -chmod. Cada dígito numérico resume um conjunto de permissões: r=4, w=2 e x=1. Some os valores necessários para proprietário, grupo e outros:

Modo Proprietário Grupo Outros
750 em um diretório ler, gravar, atravessar ler e atravessar sem acesso
640 em um arquivo ler e gravar ler sem acesso

Aplique o modo do diretório:

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

Aplique o modo do arquivo:

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

Agora teste a identidade real de analyst. sudo -u analyst executa apenas este comando como o usuário comum preparado; o caminho absoluto do cliente HDFS seleciona a mesma ferramenta. Este é um teste de outra identidade, não uma instrução para fazer o trabalho normal com arquivos como administrador:

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

As mesmas duas linhas de produtos deverão aparecer. O grupo consegue atravessar o diretório e ler o arquivo.

Teste também a gravação. -appendToFile acrescentaria o conteúdo de um arquivo local a um arquivo do HDFS se o acesso permitisse. O arquivo de teste somente de leitura fornecido em /tmp contém um rótulo extra que não deve fazer parte do conjunto de dados confiável. Ele está fora do diretório pessoal local privado para que a identidade comum de teste possa lê-lo; isso isola a permissão de gravação do HDFS que está sendo testada. Espera-se que o próximo comando falhe.

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

Procure Permission denied e uma indicação de acesso de gravação. Essa falha é o resultado desejado: analyst pode ler, mas não acrescentar dados. Um status de saída diferente de zero é normal para essa negação intencional; continue na próxima etapa. Tornar o arquivo gravável por todos removeria essa proteção.

Diagnostique um problema de travessia de diretório

Nesta etapa, você mudará um bit de permissão, observará a falha de acesso resultante e restaurará apenas o acesso necessário.

O arquivo atualmente permite leitura pelo grupo. Preveja o que acontecerá se o diretório permitir que membros do grupo listem nomes, mas não permitirem mais que atravessem o diretório. 740 mantém o acesso do proprietário e a leitura do grupo, removendo o x do grupo:

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

Leia o mesmo arquivo como a mesma identidade analyst. Espera-se que o próximo comando falhe.

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

A mensagem de acesso negado deverá apontar para a falta de acesso de travessia no diretório. Isso não se resolve adicionando mais permissão de leitura ao arquivo: primeiro, o caminho precisa permitir travessia. Restaure o bit x do grupo no diretório retornando ao modo praticado:

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

Confirme que a leitura de analyst funciona novamente:

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

As duas linhas originais deverão voltar a aparecer. Por fim, teste uma identidade comum de fora do grupo de compartilhamento. nobody é usado apenas como a identidade não relacionada deste laboratório. Espera-se que o próximo comando falhe.

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

A negação confirma que compartilhar com o grupo não tornou o conjunto de dados público. Salve a listagem final:

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

Leia o resultado:

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

O diretório deverá mostrar drwxr-x--- e o arquivo -rw-r-----, com proprietário labex e grupo bigdata. Compare esses significados com os modos privados iniciais. Você concedeu a um grupo específico o acesso mínimo necessário, em vez de desativar verificações de permissão ou usar 777.

Resumo

Você leu os modos de proprietário, grupo e outros do HDFS, atribuiu um grupo de compartilhamento e usou modos diferentes para um diretório e um arquivo. Testes reais de identidade confirmaram que analyst podia ler, mas não gravar, enquanto um usuário não relacionado não podia ler.

Ao remover e restaurar a travessia de diretório, você aprendeu por que um arquivo legível ainda pode estar inacessível por seu caminho. No próximo desafio, localizará e corrigirá um problema semelhante de compartilhamento de forma independente.