Pular para o conteúdo principal

TP 1 – Gerenciamento de Permissões e Personalização de Ambiente Linux

Elementos de correção

Elementos de correção para este TP estão disponíveis no repositório de exercícios: 👉 module-13 – Correções

Objetivo geral​

Compreender, aplicar e testar as permissões Unix (chmod, chown, su) em um ambiente multiusuário.
Aprender a personalizar um ambiente de usuário com .bashrc.


Duração​

1 semana

Entregável​

  • Um relatório em PDF ou Word com capturas de tela, explicações e reflexões
  • Scripts ou comandos utilizados (no relatório e em um arquivo .sh se aplicável)

Contexto​

Você é administrador de um servidor Linux utilizado por 4 colegas: Albert, Bernard, Claude e Danielle.
Você deve:

  • Criar os usuários: Albert, Bernard, Claude e Danielle
  • Preparar um espaço de trabalho comum
  • Atribuir permissões específicas
  • Testar as ações esperadas
  • Adicionar um toque pessoal ao ambiente deles com mensagens de boas-vindas animadas

PARTE 1 – Conceder direitos de administrador ao usuário eleve​

Contexto​

Neste TP, você trabalha principalmente com o usuário eleve. É possível que este usuário já tenha sido criado durante a instalação do Ubuntu 24.04. Caso não tenha sido, você deve criá-lo manualmente.

Tarefa​

Criar o usuário eleve com a senha eleve
(caso não tenha sido feito durante a instalação do Ubuntu 24.04).
Depois, adicione este usuário ao grupo sudo para que ele possa executar comandos administrativos.

Comandos a completar​

Comando 1.1 : ___________________________________________   # Criar o usuário eleve com a senha eleve (se necessário)
Comando 1.2 : ___________________________________________ # Adicionar o usuário eleve ao grupo sudo
Comando 1.3 : ___________________________________________ # Abrir o arquivo sudoers com a ferramenta segura
Comando 1.4 : ___________________________________________ # Verificar ou adicionar a linha autorizando eleve a usar sudo
Comando 1.5 : ___________________________________________ # Testar um comando com sudo (ex: sudo ls /root)

Resultado esperado​

  • O usuário eleve existe e pode se conectar com sua senha
  • Ele pode executar comandos com sudo (senha obrigatória)
  • Nenhuma mensagem de erro ao executar um comando sudo

Capturas de tela exigidas​

  1. Criação do usuário eleve (se necessário)
  2. Adição ao grupo sudo
  3. Conteúdo do arquivo sudoers modificado ou verificado
  4. Teste bem-sucedido de um comando com sudo

PARTE 2 – Criação dos usuários e alteração de suas senhas​

Contexto​

Você está agora conectado como eleve ou root, ambos com direitos sudo. Você deve:

  • Criar quatro usuários: albert, bernard, claude, danielle
  • Definir uma senha inicial durante a criação (anote-a)
  • Verificar se seus diretórios pessoais foram criados
  • Testar a conexão com su -
  • Alterar suas senhas a partir da sua conta eleve

Comandos a completar​

Comando 2.1 : ___________________________________________   # Criar o usuário albert (indique a senha utilizada)
Comando 2.2 : ___________________________________________ # Criar o usuário bernard (senha a ser anotada)
Comando 2.3 : ___________________________________________ # Criar o usuário claude (senha a ser anotada)
Comando 2.4 : ___________________________________________ # Criar o usuário danielle (senha a ser anotada)
Comando 2.5 : ___________________________________________ # Exibir os diretórios em /home para verificar as criações
Comando 2.6 : ___________________________________________ # Conectar com su - albert, depois retornar para eleve
Comando 2.7 : ___________________________________________ # Alterar a senha do usuário albert a partir de eleve
Comando 2.8 : ___________________________________________ # Alterar a senha do usuário bernard a partir de eleve
Comando 2.9 : ___________________________________________ # Alterar a senha do usuário claude a partir de eleve
Comando 2.10 : __________________________________________ # Alterar a senha do usuário danielle a partir de eleve

Resultado esperado​

  • Os diretórios dos usuários aparecem em /home
  • su - albert permite conectar à sua sessão
  • Todas as senhas foram alteradas com sucesso a partir de eleve

