TP 1 – Gerenciamento de Permissões e Personalização de Ambiente Linux
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
.shse 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
eleveexiste 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
- Criação do usuário
eleve(se necessário) - Adição ao grupo sudo
- Conteúdo do arquivo sudoers modificado ou verificado
- 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 - albertpermite conectar à sua sessão- Todas as senhas foram alteradas com sucesso a partir de
eleve
Capturas de tela exigidas
- Saída do comando
ls /home - Conexão bem-sucedida à sessão de
alberte retorno - 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
- Exibição das linhas adicionadas no arquivo
sudoers - Execução bem-sucedida de um comando com
sudopara Claude - Execução bem-sucedida de um comando com
sudopara 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 subpastadossier1/ - A subpasta contém dois scripts
.shcom o conteúdo correto - O comando
ls -R(outree) reflete exatamente a estrutura esperada
Capturas de tela exigidas
- Saída do comando
ls -R /home/shared_dataoutree /home/shared_data - Exibição do conteúdo de
script1.shescript2.shcomcat
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 / Pasta | Proprietário | Permissões esperadas |
|---|---|---|
/home/shared_data/file1.txt | albert | Leitura/escrita apenas para ele |
/home/shared_data/file2.txt | bernard | Leitura/escrita apenas para ele |
/home/shared_data/dossier1/script1.sh | bernard | Executável apenas por Bernard |
/home/shared_data/dossier1/script2.sh | claude | Modificável (leitura/escrita) mas não executável |
/home/shared_data/ | danielle | Controle 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 -lem cada arquivo deve mostrar esses direitos
Capturas de tela exigidas
- Saída do comando
ls -l /home/shared_data/ - Saída do comando
ls -l /home/shared_data/dossier1/ - 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
| Teste | Resultado Esperado |
|---|---|
| Albert lê file1.txt | Sucesso |
| Albert escreve em file1.txt | Sucesso |
| Albert escreve em file2.txt | Falha (permissão negada) |
| Bernard escreve em file2.txt | Sucesso |
| Bernard executa script1.sh | Sucesso |
| Claude modifica script2.sh | Sucesso |
| Claude executa script1.sh | Falha (permissão negada) |
| Danielle modifica file1.txt | Sucesso |
| Danielle modifica script2.sh | Sucesso |
Capturas de tela exigidas
- Execução de cada teste com
su -c - Mensagens de sucesso ou erro exibidas pelo sistema
- (Por exemplo:
Permission deniedou 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
.bashrcde 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
- Exibição da mensagem do
.bashrcao conectar para cada usuário - Conteúdo de cada arquivo
.bashrcmodificado (cat /home/nome/.bashrcounano)
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
.bashrcde 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
.bashrcde 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 AlbertPROJET_BERNARD="TP Scripts"para BernardPROJET_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_Xretorna 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
villeexiste 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étodo | Visí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