Lab 3.2 - Gerenciamento de Permissões
Objetivos
Ao final deste lab, você será capaz de:
- Compreender as permissões Linux (rwx)
- Modificar permissões com chmod
- Alterar a propriedade com chown
- Entender permissões especiais (SUID, SGID, sticky bit)
- Utilizar ACLs (Access Control Lists)
Pré-requisitos
- Ubuntu 24.04 instalado
- Terminal aberto
- Acesso de usuário com sudo
Exercício 1: Compreendendo as Permissões
Etapa 1: Visualizar as Permissões
# Criar arquivos de teste
mkdir ~/test-permissions
cd ~/test-permissions
touch arquivo1.txt arquivo2.txt arquivo3.txt
mkdir dir1 dir2
# Ver as permissões
ls -l
# Formato: -rw-r--r-- 1 user group 0 date arquivo
# Tipo | Owner | Group | Others
Etapa 2: Interpretar as Permissões
# Analisar cada parte
ls -l arquivo1.txt
# Exemplo: -rw-r--r--
# - = arquivo normal (d = diretório, l = link)
# rw- = owner: leitura, escrita, sem execução
# r-- = group: somente leitura
# r-- = others: somente leitura
Exercício 2: Modificar Permissões (chmod)
Etapa 1: Modo Simbólico
# Adicionar execução para owner
chmod u+x arquivo1.txt
# Adicionar leitura para group
chmod g+r arquivo2.txt
# Remover escrita para others
chmod o-w arquivo3.txt
# Combinações
chmod u+x,g+r,o-r arquivo1.txt
# Verificar
ls -l
Etapa 2: Modo Octal
# 755 = rwxr-xr-x
chmod 755 arquivo1.txt
# 644 = rw-r--r--
chmod 644 arquivo2.txt
# 700 = rwx------
chmod 700 arquivo3.txt
# 777 = rwxrwxrwx (PERIGOSO!)
chmod 777 arquivo1.txt # Evite em produção
Etapa 3: Permissões de Diretórios
# Diretório executável = direito de entrar
chmod 755 dir1
# Diretório sem execução = impossível entrar
chmod 644 dir1 # ❌ Não funcionará corretamente
ls -ld dir1
# Corrigir
chmod 755 dir1
Exercício 3: Propriedade (chown)
Etapa 1: Alterar o Proprietário
# Criar um arquivo
sudo touch /tmp/arquivo-root.txt
ls -l /tmp/arquivo-root.txt
# Alterar o proprietário
sudo chown $USER /tmp/arquivo-root.txt
ls -l /tmp/arquivo-root.txt
# Alterar proprietário e grupo
sudo chown $USER:$USER /tmp/arquivo-root.txt
Etapa 2: Alterar o Grupo (chgrp)
# Ver os grupos
groups
# Alterar o grupo
sudo chgrp sudo arquivo1.txt
ls -l arquivo1.txt
# Ou com chown
sudo chown :sudo arquivo2.txt
Exercício 4: Permissões Especiais
Etapa 1: SUID (Set User ID)
# Criar um script
cat > ~/test-suid.sh << 'EOF'
#!/bin/bash
whoami
id
EOF
chmod +x ~/test-suid.sh
# Adicionar SUID
chmod u+s ~/test-suid.sh
ls -l ~/test-suid.sh # Note o 's' no lugar do 'x'
# Testar
./test-suid.sh
Etapa 2: SGID (Set Group ID)
# Criar um diretório compartilhado
mkdir ~/shared
chmod 2775 ~/shared # 2 = SGID
ls -ld ~/shared # Note o 's' no grupo
# Novos arquivos herdarão o grupo
touch ~/shared/arquivo.txt
ls -l ~/shared/arquivo.txt
Etapa 3: Sticky Bit
# /tmp utiliza sticky bit
ls -ld /tmp
# Criar um diretório com sticky bit
mkdir ~/sticky-dir
chmod 1777 ~/sticky-dir
ls -ld ~/sticky-dir # Note o 't'
# Somente o proprietário pode remover seus arquivos
Exercício 5: ACLs (Access Control Lists)
Etapa 1: Instalar as ACLs
# Verificar se está instalado
which setfacl
# Instalar se necessário
sudo apt update
sudo apt install acl
Etapa 2: Utilizar as ACLs
# Criar um arquivo
touch arquivo-acl.txt
# Ver as ACLs atuais
getfacl arquivo-acl.txt
# Dar permissão para um usuário específico
sudo setfacl -m u:outro-user:rw arquivo-acl.txt
# Dar permissão para um grupo
sudo setfacl -m g:developers:rx arquivo-acl.txt
# Ver as ACLs
getfacl arquivo-acl.txt
Etapa 3: ACLs Padrão
# Definir ACL padrão para um diretório
sudo setfacl -m d:u:outro-user:rw dir1
# Novos arquivos herdarão esta ACL
touch dir1/novo.txt
getfacl dir1/novo.txt
Exercício 6: umask
Etapa 1: Compreender umask
# Ver umask atual
umask
# umask = permissões negadas
# 022 = nega escrita para group e others
# Portanto: 666 - 022 = 644 para arquivos
# 777 - 022 = 755 para diretórios
Etapa 2: Alterar umask
# umask mais restritivo (027)
umask 027
# Criar um arquivo
touch arquivo-umask.txt
ls -l arquivo-umask.txt # Deve ser 640
# Voltar umask para o padrão
umask 022
Exercício 7: Prática Completa
Etapa 1: Cenário Real
# Criar uma estrutura de projeto
mkdir -p ~/projeto/{src,bin,docs}
touch ~/projeto/src/{script1.sh,script2.sh}
touch ~/projeto/docs/{readme.txt,guide.txt}
# Scripts executáveis para owner e group
chmod 750 ~/projeto/src/*.sh
# Docs somente leitura para todos
chmod 644 ~/projeto/docs/*.txt
# Diretório bin: executável para todos
chmod 755 ~/projeto/bin
# Verificar
ls -lR ~/projeto
Etapa 2: Segurança
# Arquivo sensível: somente leitura para owner
touch ~/projeto/config-secret.txt
chmod 600 ~/projeto/config-secret.txt
# Script de sistema: SUID root (com cuidado!)
sudo chown root:root ~/projeto/src/script1.sh
sudo chmod 4750 ~/projeto/src/script1.sh
ls -l ~/projeto/src/script1.sh
Verificação
Checklist
Verifique se você consegue:
- Ler e interpretar permissões (ls -l)
- Modificar permissões com chmod (simbólico e octal)
- Alterar proprietário com chown
- Alterar grupo com chgrp
- Utilizar SUID, SGID, sticky bit
- Configurar ACLs
- Compreender e utilizar umask
Perguntas para Reflexão
-
Qual a diferença entre 755 e 644?
- 755: executável (para scripts/diretórios)
- 644: somente leitura (para arquivos normais)
-
Quando usar ACLs vs chmod?
- ACLs: permissões granulares para usuários/grupos específicos
- chmod: permissões padrão (owner/group/others)
-
Por que o sticky bit é importante para /tmp?
- Impede que usuários removam arquivos de outros
- Segurança em diretórios compartilhados
Próximos Passos
- Lab 3.3: Pesquisa e Links
- Lab 3.4: Prática Completa
- Capítulo 3.5: Permissões de Arquivos
Lab criado em: Dezembro 2024 - Testado no Ubuntu 24.04