Capturas de tela exigidas​

  1. Saída do comando ls /home
  2. Conexão bem-sucedida à sessão de albert e retorno
  3. Alterações das senhas dos 4 usuários

PARTE 3 – Adição de Danielle e Claude ao sudoers​

Contexto​

Você está conectado com o usuário eleve (ou root) que possui direitos sudo.
Agora você deve conceder os direitos de administrador a Danielle e Claude, adicionando-os ao arquivo sudoers.

Isso permitirá que eles executem comandos críticos com sudo, como atualizações do sistema, modificações de contas de usuários ou gerenciamento de arquivos do sistema.

Objetivos​

  • Adicionar claude e danielle ao arquivo sudoers
  • Verificar que ambos podem executar comandos com sudo

Comandos a completar​

Comando 3.1 : ___________________________________________   # Abrir o arquivo sudoers com visudo
Comando 3.2 : ___________________________________________ # Adicionar uma linha autorizando claude a executar comandos sudo
Comando 3.3 : ___________________________________________ # Adicionar uma linha autorizando danielle a executar comandos sudo
Comando 3.4 : ___________________________________________ # Verificar que claude pertence ao grupo sudo OU está listado em /etc/sudoers
Comando 3.5 : ___________________________________________ # Verificar que danielle pertence ao grupo sudo OU está listada em /etc/sudoers
Comando 3.6 : ___________________________________________ # Conectar com o usuário claude
Comando 3.7 : ___________________________________________ # Executar um comando com sudo (ex: sudo whoami) para testar
Comando 3.8 : ___________________________________________ # Conectar com o usuário danielle
Comando 3.9 : ___________________________________________ # Executar um comando com sudo para testar

Resultado esperado​

  • Claude e Danielle aparecem no arquivo /etc/sudoers, ou fazem parte de um grupo (ex. sudo) que lhes concede direitos de administração
  • Ao testar um comando com sudo, eles são solicitados a digitar sua senha e o comando é executado corretamente
  • Nenhuma mensagem de erro relacionada a permissões insuficientes deve aparecer

Capturas de tela exigidas​

  1. Exibição das linhas adicionadas no arquivo sudoers
  2. Execução bem-sucedida de um comando com sudo para Claude
  3. Execução bem-sucedida de um comando com sudo para Danielle

PARTE 4 – Preparação de um diretório compartilhado​

Contexto​

Você deve criar um diretório compartilhado localizado em /home/shared_data/, com uma estrutura precisa de arquivos e subpastas.
Dois scripts .sh também devem ser criados com uma mensagem exibida durante a execução.

Usuário esperado para esta parte​

Esta parte deve ser realizada como root ou como usuário eleve com direitos sudo.

Portanto, utilize o comando sudo antes de cada comando se estiver conectado como eleve.

Objetivos​

  • Criar a árvore completa em /home/shared_data
  • Escrever o conteúdo de dois scripts simples
  • Verificar a correta criação dos arquivos e pastas

Estrutura esperada​

/home/shared_data/
├── file1.txt
├── file2.txt
└── dossier1/
├── script1.sh
└── script2.sh

Conteúdo esperado para script1.sh​

#!/bin/bash
echo "Bonjour depuis le script 1!"

Conteúdo esperado para script2.sh​

#!/bin/bash
echo "Bonjour depuis le script 2!"

Comandos a completar​

Comando 4.1 : ___________________________________________   # Criar a pasta /home/shared_data
Comando 4.2 : ___________________________________________ # Criar o arquivo file1.txt
Comando 4.3 : ___________________________________________ # Criar o arquivo file2.txt
Comando 4.4 : ___________________________________________ # Criar a subpasta dossier1
Comando 4.5 : ___________________________________________ # Criar o arquivo script1.sh em dossier1
Comando 4.6 : ___________________________________________ # Criar o arquivo script2.sh em dossier1
Comando 4.7 : ___________________________________________ # Escrever o conteúdo em script1.sh
Comando 4.8 : ___________________________________________ # Escrever o conteúdo em script2.sh
Comando 4.9 : ___________________________________________ # Verificar toda a estrutura com ls -R ou tree

