Pular para o conteúdo principal

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​

  1. Qual a diferença entre 755 e 644?

    • 755: executável (para scripts/diretórios)
    • 644: somente leitura (para arquivos normais)
  2. Quando usar ACLs vs chmod?

    • ACLs: permissões granulares para usuários/grupos específicos
    • chmod: permissões padrão (owner/group/others)
  3. 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