diff --git a/README.md b/README.md index 97aaf24..2b5e64a 100644 --- a/README.md +++ b/README.md @@ -90,11 +90,13 @@ Este repositório contém a documentação técnica da iT Guys, organizada por s - [ ] [Nível 3] Backup de Volumes ### 8. Linux Server -- [ ] [Nível 1] Comandos Essenciais de Diagnóstico -- [ ] [Nível 2] Gerenciamento de Pacotes e Updates -- [ ] [Nível 2] Configuração de Firewall -- [ ] [Nível 3] Hardening de Servidor -- [ ] [Nível 3] Análise de Logs (Journalctl) +- [x] [Nível 1] Comandos Essenciais de Diagnóstico +- [x] [Nível 2] Gerenciamento de Pacotes e Updates +- [x] [Nível 2] Configuração de Rede e Firewall +- [x] [Nível 2] Gestão de Usuários e Permissões +- [x] [Nível 3] Hardening de Servidor +- [x] [Nível 3] Análise de Logs (Journalctl) +- [x] [Nível 3] Scripting e Automação Avançada **Novas Seções (Fase 2 & 3):** - [ ] [Nível 1-3] Service Desk (Zammad) diff --git a/documentacao linux/Nivel_1/[Nível 1] Comandos Essenciais de Diagnóstico.md b/documentacao linux/Nivel_1/[Nível 1] Comandos Essenciais de Diagnóstico.md new file mode 100644 index 0000000..d3cbac0 --- /dev/null +++ b/documentacao linux/Nivel_1/[Nível 1] Comandos Essenciais de Diagnóstico.md @@ -0,0 +1,116 @@ +# MANUAL TÉCNICO - COMANDOS ESSENCIAIS DE DIAGNÓSTICO E NAVEGAÇÃO + +**Código:** ITGSUP 0010/26 | **Classificação:** INTERNO +**Responsável:** João Pedro Toledo Gonçalves | **Data:** {{DATA_ATUAL}} + +## 1. HISTÓRICO DE REVISÃO + +| Data | Versão | Descrição | Autor | +| :--- | :--- | :--- | :--- | +| {{DATA_ATUAL}} | 1.0 | Criação Inicial | João Pedro Toledo Gonçalves | + +## 2. OBJETIVO +Padronizar o uso de comandos básicos de terminal para navegação, edição de arquivos e diagnóstico inicial de servidores Linux, cobrindo as distribuições Debian/Ubuntu e RHEL (CentOS/AlmaLinux). + +## 3. PRÉ-REQUISITOS +* [ ] Acesso ao terminal do servidor (via SSH ou Console). +* [ ] Usuário com permissão básica (ou `sudo` para comandos administrativos). + +## 4. DISTRIBUIÇÕES SUPORTADAS +Este manual é validado para: +* **Debian/Ubuntu:** Ubuntu 24.04, Debian 11/12. +* **RHEL Family:** AlmaLinux, RockyLinux, CentOS. + +--- + +## 5. PASSO A PASSO (EXECUÇÃO) + +### Etapa 1: Navegação no Sistema de Arquivos + +Use estes comandos para se mover pelos diretórios do servidor. + +| Comando | Descrição | Exemplo | +| :--- | :--- | :--- | +| **`pwd`** | Mostra onde você está (caminho atual). | `pwd` | +| **`ls`** | Lista arquivos na pasta. | `ls -lah` (Lista detalhada e oculta) | +| **`cd`** | Muda de diretório. | `cd /var/log` | +| **`cd ..`** | Volta um nível (pasta anterior). | `cd ..` | +| **`cd ~`** | Vai para a pasta pessoal do usuário no `/home`. | `cd ~` | + +> 🚀 **DICA:** Use a tecla `TAB` para autocompletar nomes de pastas e arquivos. + +### Etapa 2: Leitura e Edição de Arquivos + +Como ler logs, configs e editar textos. + +**Leitura Rápida:** +* **`cat [arquivo]`**: Exibe o arquivo inteiro na tela. + * *Ex:* `cat /etc/os-release` (Mostra a versão do Linux). +* **`head [arquivo]`**: Mostra as primeiras 10 linhas. +* **`tail [arquivo]`**: Mostra as últimas 10 linhas. + * *Ex:* `tail -f /var/log/syslog` (Acompanha o log em tempo real). + +**Editores de Texto:** +Existem basicamente três editores comuns. Escolha o que preferir. + +1. **Nano (Mais fácil):** + * **Abrir:** `nano arquivo.txt` + * **Salvar:** `Ctrl + O`, depois `Enter`. + * **Sair:** `Ctrl + X`. + +2. **Vim / Vi (Padrão e Poderoso):** + * **Abrir:** `vim arquivo.txt` + * **Inserir Texto:** Aperte `i`. + * **Sair do Modo Inserção:** Aperte `Esc`. + * **Salvar e Sair:** Aperte `Esc`, digite `:wq` e `Enter`. + * **Sair sem Salvar:** Aperte `Esc`, digite `:q!` e `Enter`. + +### Etapa 3: Diagnóstico de Recursos (CPU/RAM/Disco) + +Verifique se o servidor está lento ou travado. + +**1. Disco Cheio? (`df`)** +Use `df -h` para ver o espaço em disco legível (GB/MB). +```bash +df -h +``` +> ⚠️ **ATENÇÃO:** Se a partição `/` (root) estiver 100%, o servidor pode parar. + +**2. Memória Cheia? (`free`)** +Use `free -h` para ver a RAM usada. +```bash +free -h +``` + +**3. Processo Travado? (`top` ou `htop`)** +Mostra processos consumindo muita CPU. +* **`top`**: Pressione `q` para sair. +* Identifique o **PID** (número do processo) se precisar matá-lo. + +**4. Tempo Ligado? (`uptime`)** +Mostra há quanto tempo o servidor está ligado e a carga média (load average). +```bash +uptime +``` + +### Etapa 4: Teste de Conectividade (`ping`) + +Verifique se o servidor alcança a internet ou outro host. + +```bash +ping 8.8.8.8 -c 4 +``` +* `-c 4`: Envia apenas 4 pacotes (padrão no Windows, mas no Linux o ping é infinito sem isso). + +## 6. DADOS TÉCNICOS +| Caminho Importante | Descrição | +| :--- | :--- | +| `/etc/` | Arquivos de configuração do sistema. | +| `/var/log/` | Logs do sistema (auth, syslog, messages). | +| `/home/` | Arquivos dos usuários. | +| `/root/` | Pasta pessoal do administrador (root). | + +## 7. VALIDAÇÃO FINAL +- [ ] Consegue navegar entre pastas (`cd`, `ls`)? +- [ ] Consegue criar e editar um arquivo de teste (`nano teste.txt`)? +- [ ] O comando `df -h` mostra espaço livre em disco? diff --git a/documentacao linux/Nivel_1/[Nível 1] Comandos Essenciais de Diagnóstico.pdf b/documentacao linux/Nivel_1/[Nível 1] Comandos Essenciais de Diagnóstico.pdf new file mode 100644 index 0000000..877905c Binary files /dev/null and b/documentacao linux/Nivel_1/[Nível 1] Comandos Essenciais de Diagnóstico.pdf differ diff --git a/documentacao linux/Nivel_2/[Nível 2] Configuração de Rede e Firewall.md b/documentacao linux/Nivel_2/[Nível 2] Configuração de Rede e Firewall.md new file mode 100644 index 0000000..8f1aa58 --- /dev/null +++ b/documentacao linux/Nivel_2/[Nível 2] Configuração de Rede e Firewall.md @@ -0,0 +1,110 @@ +# MANUAL TÉCNICO - CONFIGURAÇÃO DE REDE E FIREWALL + +**Código:** ITGINF 0011/26 | **Classificação:** RESTRITO +**Responsável:** João Pedro Toledo Gonçalves | **Data:** {{DATA_ATUAL}} + +## 1. HISTÓRICO DE REVISÃO + +| Data | Versão | Descrição | Autor | +| :--- | :--- | :--- | :--- | +| {{DATA_ATUAL}} | 1.0 | Criação Inicial | João Pedro Toledo Gonçalves | + +## 2. OBJETIVO +Definir procedimentos para configuração de Endereçamento IP estático, DNS e regras de Firewall em servidores Linux, respeitando as ferramentas nativas de cada distribuição. + +## 3. PRÉ-REQUISITOS +* [ ] Acesso console (preferencial) ou SSH (Cuidado para não se bloquear ao alterar IP/Firewall). +* [ ] Dados da Rede: IP, Máscara (CIDR), Gateway e DNS definidos. + +--- + +## 4. CONFIGURAÇÃO DE REDE (IP ESTÁTICO) + +### Ubuntu 24.04 (Netplan) +O Ubuntu usa arquivos YAML no Netplan. + +1. Edite o arquivo em `/etc/netplan/`. Ex: `00-installer-config.yaml`. + ```bash + sudo nano /etc/netplan/00-installer-config.yaml + ``` +2. Modelo de Configuração: + ```yaml + network: + version: 2 + ethernets: + ens160: # Nome da interface (verifique com 'ip link') + dhcp4: no + addresses: + - 192.168.1.10/24 + routes: + - to: default + via: 192.168.1.1 + nameservers: + addresses: [8.8.8.8, 1.1.1.1] + ``` +3. Aplique: `sudo netplan apply` + +### Debian 11/12 (Interfaces) +Edição clássica do arquivo interfaces. + +1. Arquivo: `/etc/network/interfaces` + ```bash + auto ens192 + iface ens192 inet static + address 192.168.1.10/24 + gateway 192.168.1.1 + dns-nameservers 8.8.8.8 1.1.1.1 + ``` +2. Reinicie a rede: `sudo systemctl restart networking` + +### RHEL / AlmaLinux / Rocky (NetworkManager) +Recomendado usar `nmcli` (Linha de Comando do Network Manager). + +1. Listar conexões: `nmcli con show` +2. Definir IPv4 Manual: + ```bash + sudo nmcli con mod "ens192" ipv4.addresses 192.168.1.10/24 + sudo nmcli con mod "ens192" ipv4.gateway 192.168.1.1 + sudo nmcli con mod "ens192" ipv4.dns "8.8.8.8,1.1.1.1" + sudo nmcli con mod "ens192" ipv4.method manual + ``` +3. Reiniciar interface: `sudo nmcli con up "ens192"` + +--- + +## 5. CONFIGURAÇÃO DE FIREWALL + +### Ubuntu / Debian (UFW - Uncomplicated Firewall) +Mais simples e recomendado para a maioria dos casos. + +1. **Status:** `sudo ufw status` +2. **Habilitar:** `sudo ufw enable` (CUIDADO: Libere o SSH antes!). +3. **Liberar SSH:** `sudo ufw allow 22/tcp` +4. **Liberar Web:** `sudo ufw allow 80/tcp` +5. **Bloquear tudo (Default):** O UFW já bloqueia entrada por padrão. +6. **Remover regra:** `sudo ufw delete allow 80/tcp` + +### RHEL / CentOS (Firewalld) +Gerenciador dinâmico padrão do mundo Red Hat. + +1. **Status:** `sudo firewall-cmd --state` +2. **Listar regras (Zona Padrão):** `sudo firewall-cmd --list-all` +3. **Liberar Porta (Permanente):** + ```bash + sudo firewall-cmd --permanent --add-port=80/tcp + sudo firewall-cmd --reload + ``` +4. **Liberar Serviço:** `sudo firewall-cmd --permanent --add-service=http` + +## 6. DADOS TÉCNICOS +| Ferramenta | Arquivo Config | Serviço | +| :--- | :--- | :--- | +| **Netplan** | `/etc/netplan/*.yaml` | `systemd-networkd` | +| **Ifupdown** | `/etc/network/interfaces` | `networking` | +| **NetworkManager** | `/etc/NetworkManager/` | `NetworkManager` | + +## 7. VALIDAÇÃO FINAL +- [ ] O comando `ip addr` mostra o IP correto? +- [ ] O comando `ping 8.8.8.8` funciona (Gateway/Rota ok)? +- [ ] O comando `ping google.com` funciona (DNS ok)? +- [ ] O acesso SSH continua funcionando após ligar o firewall? diff --git a/documentacao linux/Nivel_2/[Nível 2] Configuração de Rede e Firewall.pdf b/documentacao linux/Nivel_2/[Nível 2] Configuração de Rede e Firewall.pdf new file mode 100644 index 0000000..a251acb Binary files /dev/null and b/documentacao linux/Nivel_2/[Nível 2] Configuração de Rede e Firewall.pdf differ diff --git a/documentacao linux/Nivel_2/[Nível 2] Gerenciamento de Pacotes e Updates.md b/documentacao linux/Nivel_2/[Nível 2] Gerenciamento de Pacotes e Updates.md new file mode 100644 index 0000000..259da57 --- /dev/null +++ b/documentacao linux/Nivel_2/[Nível 2] Gerenciamento de Pacotes e Updates.md @@ -0,0 +1,109 @@ +# MANUAL TÉCNICO - GERENCIAMENTO DE PACOTES E ATUALIZAÇÕES + +**Código:** ITGINF 0010/26 | **Classificação:** RESTRITO +**Responsável:** João Pedro Toledo Gonçalves | **Data:** {{DATA_ATUAL}} + +## 1. HISTÓRICO DE REVISÃO + +| Data | Versão | Descrição | Autor | +| :--- | :--- | :--- | :--- | +| {{DATA_ATUAL}} | 1.0 | Criação Inicial | João Pedro Toledo Gonçalves | + +## 2. OBJETIVO +Orientar a instalação, remoção, atualização de softwares e resolução de problemas de repositórios em servidores Linux (Debian/Ubuntu e RHEL/CentOS). + +## 3. PRÉ-REQUISITOS +* [ ] Acesso root ou usuário com permissão `sudo`. +* [ ] Conexão com a internet liberada no Firewall (Portas 80/443). + +--- + +## 4. COMANDOS POR FAMÍLIA DE DISTRIBUIÇÃO + +> ⚠️ **IDENTIFIQUE O SISTEMA:** +> Use `cat /etc/os-release` para saber se está no **Debian/Ubuntu** ou **RHEL/CentOS**. + +### Família Debian (Ubuntu 24.04, Debian 11/12) +Gerenciador: **APT** (`apt`) e **DPKG**. + +| Ação | Comando | +| :--- | :--- | +| **Atualizar lista** | `sudo apt update` | +| **Aplicar updates** | `sudo apt upgrade -y` | +| **Instalar App** | `sudo apt install [pacote]` | +| **Remover App** | `sudo apt remove [pacote]` | +| **Remover + Configs** | `sudo apt purge [pacote]` | +| **Buscar Pacote** | `apt search [termo]` | + +### Família RHEL (AlmaLinux, Rocky, CentOS) +Gerenciador: **DNF** (`dnf`) ou YUM (Legado). + +| Ação | Comando | +| :--- | :--- | +| **Atualizar tudo** | `sudo dnf update -y` | +| **Instalar App** | `sudo dnf install [pacote]` | +| **Remover App** | `sudo dnf remove [pacote]` | +| **Buscar Pacote** | `dnf search [termo]` | +| **Info do Pacote** | `dnf info [pacote]` | + +--- + +## 5. SOLUÇÃO DE PROBLEMAS (TROUBLESHOOTING) + +### Problema 1: Erro "Server Not Found" ou Lentidão (Troca de Mirrors) + +Muitas vezes o repositório padrão é lento ou está fora do ar. + +**No Debian/Ubuntu:** +1. Instale o `netselect-apt` para achar o mirror mais rápido (opcional, ou edite manualmente). +2. Edite a lista de fontes: + ```bash + sudo nano /etc/apt/sources.list + ``` + *(No Ubuntu atual, pode ser `/etc/apt/sources.list.d/ubuntu.sources`)*. +3. Substitua URLs lentas (ex: `br.archive.ubuntu.com`) por outras oficiais (ex: `mirror.unesp.br`). + +**No RHEL/CentOS:** +1. Os mirrors ficam em `/etc/yum.repos.d/`. +2. Geralmente o sistema escolhe o melhor automaticamente (`fastestmirror`). Tente limpar o cache: + ```bash + sudo dnf clean all + sudo dnf makecache + ``` + +### Problema 2: Erro de Chave GPG (GPG Error / NO_PUBKEY) + +Acorre ao adicionar repositórios de terceiros (ex: Docker, Zabbix). + +**Correção Padrão:** +```bash +sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys [CÓDIGO_DA_CHAVE_DO_ERRO] +``` +Ou baixe a chave atualizada do fornecedor e coloque em `/etc/apt/trusted.gpg.d/`. + +### Problema 3: Lock File ("Could not get lock /var/lib/dpkg/lock") + +Significa que **outro processo** (como updates automáticos) está usando o APT. + +1. **Não force o delete do arquivo de lock** exceto em último caso. +2. Verifique quem está usando: + ```bash + ps aux | grep apt + ``` +3. Aguarde o processo terminar ou mate-o se estiver travado (`sudo kill [PID]`). +4. Se persistir após reboot, remova o lock: + ```bash + sudo rm /var/lib/dpkg/lock-frontend + sudo dpkg --configure -a + ``` + +## 6. DADOS TÉCNICOS +| Sistema | Arquivo de Repositórios | Logs de Instalação | +| :--- | :--- | :--- | +| **Debian/Ubuntu** | `/etc/apt/sources.list` | `/var/log/apt/history.log` | +| **RHEL/CentOS** | `/etc/yum.repos.d/*.repo` | `/var/log/dnf.log` | + +## 7. VALIDAÇÃO FINAL +- [ ] O comando de update rodou sem erros vermelhos? +- [ ] Conseguiu instalar um pacote de teste (ex: `neofetch` ou `htop`)? +- [ ] O sistema não reporta dependências quebradas? diff --git a/documentacao linux/Nivel_2/[Nível 2] Gerenciamento de Pacotes e Updates.pdf b/documentacao linux/Nivel_2/[Nível 2] Gerenciamento de Pacotes e Updates.pdf new file mode 100644 index 0000000..98778ab Binary files /dev/null and b/documentacao linux/Nivel_2/[Nível 2] Gerenciamento de Pacotes e Updates.pdf differ diff --git a/documentacao linux/Nivel_2/[Nível 2] Gestão de Usuários e Permissões.md b/documentacao linux/Nivel_2/[Nível 2] Gestão de Usuários e Permissões.md new file mode 100644 index 0000000..ef8d34b --- /dev/null +++ b/documentacao linux/Nivel_2/[Nível 2] Gestão de Usuários e Permissões.md @@ -0,0 +1,94 @@ +# MANUAL TÉCNICO - GESTÃO DE USUÁRIOS E PERMISSÕES + +**Código:** ITGINF 0012/26 | **Classificação:** RESTRITO +**Responsável:** João Pedro Toledo Gonçalves | **Data:** {{DATA_ATUAL}} + +## 1. HISTÓRICO DE REVISÃO + +| Data | Versão | Descrição | Autor | +| :--- | :--- | :--- | :--- | +| {{DATA_ATUAL}} | 1.0 | Criação Inicial | João Pedro Toledo Gonçalves | + +## 2. OBJETIVO +Padronizar a criação de usuários, gerenciamento de senhas, criação de grupos e permissionamento de arquivos em servidores Linux. + +## 3. PRÉ-REQUISITOS +* [ ] Acesso root ou usuário com permissão `sudo`. + +--- + +## 4. GESTÃO DE USUÁRIOS E GRUPOS + +### Criar Usuário + +**Método Recomendado (Interativo - Ubuntu/Debian):** +```bash +sudo adduser nome_usuario +``` +*Este comando já cria a pasta /home, pede a senha e define o shell.* + +**Método Padrão (Universal / RHEL):** +```bash +sudo useradd -m -s /bin/bash nome_usuario +sudo passwd nome_usuario +``` +*-m cria o home, -s define o bash como shell.* + +### Adicionar Usuário ao Grupo Sudo/Wheel (Administrador) + +* **Debian/Ubuntu:** Grupo `sudo`. + ```bash + sudo usermod -aG sudo nome_usuario + ``` +* **RHEL/CentOS:** Grupo `wheel`. + ```bash + sudo usermod -aG wheel nome_usuario + ``` + +### Bloquear/Desbloquear e Deletar + +* **Bloquear senha:** `sudo passwd -l nome_usuario` +* **Desbloquear:** `sudo passwd -u nome_usuario` +* **Deletar usuário:** `sudo userdel -r nome_usuario` (O `-r` apaga a pasta home). + +--- + +## 5. PERMISSÕES DE ARQUIVOS E PASTAS + +No Linux, permissões são definidas por Leitura (r), Escrita (w) e Execução (x) para Dono (u), Grupo (g) e Outros (o). + +### Alterar Dono (`chown`) +Muda quem é o dono do arquivo ou pasta. +```bash +# Sintaxe: chown usuario:grupo arquivo +sudo chown www-data:www-data /var/www/html/index.php +sudo chown -R joao:devs /app/projeto (Recursivo para pasta) +``` + +### Alterar Permissões (`chmod`) +Modo numérico (Octal) é o mais comum: +* **7** = Full (rwx) +* **6** = Ler/Escrever (rw-) +* **5** = Ler/Executar (r-x) +* **4** = Ler (r--) + +**Exemplos Comuns:** +* `chmod 755 arquivo`: Dono faz tudo, outros só leem/executam. (Padrão para scripts/pastas) +* `chmod 644 arquivo`: Dono le/escreve, outros só leem. (Padrão para configs/textos) +* `chmod 777 arquivo`: **PERIGOSO**. Todo mundo mexe. Evite. +* `chmod +x script.sh`: Torna o arquivo executável. + +--- + +## 6. DADOS TÉCNICOS +| Arquivo | Descrição | +| :--- | :--- | +| `/etc/passwd` | Lista de usuários e infos (shell, UID). | +| `/etc/shadow` | Hash das senhas (Restrito ao root). | +| `/etc/group` | Lista de grupos e membros. | +| `/etc/sudoers` | Regras de quem pode usar sudo (Use `visudo` para editar). | + +## 7. VALIDAÇÃO FINAL +- [ ] O usuário novo consegue logar (ssh ou local)? +- [ ] O usuário consegue usar `sudo` (se for admin)? +- [ ] As permissões dos arquivos protegem dados sensíveis (outros usuários não conseguem escrever)? diff --git a/documentacao linux/Nivel_2/[Nível 2] Gestão de Usuários e Permissões.pdf b/documentacao linux/Nivel_2/[Nível 2] Gestão de Usuários e Permissões.pdf new file mode 100644 index 0000000..fdad30c Binary files /dev/null and b/documentacao linux/Nivel_2/[Nível 2] Gestão de Usuários e Permissões.pdf differ diff --git a/documentacao linux/Nivel_3/[Nível 3] Análise de Logs (Journalctl).md b/documentacao linux/Nivel_3/[Nível 3] Análise de Logs (Journalctl).md new file mode 100644 index 0000000..2e606c5 --- /dev/null +++ b/documentacao linux/Nivel_3/[Nível 3] Análise de Logs (Journalctl).md @@ -0,0 +1,107 @@ +# MANUAL TÉCNICO - ANÁLISE DE LOGS (SYSTEMD/JOURNALCTL) + +**Código:** ITGENG 0011/26 | **Classificação:** RESTRITO +**Responsável:** João Pedro Toledo Gonçalves | **Data:** {{DATA_ATUAL}} + +## 1. HISTÓRICO DE REVISÃO + +| Data | Versão | Descrição | Autor | +| :--- | :--- | :--- | :--- | +| {{DATA_ATUAL}} | 1.0 | Criação Inicial | João Pedro Toledo Gonçalves | + +## 2. OBJETIVO +Capacitar a engenharia na extração, filtro e análise de logs centralizados do `systemd` via comando `journalctl`, substituindo a leitura manual de arquivos texto dispersos. + +## 3. PRÉ-REQUISITOS +* [ ] Servidor rodando Systemd (Todas as distros modernas listadas). +* [ ] Acesso root ou usuário no grupo `systemd-journal`. + +--- + +## 4. USO BÁSICO E FILTRAGEM + +O `journalctl` exibe logs de todos os serviços unificados. + +### Filtrar por Serviço (Unit) +A forma mais comum de debug. +```bash +journalctl -u nginx +journalctl -u ssh +journalctl -u docker +``` + +### Visualizar em Tempo Real (Follow) +Igual ao `tail -f`. +```bash +journalctl -u nginx -f +``` + +### Filtrar por Tempo (Since / Until) +Essencial para incidentes ("O que aconteceu ontem às 14h?"). +```bash +journalctl --since "2023-10-20 14:00:00" --until "2023-10-20 14:30:00" +journalctl --since "1 hour ago" +journalctl --since "today" +``` + +### Filtrar por Prioridade (Erro/Crítico) +Isola apenas problemas reais. +* 0: emerg +* 1: alert +* 2: crit +* 3: err +* 4: warning +```bash +journalctl -p err -b 0 +``` +*(`-b 0` limita ao boot atual, ignorando reboots passados)* + +--- + +## 5. PERSISTÊNCIA DE LOGS + +Por padrão, muitas distros configuram o journald como **Volátil** (memória RAM), perdendo logs ao reiniciar. + +1. Verifique o armazenamento: + ```bash + cat /etc/systemd/journald.conf | grep Storage + ``` +2. Para ativar persistência: + * Opção A (Automática): Crie a pasta de logs. + ```bash + sudo mkdir -p /var/log/journal + sudo systemd-tmpfiles --create --prefix /var/log/journal + sudo systemctl restart systemd-journald + ``` + * Opção B (Config): Edite `/etc/systemd/journald.conf` e defina `Storage=persistent`. + +## 6. LIMPEZA E MANUTENÇÃO (Vacuum) + +Logs binários podem crescer muito. Limpe-os seguramente: + +* **Manter apenas 1GB:** + ```bash + journalctl --vacuum-size=1G + ``` +* **Manter apenas os últimos 10 dias:** + ```bash + journalctl --vacuum-time=10d + ``` + +## 7. EXPORTAÇÃO DE DADOS + +Para enviar logs para devs ou anexar em chamados. + +* **Sem paginação (Texto Puro):** + ```bash + journalctl -u servico --no-pager > log_exportado.txt + ``` +* **Formato JSON (Para ELK/Splunk):** + ```bash + journalctl -u servico -o json-pretty + ``` + +## 8. VALIDAÇÃO FINAL +- [ ] O comando `journalctl` retorna dados? +- [ ] Os logs persistem após um reboot? +- [ ] A rotação de logs (Vacuum) está funcionando para não lotar o disco? diff --git a/documentacao linux/Nivel_3/[Nível 3] Análise de Logs (Journalctl).pdf b/documentacao linux/Nivel_3/[Nível 3] Análise de Logs (Journalctl).pdf new file mode 100644 index 0000000..9cd25f2 Binary files /dev/null and b/documentacao linux/Nivel_3/[Nível 3] Análise de Logs (Journalctl).pdf differ diff --git a/documentacao linux/Nivel_3/[Nível 3] Hardening de Servidor.md b/documentacao linux/Nivel_3/[Nível 3] Hardening de Servidor.md new file mode 100644 index 0000000..7a7b15b --- /dev/null +++ b/documentacao linux/Nivel_3/[Nível 3] Hardening de Servidor.md @@ -0,0 +1,98 @@ +# MANUAL TÉCNICO - HARDENING DE SERVIDOR LINUX + +**Código:** ITGENG 0010/26 | **Classificação:** CONFIDENCIAL +**Responsável:** João Pedro Toledo Gonçalves | **Data:** {{DATA_ATUAL}} + +## 1. HISTÓRICO DE REVISÃO + +| Data | Versão | Descrição | Autor | +| :--- | :--- | :--- | :--- | +| {{DATA_ATUAL}} | 1.0 | Criação Inicial | João Pedro Toledo Gonçalves | + +## 2. OBJETIVO +Aplicar práticas de segurança para reduzir a superfície de ataque em servidores Linux expostos ou críticos, focando em SSH, Proteção contra Força Bruta e Kernel Tuning. + +## 3. PRÉ-REQUISITOS +* [ ] Acesso Root. +* [ ] **CRÍTICO:** Tenha uma chave SSH pública configurada e testada no servidor ANTES de desabilitar a senha. +* [ ] Backup das configurações originais. + +--- + +## 4. SEGURANÇA NO SSH (Desabilitar Senha) + +O vetor de ataque mais comum é força bruta na porta 22. + +1. Edite o arquivo: `/etc/ssh/sshd_config` +2. Garanta que as seguintes linhas existem e estão descomentadas: + ```config + PermitRootLogin prohibit-password # Ou 'no' (Recomendado criar usuario admin separado) + PubkeyAuthentication yes + PasswordAuthentication no + ChallengeResponseAuthentication no + ``` +3. Valide a configuração: `sudo sshd -t` +4. Reinicie o serviço: + * Debian/Ubuntu: `sudo systemctl restart ssh` + * RHEL/CentOS: `sudo systemctl restart sshd` + +> ⚠️ **IMPORTANTE:** Não feche a sessão atual sem abrir uma nova para testar se a chave funcionou. Se falhar, você perderá acesso remoto. + +## 5. PROTEÇÃO CONTRA BRUTE-FORCE (Fail2Ban) + +O Fail2Ban monitora logs e bane IPs que erram a senha repetidamente. + +**Instalação:** +* Debian/Ubuntu: `sudo apt install fail2ban` +* RHEL/CentOS: `sudo dnf install epel-release && sudo dnf install fail2ban` + +**Configuração Básica:** +1. Copie o arquivo padrão de config: + ```bash + sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local + ``` +2. Edite `/etc/fail2ban/jail.local` e ative a proteção SSH: + ```ini + [sshd] + enabled = true + port = ssh + filter = sshd + logpath = /var/log/auth.log ; (Ou /var/log/secure no RHEL) + maxretry = 3 + bantime = 3600 ; (1 hora) + ``` +3. Reinicie: `sudo systemctl restart fail2ban` +4. Verifique: `sudo fail2ban-client status sshd` + +## 6. AJUSTES DE KERNEL (Sysctl) + +Proteção contra ataques de rede (Spoofing, ICMP Redirects). + +1. Crie o arquivo: `/etc/sysctl.d/99-security.conf` +2. Adicione: + ```ini + # Desabilita redirecionamentos ICMP (Man-in-the-middle) + net.ipv4.conf.all.accept_redirects = 0 + net.ipv6.conf.all.accept_redirects = 0 + + # Ignora pings de broadcast + net.ipv4.icmp_echo_ignore_broadcasts = 1 + + # Protecao contra Syn Flood + net.ipv4.tcp_syncookies = 1 + + # Log de pacotes suspeitos (Martian packets) + net.ipv4.conf.all.log_martians = 1 + ``` +3. Aplique: `sudo sysctl --system` + +## 7. DADOS TÉCNICOS +| Serviço | Porta Padrão | Logs | +| :--- | :--- | :--- | +| **SSH** | 22/tcp | `/var/log/auth.log` (Deb) / `/var/log/secure` (RHEL) | +| **Fail2Ban** | N/A | `/var/log/fail2ban.log` | + +## 8. VALIDAÇÃO FINAL +- [ ] Tentar logar via SSH sem chave pede senha? (Deve falhar: "Permission denied (publickey)") +- [ ] O Fail2Ban está rodando (`systemctl status fail2ban`)? +- [ ] Errar a senha 3 vezes bane o IP? (Cuidado para não se banir, use 4G para testar). diff --git a/documentacao linux/Nivel_3/[Nível 3] Hardening de Servidor.pdf b/documentacao linux/Nivel_3/[Nível 3] Hardening de Servidor.pdf new file mode 100644 index 0000000..d51510b Binary files /dev/null and b/documentacao linux/Nivel_3/[Nível 3] Hardening de Servidor.pdf differ diff --git a/documentacao linux/Nivel_3/[Nível 3] Scripting e Automação Avançada.md b/documentacao linux/Nivel_3/[Nível 3] Scripting e Automação Avançada.md new file mode 100644 index 0000000..3c71603 --- /dev/null +++ b/documentacao linux/Nivel_3/[Nível 3] Scripting e Automação Avançada.md @@ -0,0 +1,127 @@ +# MANUAL TÉCNICO - SCRIPTING E AUTOMAÇÃO AVANÇADA + +**Código:** ITGENG 0012/26 | **Classificação:** CONFIDENCIAL +**Responsável:** João Pedro Toledo Gonçalves | **Data:** {{DATA_ATUAL}} + +## 1. HISTÓRICO DE REVISÃO + +| Data | Versão | Descrição | Autor | +| :--- | :--- | :--- | :--- | +| {{DATA_ATUAL}} | 1.0 | Criação Inicial | João Pedro Toledo Gonçalves | + +## 2. OBJETIVO +Padronizar a criação de scripts Shell (Bash), agendamento de tarefas (Cron), automação de relatórios (AWK) e notificações por e-mail para otimizar a administração de servidores. + +## 3. PRÉ-REQUISITOS +* [ ] Conhecimento de lógica de programação básica. +* [ ] Servidor SMTP (Exchange Interno ou O365) disponível para relay. + +--- + +## 4. SHELL SCRIPTING BÁSICO + +Todo script na iT Guys deve seguir este cabeçalho: + +```bash +#!/bin/bash +# ------------------------------------------------------------------------- +# Script: backup_diario.sh +# Descricao: Realiza backup e envia logs. +# Autor: João Pedro Toledo Gonçalves +# Data: {{DATA_ATUAL}} +# ------------------------------------------------------------------------- + +# Variaveis +DESTINO="/mnt/backup" +LOG="/var/log/meu_backup.log" + +# Funcao de Log com Data +log_msg() { + echo "$(date '+%Y-%m-%d %H:%M:%S') - $1" >> "$LOG" +} + +# Execucao +log_msg "Inicio do Backup" +tar -czf "$DESTINO/backup.tar.gz" /etc/ +if [ $? -eq 0 ]; then + log_msg "Sucesso" +else + log_msg "Erro no Backup" +fi +``` +> ⚡ **DICA:** Execute com `bash -x script.sh` para debugar linha a linha. + +## 5. AGENDAMENTO (CRON) + +Use o agendador nativo para rodar scripts automaticamente. + +1. Edite a tabela do usuário: `crontab -e` +2. Sintaxe: `m h dom mon dow command` +3. Exemplos Úteis: + +```bash +# Rodar todo dia as 03:00 da manha +00 03 * * * /home/scripts/backup_diario.sh + +# Rodar a cada 1 hora +00 * * * * /usr/bin/php /var/www/html/cron.php + +# Rodar todo dia 1 do mes +00 05 1 * * /home/scripts/relatorio_mensal.sh +``` + +## 6. NOTIFICAÇÕES POR E-MAIL (SMTP) + +Para scripts enviarem alertas, configure um cliente SMTP simples como o `msmtp` ou `postfix` (relay). + +**Exemplo de Envio em Script (usando `mail` ou `sendmail`):** + +```bash +ASSUNTO="Alerta: Disco Cheio no Servidor $(hostname)" +EMAIL="monitoramento@itguys.com.br" +CORPO="O servidor esta com 95% de disco ocupado. Verifique." + +echo "$CORPO" | mail -s "$ASSUNTO" -r "noreply@itguys.com.br" "$EMAIL" +``` + +**Configuração SMTP (Exemplo genérico `/etc/postfix/main.cf`):** +```config +relayhost = [smtp.office365.com]:587 +smtp_sasl_auth_enable = yes +smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd +smtp_tls_security_level = encrypt +``` + +## 7. RELATÓRIOS CUSTOMIZADOS (AWK) + +O `awk` é perfeito para extrair colunas de logs. + +**Exemplo: Listar os 5 IPs que mais acessaram o Nginx** +```bash +# Log format: IP - - [Data] "GET..." +awk '{print $1}' /var/log/nginx/access.log | sort | uniq -c | sort -nr | head -5 +``` +* `print $1`: Pega a primeira coluna (IP). +* `sort | uniq -c`: Conta ocorrências. +* `head -5`: Pega o top 5. + +## 8. MICRO APPS (ALIASES) + +Crie atalhos para comandos longos no `~/.bashrc`: + +```bash +# Atualizar tudo com 1 palavra +alias updatedb='sudo apt update && sudo apt upgrade -y' + +# Ver logs coloridos do nginx +alias logweb='tail -f /var/log/nginx/error.log | ccze' + +# Limpar cache de memoria +alias dropcache='sync; echo 3 | sudo tee /proc/sys/vm/drop_caches' +``` +*Aplique com `source ~/.bashrc`.* + +## 9. VALIDAÇÃO FINAL +- [ ] O script roda manualmente sem erros? +- [ ] O Cronjob apareceu no log (`grep CRON /var/log/syslog`)? +- [ ] O e-mail de teste chegou na caixa de correio? diff --git a/documentacao linux/Nivel_3/[Nível 3] Scripting e Automação Avançada.pdf b/documentacao linux/Nivel_3/[Nível 3] Scripting e Automação Avançada.pdf new file mode 100644 index 0000000..a7d0da1 Binary files /dev/null and b/documentacao linux/Nivel_3/[Nível 3] Scripting e Automação Avançada.pdf differ diff --git a/documentacao linux/README.pdf b/documentacao linux/README.pdf new file mode 100644 index 0000000..73f2a19 Binary files /dev/null and b/documentacao linux/README.pdf differ diff --git a/documentacao linux/alpine/README.pdf b/documentacao linux/alpine/README.pdf new file mode 100644 index 0000000..5a34832 Binary files /dev/null and b/documentacao linux/alpine/README.pdf differ diff --git a/documentacao linux/debian/README.pdf b/documentacao linux/debian/README.pdf new file mode 100644 index 0000000..6853678 Binary files /dev/null and b/documentacao linux/debian/README.pdf differ diff --git a/documentacao linux/ubuntu/README.pdf b/documentacao linux/ubuntu/README.pdf new file mode 100644 index 0000000..6225499 Binary files /dev/null and b/documentacao linux/ubuntu/README.pdf differ