Resultado esperado​

  • O diretório /home/shared_data/ contém dois arquivos de texto e uma subpasta dossier1/
  • A subpasta contém dois scripts .sh com o conteúdo correto
  • O comando ls -R (ou tree) reflete exatamente a estrutura esperada

Capturas de tela exigidas​

  1. Saída do comando ls -R /home/shared_data ou tree /home/shared_data
  2. Exibição do conteúdo de script1.sh e script2.sh com cat

PARTE 5 – Atribuição de permissões​

Contexto​

Você criou uma estrutura de arquivos compartilhada em /home/shared_data.
Agora você deve atribuir proprietários e permissões precisas a cada elemento para garantir um acesso controlado.

Usuário esperado​

Esta parte deve ser realizada como root ou com o usuário eleve com direitos sudo.
Todos os comandos desta seção devem ser executados com os privilégios necessários.

Objetivos​

Atribuir os proprietários e as permissões a seguir:

Arquivo / PastaProprietárioPermissões esperadas
/home/shared_data/file1.txtalbertLeitura/escrita apenas para ele
/home/shared_data/file2.txtbernardLeitura/escrita apenas para ele
/home/shared_data/dossier1/script1.shbernardExecutável apenas por Bernard
/home/shared_data/dossier1/script2.shclaudeModificável (leitura/escrita) mas não executável
/home/shared_data/danielleControle total sobre toda a pasta (acesso completo)

Comandos a completar​

Comando 5.1 : ___________________________________________   # Alterar o proprietário de file1.txt para albert
Comando 5.2 : ___________________________________________ # Aplicar permissões de leitura/escrita apenas para albert
Comando 5.3 : ___________________________________________ # Alterar o proprietário de file2.txt para bernard
Comando 5.4 : ___________________________________________ # Aplicar permissões de leitura/escrita apenas para bernard
Comando 5.5 : ___________________________________________ # Alterar o proprietário de script1.sh para bernard
Comando 5.6 : ___________________________________________ # Aplicar permissões de execução apenas para o proprietário
Comando 5.7 : ___________________________________________ # Alterar o proprietário de script2.sh para claude
Comando 5.8 : ___________________________________________ # Aplicar permissões de leitura/escrita sem execução
Comando 5.9 : ___________________________________________ # Alterar recursivamente o proprietário da pasta shared_data para danielle
Comando 5.10 : __________________________________________ # Dar a danielle todos os direitos sobre todos os arquivos da pasta
Comando 5.11 : __________________________________________ # Verificar as permissões com ls -l /home/shared_data e subpastas

Resultado esperado​

  • Cada arquivo tem o proprietário corretamente atribuído
  • As permissões (r, w, x) são aplicadas exatamente como solicitado
  • O comando ls -l em cada arquivo deve mostrar esses direitos

Capturas de tela exigidas​

  1. Saída do comando ls -l /home/shared_data/
  2. Saída do comando ls -l /home/shared_data/dossier1/
  3. Qualquer outra prova útil que você julgar pertinente

PARTE 6 – Tabela de testes de acesso por usuário​

Contexto​

As permissões foram atribuídas. Agora é hora de testar os acessos de cada usuário aos arquivos e scripts do diretório /home/shared_data.

Para cada teste, você deve se conectar temporariamente com um usuário via comando:

su -c 'comando a executar' nome_usuario

Objetivos​

  • Verificar se os direitos de acesso funcionam como previsto
  • Documentar os resultados observados para cada teste
  • Identificar os sucessos ou erros de permissão

Comandos a completar​

Portanto, para cada usuário, teste as seguintes ações com su nome_usuario -c 'comando':

Comando 6.1 : ___________________________________________   # Albert tenta ler file1.txt
Comando 6.2 : ___________________________________________ # Albert tenta escrever em file1.txt
Comando 6.3 : ___________________________________________ # Albert tenta escrever em file2.txt
Comando 6.4 : ___________________________________________ # Bernard escreve em file2.txt
Comando 6.5 : ___________________________________________ # Bernard executa script1.sh
Comando 6.6 : ___________________________________________ # Claude modifica script2.sh (ex: adiciona uma linha)
Comando 6.7 : ___________________________________________ # Claude tenta executar script1.sh
Comando 6.8 : ___________________________________________ # Danielle modifica file1.txt
Comando 6.9 : ___________________________________________ # Danielle modifica script2.sh

