Fundamentos do Linux
Introdução
Linux é um sistema operacional open source baseado em Unix. Entender Linux é essencial em cibersegurança porque:
- A maioria dos servidores web utiliza Linux
- As ferramentas de segurança são frequentemente desenvolvidas para Linux
- O WSL permite usar Linux no Windows
Comparação Windows vs Linux
Estrutura do sistema de arquivos
| Aspecto | Windows | Linux |
|---|---|---|
| Raiz | C:\ | / |
| Separador | \ | / |
| Case sensitive | Não | Sim |
| Usuários | C:\Users\nome | /home/nome |
| Programas | C:\Program Files | /usr/bin, /opt |
| Configuração | Registro | Arquivos texto (/etc) |
Estrutura de diretórios do Linux
/
├── bin/ # Binários essenciais
├── boot/ # Arquivos de inicialização
├── dev/ # Dispositivos
├── etc/ # Configuração do sistema
├── home/ # Diretórios dos usuários
├── lib/ # Bibliotecas
├── media/ # Pontos de montagem de mídia
├── mnt/ # Pontos de montagem temporários
├── opt/ # Softwares opcionais
├── proc/ # Processos (virtual)
├── root/ # Home do root
├── sbin/ # Binários do sistema
├── tmp/ # Arquivos temporários
├── usr/ # Programas de usuário
└── var/ # Dados variáveis (logs, mail)
Comandos Essenciais
Navegação
# Diretório atual
pwd
# Listar arquivos
ls
ls -la # Detalhes + arquivos ocultos
ls -lh # Tamanhos legíveis
# Mudar de diretório
cd /caminho
cd ~ # Home
cd - # Anterior
cd .. # Pai
Arquivos e Pastas
# Criar
mkdir pasta
touch arquivo
# Copiar
cp origem destino
cp -r pasta/ destino/
# Mover/Renomear
mv origem destino
# Remover
rm arquivo
rm -r pasta/
rm -rf pasta/ # Forçado (PERIGO!)
# Exibir conteúdo
cat arquivo
less arquivo # Paginação
head -n 10 arquivo
tail -n 10 arquivo
tail -f arquivo # Acompanhamento em tempo real
Busca
# Encontrar arquivos
find /caminho -name "*.txt"
find / -type f -name "password*"
find / -perm -4000 # SUID
# Buscar dentro dos arquivos
grep "padrão" arquivo
grep -r "padrão" /caminho/
grep -i "padrão" arquivo # Case insensitive
Permissões
# Ver permissões
ls -l arquivo
# Formato: -rwxrwxrwx
# │└┬┘└┬┘└┬┘
# │ │ │ └── Outros (o)
# │ │ └───── Grupo (g)
# │ └──────── Proprietário (u)
# └────────── Tipo (- arquivo, d diretório)
# Modificar permissões
chmod 755 arquivo # rwxr-xr-x
chmod u+x arquivo # Adicionar execução para user
chmod go-w arquivo # Remover escrita para group/others
# Modificar proprietário
chown user:group arquivo
Valores chmod
| Valor | Permissão |
|---|---|
| 7 | rwx (leitura + escrita + execução) |
| 6 | rw- (leitura + escrita) |
| 5 | r-x (leitura + execução) |
| 4 | r-- (somente leitura) |
| 0 | --- (nenhuma) |
Usuários e Grupos
Arquivos importantes
| Arquivo | Conteúdo |
|---|---|
/etc/passwd | Lista de usuários |
/etc/shadow | Senhas hash |
/etc/group | Lista de grupos |
/etc/sudoers | Configuração do sudo |
Comandos de usuário
# Usuário atual
whoami
id
# Trocar de usuário
su - username
su - # Tornar-se root
# Executar como root
sudo comando
sudo -i # Shell root
# Gerenciar usuários
useradd username
passwd username
userdel username
Processos
Comandos
# Listar processos
ps aux
ps -ef
# Árvore de processos
pstree
# Tempo real
top
htop # Versão aprimorada
# Matar um processo
kill PID
kill -9 PID # Forçado
killall nome
# Plano de fundo
comando &
jobs
fg %1
bg %1
Sinais comuns
| Sinal | Número | Descrição |
|---|---|---|
| SIGTERM | 15 | Finalizar normalmente |
| SIGKILL | 9 | Matar imediatamente |
| SIGINT | 2 | Interrupção (Ctrl+C) |
| SIGHUP | 1 | Desconexão |
Rede
Comandos
# Configuração de IP
ip addr
ifconfig # Antigo
# Conexões
netstat -tulpn
ss -tulpn # Moderno
# Testar conectividade
ping endereço
traceroute endereço
# DNS
nslookup domínio
dig domínio
# Transferência
wget url
curl url
curl -o arquivo url
# Conexão remota
ssh user@servidor
scp arquivo user@servidor:/caminho/
Serviços e Daemons
systemd (moderno)
# Status
systemctl status serviço
# Iniciar/Parar
systemctl start serviço
systemctl stop serviço
systemctl restart serviço
# Ativar/Desativar na inicialização
systemctl enable serviço
systemctl disable serviço
# Listar serviços
systemctl list-units --type=service
SysVinit (antigo)
service nome start
service nome stop
service nome status
Arquivos Importantes para Segurança
Configuração
| Arquivo | Descrição |
|---|---|
/etc/passwd | Contas de usuários |
/etc/shadow | Hash das senhas |
/etc/sudoers | Privilégios do sudo |
/etc/ssh/sshd_config | Configuração do SSH |
/etc/crontab | Tarefas agendadas do sistema |
Logs
| Arquivo | Descrição |
|---|---|
/var/log/auth.log | Autenticação (Debian) |
/var/log/secure | Autenticação (RedHat) |
/var/log/syslog | Logs do sistema |
/var/log/messages | Mensagens gerais |
/var/log/apache2/ | Logs do Apache |
Consultar logs
# Journalctl (systemd)
journalctl
journalctl -u serviço
journalctl -f # Tempo real
journalctl --since today
# Arquivos
tail -f /var/log/auth.log
grep "Failed" /var/log/auth.log
Bits Especiais (Segurança)
SUID (Set User ID)
Permite executar um programa com os privilégios do proprietário.
# Encontrar arquivos SUID
find / -perm -4000 2>/dev/null
# Exemplo: passwd tem SUID root para modificar /etc/shadow
ls -l /usr/bin/passwd
# -rwsr-xr-x 1 root root ... /usr/bin/passwd
SGID (Set Group ID)
Semelhante, mas para o grupo.
find / -perm -2000 2>/dev/null
Sticky Bit
Impede a remoção de arquivos por não proprietários.
ls -ld /tmp
# drwxrwxrwt ... /tmp
# O 't' indica o sticky bit
Scripting Bash Básico
Primeiro script
#!/bin/bash
# Meu primeiro script
echo "Olá, $USER!"
echo "Hoje é $(date)"
echo "Você está em $(pwd)"
Variáveis e condições
#!/bin/bash
# Variáveis
nome="Linux"
versao=5
# Condição
if [ $versao -gt 4 ]; then
echo "$nome versão $versao é recente"
else
echo "Versão antiga"
fi
# Laço
for i in 1 2 3 4 5; do
echo "Iteração $i"
done
Script útil - Enumeração básica
#!/bin/bash
# Enumeração básica do sistema
echo "=== INFORMAÇÕES DO SISTEMA ==="
echo "Hostname: $(hostname)"
echo "Kernel: $(uname -a)"
echo "Usuário: $(whoami)"
echo "ID: $(id)"
echo -e "\n=== USUÁRIOS ==="
cat /etc/passwd | cut -d: -f1
echo -e "\n=== ARQUIVOS SUID ==="
find / -perm -4000 2>/dev/null
echo -e "\n=== CRON JOBS ==="
cat /etc/crontab
echo -e "\n=== CONEXÕES DE REDE ==="
ss -tulpn
WSL (Windows Subsystem for Linux)
Instalação
# PowerShell (Admin)
wsl --install
# Escolher uma distribuição
wsl --install -d Ubuntu
Comandos WSL
# Listar distribuições
wsl --list --verbose
# Iniciar
wsl
# Acessar arquivos do Windows
cd /mnt/c/Users/
# Do Windows, acessar o Linux
\\wsl$\Ubuntu\home\user\
Exercícios
- Navegue pelo sistema de arquivos e liste os arquivos de
/etc - Crie um arquivo, modifique suas permissões para 644
- Encontre todos os arquivos SUID no sistema
- Escreva um script que exiba as informações do sistema
- Consulte os logs de autenticação