Minha mais simples matemática: Conhecimento dividido é poder multiplicado!

Categoria: SysAdmin/DevOps

  • guia linux manual express

    (em desenvolvimento)

    Yet Another Linux Howto (reconstruído)

    Foco: Ubuntu (Debian-family) e Red Hat (RHEL-family)
    Dedicado a Evi Nemeth e a Jokka das Trevas

    Prólogo

    Isto é um curso prático (com teoria na medida certa), pensado para te dar “mão de obra de produção” em ambientes corporativos: servidores, VMs, cloud, containers, automação e troubleshooting.
    A regra do jogo: tudo com exemplos reais, e sempre com notas de diferença Ubuntu vs RHEL.


    Como montar o laboratório (recomendado)

    • 2 VMs:
      • Ubuntu Server LTS
      • RHEL / Rocky / Alma (equivalentes para treinar)
    • Snapshot antes de cada módulo.
    • Uma rede NAT + uma rede host-only (pra simular “corp” + “mgmt”).
    • Uma pasta compartilhada com scripts e anotações.

    Índice (limpo e sem duplicações)

    1. Fundamentos de Linux e linha de comando
    2. FHS, dispositivos e “tudo é arquivo”
    3. Pipes, redirecionamentos e processamento de texto (o “coração Unix”)
    4. Gerenciamento de pacotes e repositórios (APT vs DNF/RPM)
    5. Usuários, grupos, sudo e identidade corporativa (PAM/SSSD/LDAP)
    6. Permissões, ACL, umask, capabilities e (SELinux/AppArmor)
    7. Processos, sinais, prioridades e cgroups (prática de produção)
    8. Boot e systemd: units, targets, timers e troubleshooting de boot
    9. Logs, journald, logrotate e auditoria (auditd)
    10. Rede: IP, rotas, DNS, troubleshooting (Netplan vs NetworkManager)
    11. Firewall e filtragem: UFW/Firewalld, nftables e casos reais
    12. SSH e acesso remoto seguro (chaves, bastion, hardening)
    13. Storage: partições, RAID, LVM, filesystems (ext4/xfs/btrfs)
    14. Backups e recuperação (rsync/tar/borg/snapshots)
    15. Virtualização com KVM/libvirt (o padrão Linux)
    16. Containers: Podman/Docker, rootless, volumes, redes
    17. Automação: Bash “de verdade”, Python utilitário, Ansible
    18. Observabilidade: métricas, iostat/sar, Prometheus node_exporter (visão admin)
    19. Troubleshooting: método, ferramentas e “playbooks”
    20. Segurança operacional: patching, hardening, compliance e resposta a incidentes
    21. “Unix Pipe at the Gates of Dawn”: filosofia aplicada e fluência

    1) Fundamentos de Linux e linha de comando

    O que você precisa dominar

    • Shell (bash), quoting, globbing, exit codes
    • Navegação e manipulação segura de arquivos
    • Ajuda: man, --help, /usr/share/doc

    Exemplos práticos

    Quoting (isso separa admin bom de admin perigoso):

    # errado (quebra em espaços)
    rm -rf $DIR# certo
    rm -rf -- "$DIR"

    Erros e códigos de saída:

    grep -q "PermitRootLogin no" /etc/ssh/sshd_config
    echo $? # 0 achou, 1 não achou, >1 erro

    Lab

    • Criar estrutura de diretórios de um “app” e manipular com segurança:
    mkdir -p ~/lab/app/{bin,conf,logs,data}
    touch ~/lab/app/conf/app.conf

    Ubuntu vs RHEL: quase tudo igual aqui. Diferenças começam forte em rede, pacotes e segurança mandatory (SELinux/AppArmor).


    2) FHS, dispositivos e “tudo é arquivo”

    Conceitos-chave

    • /etc = configuração, /var = dados variáveis/logs, /usr = sistema/soft, /home
    • Dispositivos em /dev e pseudo-filesystems: /proc, /sys
    • Links: hardlink vs symlink (impacto em backup e deploy)

    Exemplos

    ls -l /dev/null
    cat /proc/cpuinfo | head
    ls -l /sys/class/net

    Lab

    • Descobrir “o que é real” vs “o que é virtual”:
    df -Th
    mount | column -t

    3) Pipes e processamento de texto (fluência Unix)

    O que importa de verdade

    • Pipe | conecta stdout → stdin
    • Redirecionamentos: >, >>, 2>, &>, <<EOF
    • Grep/sed/awk: quando usar cada um
    • Regex ≠ wildcard

    Exemplos (produção)

    Achar top 10 IPs em access log:

    awk '{print $1}' /var/log/nginx/access.log | sort | uniq -c | sort -nr | head

    Ver erros de um serviço em tempo real:

    journalctl -u ssh -f

    Lab

    • Criar um “relatório” de login falho (Ubuntu costuma em /var/log/auth.log; RHEL via journald):
    sudo grep -i "failed password" /var/log/auth.log | tail -n 50

    4) Pacotes e repositórios (APT vs DNF/RPM)

    Ubuntu (APT)

    • Atualizar índice e atualizar sistema:
    sudo apt update
    sudo apt upgrade
    • Buscar e inspecionar:
    apt search nginx
    apt show nginx
    dpkg -L nginx
    • Repositórios:
      • /etc/apt/sources.list e /etc/apt/sources.list.d/*.list
      • Chaves modernas: /etc/apt/keyrings/*.gpg (evitar apt-key)

    RHEL-family (DNF/RPM)

    • Atualizar e instalar:
    sudo dnf makecache
    sudo dnf upgrade
    sudo dnf install nginx
    • Investigar:
    dnf info nginx
    rpm -ql nginx
    • Repos:
      • /etc/yum.repos.d/*.repo

    Conflitos e dependências (o que resolve 80% da dor)

    • Ubuntu:
    sudo apt -f install
    sudo dpkg --configure -a
    • RHEL:
    sudo dnf repoquery --requires pacote
    sudo dnf clean all

    Lab

    • Instalar nginx, subir, validar e remover mantendo config vs removendo tudo.

    5) Usuários, grupos, sudo e identidade corporativa

    Fundamentos

    • Bases locais: /etc/passwd, /etc/shadow, /etc/group
    • Comandos essenciais: useradd, usermod, groupadd, gpasswd
    • Sudo: regra é mínimo privilégio e auditoria

    Exemplos

    sudo useradd -m -s /bin/bash alice
    sudo passwd alice
    sudo usermod -aG sudo alice # Ubuntu (grupo sudo)
    sudo usermod -aG wheel alice # RHEL (grupo wheel)

    Sudo seguro (via visudo):

    sudo visudo
    # Exemplo: permitir apenas systemctl restart nginx
    alice ALL=(root) NOPASSWD: /bin/systemctl restart nginx

    Identidade corporativa (visão prática)

    • PAM é o “pluggable glue”.
    • Em empresas, o comum é SSSD + LDAP/Kerberos/AD.
    • Arquivos/conceitos:
      • /etc/pam.d/*
      • /etc/sssd/sssd.conf (quando usando SSSD)

    Lab

    • Criar usuário “deploy”, permitir só systemctl restart app.service, e registrar acesso no log.

    6) Permissões, ACL, umask, capabilities, SELinux/AppArmor

    Permissões clássicas

    • Dono/grupo/outros: r,w,x
    • chmod, chown, chgrp
    • umask define padrão de criação
    umask 027
    touch a
    mkdir d
    ls -l a d

    ACL (quando permissão clássica não basta)

    sudo setfacl -m u:alice:rwx /srv/app
    getfacl /srv/app

    Linux capabilities (cirúrgico)

    Ex.: permitir bind em porta <1024 sem root:

    sudo setcap 'cap_net_bind_service=+ep' /usr/local/bin/meuapp
    getcap /usr/local/bin/meuapp

    Mandatory Access Control

    • Ubuntu: AppArmor (comum por padrão)
    • RHEL: SELinux (forte e presente em corp)

    SELinux (RHEL):

    getenforce
    sudo ausearch -m avc -ts recent | tail
    sudo semanage fcontext -a -t httpd_sys_content_t "/srv/site(/.*)?"
    sudo restorecon -Rv /srv/site

    AppArmor (Ubuntu):

    sudo aa-status
    sudo aa-logprof

    Lab

    • Subir um conteúdo web em diretório “não padrão” e corrigir:
      • No RHEL: context SELinux
      • No Ubuntu: perfil AppArmor (se afetar)

    7) Processos, sinais, prioridades e cgroups

    Comandos essenciais

    ps auxf
    top
    htop # se instalar
    pidof nginx

    Sinais (vida real)

    • TERM (15) pede para encerrar com limpeza
    • KILL (9) é “mata e pronto” (último recurso)
    sudo kill -TERM <pid>
    sudo kill -KILL <pid>

    Prioridade

    nice -n 10 comando_pesado
    sudo renice -n 5 -p <pid>

    Cgroups/systemd (controle moderno)

    systemctl status nginx
    systemctl show -p ControlGroup nginx

    8) Boot e systemd (units, targets, timers)

    O que você precisa saber

    • systemctl é o painel central
    • Units: service, socket, timer, mount, path
    • Targets ≈ “runlevels modernos”

    Exemplos

    systemctl status ssh
    systemctl enable --now nginx
    systemctl list-units --type=service --state=running
    systemctl list-dependencies multi-user.target

    Timers (substituto “enterprise” de cron em muitas coisas)

    Exemplo: rodar script a cada 5 minutos:

    • /etc/systemd/system/meujob.service
    • /etc/systemd/system/meujob.timer
    # meujob.service
    [Service]
    Type=oneshot
    ExecStart=/usr/local/bin/meujob.sh
    # meujob.timer
    [Timer]
    OnBootSec=2min
    OnUnitActiveSec=5min
    Unit=meujob.service[Install]
    WantedBy=timers.target
    sudo systemctl enable --now meujob.timer
    systemctl list-timers --all

    9) Logs, journald, logrotate e auditoria

    Journald (padrão moderno em ambos)

    journalctl -xe
    journalctl -u nginx --since "1 hour ago"
    journalctl -b -1 # boot anterior

    Logs “clássicos”

    • Ubuntu: /var/log/auth.log, /var/log/syslog (a depender da config)
    • RHEL: pode ter rsyslog configurado; journald é central

    logrotate

    • /etc/logrotate.conf e /etc/logrotate.d/*
    sudo logrotate -d /etc/logrotate.conf

    auditd (compliance)

    sudo systemctl enable --now auditd
    sudo auditctl -l

    10) Rede: IP, rotas, DNS (Netplan vs NetworkManager)

    Ferramentas universais (iproute2)

    ip a
    ip r
    ss -tulpn
    ping -c 3 1.1.1.1
    traceroute example.com
    dig example.com

    Ubuntu: Netplan (com backend systemd-networkd ou NetworkManager)

    • Config: /etc/netplan/*.yaml
    sudo netplan try
    sudo netplan apply

    RHEL: NetworkManager (nmcli)

    • Conexões em: /etc/NetworkManager/system-connections/
    nmcli dev status
    nmcli con show
    nmcli con mod "System eth0" ipv4.addresses 192.168.1.10/24 ipv4.gateway 192.168.1.1 ipv4.method manual
    nmcli con up "System eth0"

    DNS

    • Hoje, normalmente via systemd-resolved (Ubuntu) ou NM (RHEL).
    • Diagnóstico:
    resolvectl status   # Ubuntu comum
    cat /etc/resolv.conf

    11) Firewall: UFW, Firewalld e nftables

    Ubuntu: UFW (interface amigável)

    sudo ufw status
    sudo ufw allow 22/tcp
    sudo ufw allow 80/tcp
    sudo ufw enable

    RHEL: firewalld

    sudo firewall-cmd --state
    sudo firewall-cmd --add-service=http --permanent
    sudo firewall-cmd --reload
    sudo firewall-cmd --list-all

    Lab

    • Subir nginx e abrir porta 80 com a ferramenta “nativa” de cada distro.

    12) SSH seguro (essencial corporativo)

    Chaves e hardening básico

    ssh-keygen -t ed25519
    ssh-copy-id user@server

    No servidor (/etc/ssh/sshd_config):

    • PasswordAuthentication no
    • PermitRootLogin no
    • AllowUsers alice deploy
    sudo systemctl reload ssh

    13) Storage: partições, LVM, RAID

    Checklist prático

    lsblk -f
    blkid
    df -Th
    mount | column -t

    Particionamento

    • fdisk, parted

    LVM (produção real)

    sudo pvcreate /dev/sdb
    sudo vgcreate vgdata /dev/sdb
    sudo lvcreate -n lvapp -L 50G vgdata
    sudo mkfs.xfs /dev/vgdata/lvapp # xfs muito comum em RHEL
    sudo mount /dev/vgdata/lvapp /srv/app

    fstab (com UUID)

    sudo blkid
    sudoedit /etc/fstab

    14) Backup e recuperação (sem romantismo)

    Tríade do mundo real

    • tar (empacotar)
    • rsync (sincronizar incremental)
    • borg/restic (backup com dedupe + criptografia)

    rsync bom:

    rsync -aHAX --delete /srv/app/ /backup/app/

    tar com preservação:

    tar --xattrs --acls -cpf backup.tar /srv/app

    Teste de restore (sempre!)

    • Restore parcial em diretório temporário
    • Comparar checksums

    15) Virtualização (KVM/libvirt)

    Instalação típica

    • Ubuntu: qemu-kvm libvirt-daemon-system virt-manager
    • RHEL: @virtualization group

    Comandos:

    virsh list --all
    virt-install --name vm1 --memory 2048 --vcpus 2 --disk size=20 --cdrom ubuntu.iso

    16) Containers (Podman/Docker)

    Diretriz atual (muito corp)

    • RHEL: Podman é padrão/primeira classe
    • Ubuntu: Docker ainda comum, Podman crescendo

    Exemplos (podman):

    podman run --rm -p 8080:80 docker.io/library/nginx
    podman ps
    podman logs <id>

    Volumes e persistência:

    podman run -v /srv/site:/usr/share/nginx/html:ro -p 8080:80 nginx

    17) Automação: Bash, Python, Ansible

    Bash “de produção” (mínimo)

    • set -euo pipefail
    • funções
    • logs e exit codes
    • parsing robusto

    Exemplo esqueleto:

    #!/usr/bin/env bash
    set -euo pipefaillog(){ printf '%s %s\n' "$(date -Is)" "$*" >&2; }main(){
    log "iniciando"
    # ...
    log "ok"
    }
    main "$@"

    Ansible (corporativo de verdade)

    • Inventário limpo
    • idempotência
    • roles
    • vault para segredo

    18) Observabilidade (admin)

    Ferramentas nativas:

    uptime
    free -h
    vmstat 1
    iostat -xz 1
    sar -n DEV 1
    ss -s

    Visão moderna:

    • Prometheus + node_exporter + Grafana (mesmo que “não seja seu time”, você precisa ler o painel)

    19) Troubleshooting (método)

    O método que não falha

    1. Defina o sintoma (o que está quebrado e desde quando)
    2. Colete evidências (logs, métricas, configs, mudanças recentes)
    3. Isole (rede? disco? permissão? DNS? SELinux/AppArmor?)
    4. Corrija com rollback em mente
    5. Valide (teste + monitoramento)
    6. Documente

    Kit rápido

    • Boot: journalctl -b, systemctl --failed
    • Rede: ip r, dig, ss -tulpn
    • Storage: df -Th, lsblk, dmesg -T | tail
    • Segurança: ausearch -m avc (SELinux), aa-status (AppArmor)

    20) Segurança operacional (prática corporativa)

    • Patching com janela e rollback
    • Endurecer SSH
    • Firewall mínimo necessário
    • Auditoria (auditd) quando exigido
    • SELinux/AppArmor: aprender a corrigir, não “desligar”

    21) Unix Pipe at the Gates of Dawn (síntese)

    Pipe é filosofia operacional:

    • Ferramentas pequenas, composição grande
    • Texto como interface
    • Observabilidade via logs e streams

    Exemplo “(uma linha que salva incidentes):

    journalctl -u nginx --since today | grep -Ei "error|fail|timeout" | tail -n 50

    Mini-projetos (pra consolidar)

    1. Servidor web hardenizado (nginx + firewall + logs + backup + user deploy)
    2. Job automatizado (systemd timer que gera relatório e envia pra um diretório seguro)
    3. Ambiente container (app + volume persistente + restart policy via systemd)
    4. Troubleshooting simulado (DNS quebrado, rota errada, SELinux bloqueando, disco cheio)