Resultado esperado para cada comando​

TesteResultado Esperado
Albert lê file1.txtSucesso
Albert escreve em file1.txtSucesso
Albert escreve em file2.txtFalha (permissão negada)
Bernard escreve em file2.txtSucesso
Bernard executa script1.shSucesso
Claude modifica script2.shSucesso
Claude executa script1.shFalha (permissão negada)
Danielle modifica file1.txtSucesso
Danielle modifica script2.shSucesso

Capturas de tela exigidas​

  • Execução de cada teste com su -c
  • Mensagens de sucesso ou erro exibidas pelo sistema
  • (Por exemplo: Permission denied ou exibição do conteúdo gerado)

PARTE 7 – Personalização do ambiente .bashrc​

Contexto​

Cada usuário do seu sistema deve ter uma mensagem personalizada ou um efeito visual que aparece ao abrir uma sessão (conexão com su - nome_usuario).
Isso é feito modificando o arquivo .bashrc presente no diretório pessoal de cada usuário.

Você irá modificar este arquivo para cada um dos 4 usuários criados.

Objetivos​

  • Adicionar conteúdo personalizado no .bashrc de cada usuário
  • Utilizar pelo menos um dos seguintes comandos:
    • figlet (exibição ASCII estilizada)
    • cowsay (mensagem em balão com vaca)
    • fortune (citação aleatória)
    • echo (mensagem simples)
  • Verificar que funciona ao conectar na sessão

Comandos a completar​

Comando 7.1 : ___________________________________________   # Adicionar uma mensagem personalizada no .bashrc de albert
Comando 7.2 : ___________________________________________ # Adicionar uma mensagem personalizada no .bashrc de bernard
Comando 7.3 : ___________________________________________ # Adicionar uma mensagem personalizada no .bashrc de claude
Comando 7.4 : ___________________________________________ # Adicionar uma mensagem personalizada no .bashrc de danielle
Comando 7.5 : ___________________________________________ # Testar a exibição da mensagem para albert
Comando 7.6 : ___________________________________________ # Testar a exibição da mensagem para bernard
Comando 7.7 : ___________________________________________ # Testar a exibição da mensagem para claude
Comando 7.8 : ___________________________________________ # Testar a exibição da mensagem para danielle

Resultado esperado​

  • Quando um usuário se conecta com su - nome, uma mensagem aparece automaticamente (ASCII, citação, mensagem ou efeito visual)
  • As mensagens são diferentes para cada usuário
  • Os efeitos são visíveis diretamente no terminal após a conexão

Capturas de tela exigidas​

  1. Exibição da mensagem do .bashrc ao conectar para cada usuário
  2. Conteúdo de cada arquivo .bashrc modificado (cat /home/nome/.bashrc ou nano)

Exemplo permitido (apenas para Albert)​

echo 'figlet "Bem-vindo Albert!"' >> /home/albert/.bashrc

Para os demais, você deve inventar algo único.


PARTE 8 – Questões de reflexão finais​

Contexto​

Agora você:

  • Criou e configurou vários usuários
  • Gerenciou arquivos e permissões específicas
  • Modificou ambientes de usuário via .bashrc
  • Verificou acessos e executou scripts conforme os direitos

É hora de refletir sobre os impactos, riscos e boas práticas relacionados ao que você implementou.

Instruções​

Responda seriamente às perguntas a seguir. Você deve argumentar suas respostas. Apenas copiar e colar comandos não é suficiente. Use exemplos quando pertinente.

Sua resposta pode ser escrita diretamente abaixo de cada pergunta no relatório a ser entregue.

Perguntas a completar​

1. Qual a importância de configurar corretamente as permissões em um sistema Linux multiusuário?
(Explique o que poderia acontecer se todos os arquivos tivessem permissões 777.)

Resposta:
...............................................................................................................................
...............................................................................................................................
...............................................................................................................................

2. Qual a diferença entre permissões de execução (x) e permissões de leitura (r)? Dê um exemplo concreto.

