Pular para o conteúdo principal

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​

AspectoWindowsLinux
RaizC:\/
Separador\/
Case sensitiveNãoSim
UsuáriosC:\Users\nome/home/nome
ProgramasC:\Program Files/usr/bin, /opt
ConfiguraçãoRegistroArquivos 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​

# 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​

ValorPermissão
7rwx (leitura + escrita + execução)
6rw- (leitura + escrita)
5r-x (leitura + execução)
4r-- (somente leitura)
0--- (nenhuma)

Usuários e Grupos​

Arquivos importantes​

ArquivoConteúdo
/etc/passwdLista de usuários
/etc/shadowSenhas hash
/etc/groupLista de grupos
/etc/sudoersConfiguraçã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​

SinalNúmeroDescrição
SIGTERM15Finalizar normalmente
SIGKILL9Matar imediatamente
SIGINT2Interrupção (Ctrl+C)
SIGHUP1Desconexã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​

ArquivoDescrição
/etc/passwdContas de usuários
/etc/shadowHash das senhas
/etc/sudoersPrivilégios do sudo
/etc/ssh/sshd_configConfiguração do SSH
/etc/crontabTarefas agendadas do sistema

Logs​

ArquivoDescrição
/var/log/auth.logAutenticação (Debian)
/var/log/secureAutenticação (RedHat)
/var/log/syslogLogs do sistema
/var/log/messagesMensagens 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​

  1. Navegue pelo sistema de arquivos e liste os arquivos de /etc
  2. Crie um arquivo, modifique suas permissões para 644
  3. Encontre todos os arquivos SUID no sistema
  4. Escreva um script que exiba as informações do sistema
  5. Consulte os logs de autenticação

Referências​