Resposta:
...............................................................................................................................
...............................................................................................................................
...............................................................................................................................

3. Qual comando permite alterar permissões? Qual comando permite alterar o proprietário? Dê um exemplo concreto de uso correto de cada um.

Resposta:
...............................................................................................................................
...............................................................................................................................
...............................................................................................................................

4. Qual a diferença entre pertencer a um grupo (sudo) e estar explicitamente listado no arquivo /etc/sudoers?

Resposta:
...............................................................................................................................
...............................................................................................................................
...............................................................................................................................

5. Por que não é recomendado dar direitos sudo para todos os usuários de um sistema? Quais seriam os riscos?

Resposta:
...............................................................................................................................
...............................................................................................................................
...............................................................................................................................

6. O que aconteceria se um usuário pudesse modificar um script que é executado por um administrador? Dê um exemplo de falha.

Resposta:
...............................................................................................................................
...............................................................................................................................
...............................................................................................................................

7. Qual a utilidade de personalizar o .bashrc? Pode ser usado como ferramenta de engenharia social ou de segurança?

Resposta:
...............................................................................................................................
...............................................................................................................................
...............................................................................................................................


PARTE 9 – Variáveis de ambiente​

Contexto​

Você irá realizar uma série de testes para entender:

  • Como funcionam as variáveis locais e exportadas
  • Qual sua visibilidade entre usuários
  • Como tornar uma variável persistente para um usuário específico
  • Como compartilhar uma variável (ou não) entre vários usuários

Regras a seguir​

  • Trabalhe sempre com um usuário diferente (Albert, Bernard, Claude, Danielle)
  • Modifique apenas o próprio ambiente
  • Não copie o .bashrc de um usuário para outro — cada usuário deve ser tratado de forma independente

Objetivos​

  • Definir variáveis para cada usuário
  • Testar sua visibilidade em um subshell
  • Verificar que outro usuário não pode ver a variável
  • Adicionar uma variável permanente via .bashrc de cada usuário

Cenário 1 – Variáveis locais e exportadas​

Etapas a seguir para cada usuário​

(Comece por Albert)

Comando B1.1 : ___________________________________________   # Conectar com su - albert
Comando B1.2 : ___________________________________________ # Criar uma variável local nome="Albert"
Comando B1.3 : ___________________________________________ # Exibir a variável
Comando B1.4 : ___________________________________________ # Iniciar um subshell com bash
Comando B1.5 : ___________________________________________ # Verificar se a variável ainda está visível
Comando B1.6 : ___________________________________________ # Exportar a variável nome
Comando B1.7 : ___________________________________________ # Iniciar um novo shell
Comando B1.8 : ___________________________________________ # Verificar que a variável está visível neste subshell
Comando B1.9 : ___________________________________________ # Sair e retornar para eleve

Repita estas etapas para Bernard (nome="Bernard"), Claude (nome="Claude") e Danielle (nome="Danielle").

Resultado esperado​

  • Variáveis não exportadas desaparecem em um subshell
  • Variáveis exportadas persistem em um subshell
  • Cada usuário só pode acessar suas próprias variáveis

Cenário 2 – Variáveis permanentes via .bashrc​

Etapas a seguir (exemplo com Claude)​

Comando B2.1 : ___________________________________________   # Conectar com su - claude
Comando B2.2 : ___________________________________________ # Abrir o arquivo ~/.bashrc
Comando B2.3 : ___________________________________________ # Adicionar export PROJET_CLAUDE="Projeto Sistema"
Comando B2.4 : ___________________________________________ # Recarregar ~/.bashrc com source
Comando B2.5 : ___________________________________________ # Verificar que a variável está definida
Comando B2.6 : ___________________________________________ # Fechar a sessão e reconectar para testar a persistência
Comando B2.7 : ___________________________________________ # Repetir echo $PROJET_CLAUDE

Repita o mesmo processo com:

  • PROJET_ALBERT="TP Segurança" para Albert
  • PROJET_BERNARD="TP Scripts" para Bernard
  • PROJET_DANIELLE="TP Admin" para Danielle

Resultado esperado​

  • Cada usuário possui uma variável permanente visível ao conectar
  • Essas variáveis só são visíveis para o próprio usuário
  • O comando echo $PROJET_X retorna o valor correto após reiniciar

Perguntas de reflexão para redigir em seu relatório​

1. Qual diferença você observa entre uma variável exportada no terminal e uma variável adicionada no .bashrc?
...............................................................................................................................

2. É possível para Bernard acessar uma variável definida por Albert? Por quê?
...............................................................................................................................

3. Qual método você usaria se quisesse compartilhar uma mesma variável entre todos os usuários? (Dica: /etc/profile)
...............................................................................................................................

4. É possível remover uma variável exportada? Como?
...............................................................................................................................

5. Em que é preciso ter atenção ao modificar o .bashrc? Dê um exemplo de erro potencial.
...............................................................................................................................


PARTE 10 – Escopo das variáveis entre usuários​

Contexto​

Você irá testar se uma variável definida (local ou exportada) por Albert é acessível por outros usuários (Bernard, Claude, Danielle).
Isso permitirá entender os limites de escopo das variáveis em um sistema Linux multiusuário.

Objetivos​

  • Definir uma variável exportada com um usuário
  • Conectar com outro usuário
  • Testar o escopo da variável
  • Entender por que ela não é visível
  • Encontrar o método correto para torná-la visível para todos

Etapas a seguir​

Comando B1.1 : ___________________________________________   # Conectar com su - albert
Comando B1.2 : ___________________________________________ # Criar uma variável ville=Montreal
Comando B1.3 : ___________________________________________ # Exportar a variável ville
Comando B1.4 : ___________________________________________ # Verificar que está exportada (echo $ville)
Comando B1.5 : ___________________________________________ # Sair da sessão albert (exit)
Comando B1.6 : ___________________________________________ # Conectar com su - bernard
Comando B1.7 : ___________________________________________ # Tentar exibir a variável $ville

Resultado esperado​

  • A variável ville existe apenas para Albert, mesmo que tenha sido exportada
  • Para Bernard (ou qualquer outro usuário), a variável não está visível

Pergunta para redigir em seu relatório​

1. Por que a variável exportada por Albert não está visível para Bernard?
...............................................................................................................................

2. Como fazer para que uma variável seja acessível para todos os usuários automaticamente?
(Dica: onde seria preciso escrever export ville=Montreal para que seja carregada para todos os usuários?)
...............................................................................................................................

Extensão opcional (bônus avançado – 2 pontos extras)​

Encontre uma forma de definir uma variável comum a todos os usuários, sem precisar declará-la para cada um.
Indique o arquivo de sistema a ser modificado e faça uma demonstração com Albert, Bernard ou Danielle.

Tabela resumo – Escopo das variáveis em um sistema Linux​

Local / MétodoVisível para o usuário atual?Visível em um subshell?Visível para outros usuários?Persiste após fechar a sessão?
ville=Montreal✅❌❌❌
export ville=Montreal✅✅❌❌
Adição em ~/.bashrc✅✅❌✅ (apenas para este usuário)
Adição em /etc/profile ou /etc/environment✅ para todos✅ para todos✅✅

Conclusão a inserir no relatório​

  • Uma variável definida no terminal é local ao shell atual. Verdadeiro ou falso?
  • Uma variável exportada é herdada pelos subshells, mas nunca por outros usuários. Verdadeiro ou falso?
  • Para tornar uma variável permanente, é preciso colocá-la em um arquivo como .bashrc. Verdadeiro ou falso?
  • Para que ela seja acessível a todos os usuários, é preciso escrevê-la em um arquivo de sistema compartilhado como /etc/profile, com cuidado (direitos root necessários). Verdadeiro ou falso?

PARTE Bônus – Questões de reflexão adicionais​

1. Qual a diferença entre chmod a+x e chmod 755?
...............................................................................................................................

2. Por que restringir os direitos de execução a certos usuários?
...............................................................................................................................

3. O que acontece se um arquivo tiver direitos 777 em um ambiente sensível?
...............................................................................................................................

4. Para que serve o sticky bit em um diretório como /tmp?
...............................................................................................................................

5. Como evitar que um usuário se torne acidentalmente proprietário de um arquivo crítico?
...............................................................................................................................


TP criado em: Dezembro de 2024