CÓDIGO DA DISCIPLINA: DEE345
Departamento de Engenharias e Exatas - UFPR/Palotina
Docente de Segurança da Informação
AAA (Autenticação, Autorização, Auditoria) é fundamental para segurança, conforme LGPD e PNSI.
ipa user-add aluno --first=Aluno --last=Sobrenome
. freeipa.orgwazuh-control start
. wazuh.comPrática: Configure FreeIPA para gerenciar usuários. Monitore logins SSH com Wazuh em uma VM.
sudo yum install freeipa-server
sudo ipa-server-install
sudo kinit admin
sudo ipa user-add --first=Nome --last=Sobrenome usuario
sudo apt install freeipa-client
sudo ipa-client-install --domain=seu.dominio --server=ip.do.servidor
curl -s https://packages.wazuh.com/key/GPG-KEY-WAZUH | sudo apt-key add -
echo "deb https://packages.wazuh.com/4.x/apt/ stable main" | sudo tee /etc/apt/sources.list.d/wazuh.list
sudo apt update && sudo apt install wazuh-agent
sudo /var/ossec/bin/agent-auth -m IP_DO_SERVIDOR_WAZUH
grep "ipa" /var/ossec/logs/alerts/alerts.json
# Verificar IDs do usuário atual
id
# Verificar IDs em processos em execução
ps -o ruid,euid,suid,cmd -p [PID]
/etc/passwd
: Informações básicas de usuários/etc/group
: Definições de grupos/etc/shadow
: Senhas criptografadas (acesso restrito)
# Verificar permissões
ls -l /etc/passwd /etc/group /etc/shadow
# Configurar permissões seguras:
chmod 644 /etc/passwd # -rw-r--r--
chmod 644 /etc/group # -rw-r--r--
chmod 640 /etc/shadow # -rw-r-----
/etc/shadow
deve ser acessível apenas por rootsudo
para operações privilegiadasid
, ps -o ruid,euid,ruid,cmd
ls -l /etc/{passwd,group,shadow}
chmod 640 /etc/shadow
Exemplo de uso: login: usuario
+ senha: ********
Exemplo: ssh -i ~/.ssh/id_ed25519_sk user@host
(requer toque na YubiKey)
Exemplo: Desbloqueio de smartphone com Face ID
sudo apt update
sudo apt install libpam-google-authenticator
O módulo PAM (Pluggable Authentication Modules) permite integrar o 2FA ao sistema de autenticação do Linux.
google-authenticator
Este comando interativo irá:
# Editar /etc/pam.d/sshd
auth required pam_google_authenticator.so
Esta linha adiciona a verificação do código TOTP como requisito para autenticação via SSH.
# Editar /etc/ssh/sshd_config
ChallengeResponseAuthentication yes
AuthenticationMethods publickey,keyboard-interactive
Estas diretivas:
ChallengeResponseAuthentication
: Ativa o desafio/resposta para 2FAAuthenticationMethods
: Exige ambos:
sudo systemctl restart sshd
Importante: Mantenha uma sessão SSH aberta durante os testes para evitar bloqueio acidental.
AllowUsers
no sshd_config para restringir acessosudo apt install duo-unix
pam_yubico
# Em /etc/login.defs
ENCRYPT_METHOD SHA512
usuario:$6$salt$hash:18000:0:99999:7:::
bcrypt
- Resistente a GPU/ASIC (melhor para novas instalações)SHA-512
- Padrão atual na maioria das distros Linux
# Configuração global (distros baseadas em Linux-PAM)
# Arquivo: /etc/login.defs
# Algoritmo de hashing (SHA512 é o padrão atual)
ENCRYPT_METHOD SHA512
# Número de rounds (iterações) para o hash
# Valor maior = mais seguro porém mais lento
SHA_CRYPT_MIN_ROUNDS 5000
SHA_CRYPT_MAX_ROUNDS 5000
sudo useradd teste_pwd
sudo passwd teste_pwd
sudo grep teste_pwd /etc/shadow
$6$
indicando SHA-512John the Ripper
- Quebra hashes offlineHydra
- Ataques de força bruta em serviços onlineHashcat
- Uso intensivo de GPU para quebra rápida
# Comando básico para quebra com wordlist:
john --format=raw-sha512 --wordlist=/usr/share/wordlists/rockyou.txt hashes.txt
# Opções importantes:
# --format: Especifica o tipo de hash (ex: raw-sha512, nt, md5crypt)
# --wordlist: Dicionário de senhas comuns
# hashes.txt: Arquivo contendo os hashes capturados
# Teste de credenciais contra serviço SSH:
hydra -L usuarios.txt -P senhas.txt -t 4 ssh://192.168.0.100
# Parâmetros chave:
# -L: Arquivo com lista de usuários
# -P: Arquivo com lista de senhas
# -t: Número de threads paralelas
# ssh://: Alvo do ataque (pode ser substituído por http-post-form, ftp, etc)
# Hashcat
hashcat -m 1800 -a 0 hashes.txt /usr/share/wordlists/rockyou.txt
# Pwgen
pwgen -s -c -n 16 1
# Cracklib
echo "senha123" | cracklib-check
# Instalação do fail2ban para proteção do SSH
sudo apt install fail2ban
sudo systemctl enable --now fail2ban
# Configuração básica (em /etc/fail2ban/jail.local):
[sshd]
enabled = true
maxretry = 3
bantime = 1h
chage
(Change Age)
# Configurações básicas para usuário 'aluno':
sudo chage -d 0 aluno # Força troca no próximo login
sudo chage -E 2025-12-31 aluno # Data de expiração da conta
sudo chage -m 7 aluno # Mínimo 7 dias entre trocas
sudo chage -M 90 aluno # Máximo 90 dias com mesma senha
sudo chage -W 5 aluno # Aviso 5 dias antes da expiração
sudo chage -I 2 aluno # Inativação após 2 dias expirado
# Políticas padrão para todos usuários:
PASS_MAX_DAYS 90
PASS_MIN_DAYS 7
PASS_WARN_AGE 14
PASS_MIN_LEN 12
# Editar /etc/security/pwquality.conf:
minlen = 12
minclass = 3 # Mínimo 3 categorias (maiúscula, minúscula, número, símbolo)
maxrepeat = 2
usercheck = 1 # Não permite senhas contendo nome do usuário
# Visualizar configurações de um usuário:
sudo chage -l aluno
# Verificar senhas fracas (requer pam_cracklib):
sudo pam_tally2 --user=aluno
# Testar complexidade:
echo "senha_teste" | pwscore
#!/bin/bash
# Script de aplicação de políticas:
for user in $(ls /home); do
sudo chage -M 90 -m 7 -W 7 $user
sudo chage -d 0 $user # Força troca inicial
done
# Aplicar política de complexidade:
sudo sed -i 's/^minlen.*/minlen = 12/' /etc/security/pwquality.conf
sudo systemctl restart sshd
remember=5
no pam_unix)faillock
ou pam_tally2
krb5-kdc
kadmin.local
(modo direto no KDC)kadmin
(acesso remoto autenticado)
# Acessar console administrativo (como root no KDC)
sudo kadmin.local
# Criar novo principal (usuário/serviço)
addprinc aluno@DOMINIO.LOCAL
# Listar principals existentes
listprincs
# Remover principal
delprinc aluno@DOMINIO.LOCAL
# Obter ticket inicial (como usuário)
kinit aluno@DOMINIO.LOCAL
# Senha será solicitada
# Verificar tickets ativos
klist
# Destruir tickets
kdestroy
# Arquivo de configuração (/etc/krb5.conf)
[libdefaults]
default_realm = DOMINIO.LOCAL
ticket_lifetime = 24h
renew_lifetime = 7d
[realms]
DOMINIO.LOCAL = {
kdc = kdc.dominio.local
admin_server = kdc.dominio.local
}
# Instalação no Ubuntu Server (KDC)
sudo apt install krb5-kdc krb5-admin-server
# Configuração inicial
sudo krb5_newrealm
# Criar usuário e testar
sudo kadmin.local -q "addprinc aluno"
kinit aluno
klist -e # Mostra algoritmos de criptografia
kadmind
para tentativas de brute-forceSingle Sign-On (SSO): Login único para múltiplas aplicações.
Identity and Access Management (IAM): Gerenciamento de identidades e controle de acesso.
Security Assertion Markup Language - Troca de asserções XML entre IdP e SP.
Componentes:
Uso típico: Ambientes corporativos, sistemas legados, intranet.
OAuth 2.0: Protocolo de autorização para APIs.
OpenID Connect (OIDC): Camada de autenticação sobre OAuth 2.0.
Fluxo básico:
# Teste com oauth2-cli:
oauth2 --client-id X --client-secret Y \
--authorize-url https://idp/auth \
--token-url https://idp/token \
--scope "openid profile"
Tokens:
Uso típico: APIs modernas, SPAs, apps móveis, "Login com Google".
Autenticação sem senha via criptografia de chave pública no navegador.
Funcionamento:
Autenticadores:
// Exemplo WebAuthn - Registro
const credential = await navigator.credentials.create({
publicKey: {
challenge: new Uint8Array(32),
rp: { name: "Minha App" },
user: { id: userId, name: "user@email.com" }
}
});
Vantagens: Resistente a phishing, sem senhas, experiência superior.
Método | Melhor para | Formato | Complexidade |
---|---|---|---|
SAML | Corporativo, B2B | XML | Alta |
OAuth/OIDC | APIs, apps modernas | JSON | Média |
FIDO2/WebAuthn | Autenticação forte | Binário | Baixa (usuário) |
Recomendação: Use OIDC para novos projetos, SAML para sistemas legados, FIDO2 para máxima segurança.
Controle de Acesso: Mecanismos para determinar quem pode acessar recursos e quais operações podem realizar.
Extensão das permissões Unix tradicionais (rwx), permitindo controle granular por usuário/grupo específico.
Instalação e uso básico:
# Instalar suporte ACL
sudo apt install acl
# Definir permissões específicas
setfacl -m u:alice:rw /dados/secreto # usuário alice: read+write
setfacl -m g:developers:r /dados/projeto # grupo developers: read only
setfacl -m o::--- /dados/privado # outros: sem acesso
# Verificar ACLs
getfacl /dados/secreto
# Remover ACL específica
setfacl -x u:alice /dados/secreto
# Limpar todas as ACLs
setfacl -b /dados/secreto
Permissões ACL:
Vantagens: Controle fino, múltiplos usuários/grupos por arquivo.
Limitações: Nem todos os sistemas de arquivos suportam, complexidade aumentada.
Role-Based Access Control usando sudo para elevar privilégios baseados em papéis de usuário.
Configuração de papéis:
# /etc/sudoers.d/papeis-sistema
# Papel: Administradores de Banco
%dbadmins ALL=(ALL) /usr/bin/mysql, /usr/bin/psql, /bin/systemctl restart mysql
# Papel: Operadores Web
%webops ALL=(www-data) /usr/sbin/nginx, /bin/systemctl * nginx, /bin/systemctl * apache2
# Papel: Backup Operators
%backup ALL=(root) NOPASSWD: /usr/bin/rsync, /bin/tar, /usr/bin/duplicity
# Papel: Desenvolvedores
%developers ALL=(deploy) /usr/bin/git, /bin/systemctl restart app-*
# Usuário específico com comando restrito
alice ALL=(root) /usr/local/bin/deploy-script.sh
Sintaxe sudo:
Comandos úteis:
# Verificar privilégios do usuário atual
sudo -l
# Executar como usuário específico
sudo -u www-data /usr/sbin/nginx -t
# Log de atividades sudo
sudo tail -f /var/log/auth.log | grep sudo
Princípio: O proprietário do recurso controla quem tem acesso.
# Exemplo DAC
chmod 755 arquivo.txt # proprietário define permissões
chown alice:developers file # transfere propriedade
Princípio: Sistema operacional controla acesso baseado em políticas centralizadas.
# Exemplo SELinux
# Verificar contexto de segurança
ls -Z /var/www/html/
# Definir contexto para arquivos web
chcon -R -t httpd_exec_t /var/www/html/
restorecon -R /var/www/html/
# Verificar status SELinux
getenforce
sestatus
Princípio: Permissões atribuídas a papéis, usuários recebem papéis.
Hierarquia: Usuários ← Papéis ← Permissões
# Exemplo conceitual RBAC
Usuário: joão
Papéis: [developer, backup-operator]
Permissões:
- developer: {read_code, write_code, deploy_staging}
- backup-operator: {read_backups, create_backups}
Modelo | Controle | Flexibilidade | Segurança | Uso Típico |
---|---|---|---|---|
DAC | Proprietário | Alta | Média | Sistemas pessoais, compartilhamentos |
MAC | Sistema | Baixa | Muito Alta | Ambientes críticos, militares |
RBAC | Administrador | Média | Alta | Empresas, sistemas corporativos |
# Exemplo de auditoria de acesso
# Verificar logins recentes
last -n 20
# Verificar tentativas de sudo
grep sudo /var/log/auth.log | tail -20
# Listar usuários com privilégios sudo
grep -E '^sudo|^admin' /etc/group
Recomendação: Combine modelos conforme necessidade - RBAC para organização geral, MAC para proteção crítica, DAC para flexibilidade do usuário final.
ldapadd -x -D "cn=admin,dc=exemplo,dc=com" -W -f user.ldif
. openldap.organsible-playbook configure_sudoers.yml
. ansible.comO OpenLDAP é um servidor de diretórios que implementa o protocolo LDAP para gerenciar autenticação e autorização centralizadas, essencial para conformidade com LGPD e PNSI. Esta seção configura um servidor LDAP básico em Ubuntu, cria uma estrutura inicial e protege credenciais.
Os passos a seguir instalam o OpenLDAP, configuram o domínio base, criam uma unidade organizacional e uma conta administrativa, e importam a estrutura inicial.
# Instala o servidor OpenLDAP (slapd) e ferramentas de cliente (ldap-utils)
sudo apt update
sudo apt install slapd ldap-utils
Motivo: O slapd
é o daemon do servidor LDAP, e o ldap-utils
fornece comandos como ldapadd
e ldapsearch
para gerenciar o diretório.
Objetivo: Disponibilizar os componentes necessários para operar o LDAP.
Segurança: Usa repositórios oficiais do Ubuntu para evitar pacotes maliciosos.
# Reconfigura o domínio base (ex.: dc=exemplo,dc=local) e a senha do administrador
sudo dpkg-reconfigure slapd
Motivo: Define o DN base (ex.: dc=exemplo,dc=local
) e cria a conta cn=admin,dc=exemplo,dc=local
com senha hasheada.
Objetivo: Personalizar a estrutura do diretório e habilitar administração segura.
Segurança: A senha é armazenada como hash SSHA, resistente a ataques de força bruta.
# Arquivo db.ldif
dn: ou=People,dc=exemplo,dc=local
objectClass: organizationalUnit
ou: People
dn: cn=admin,dc=exemplo,dc=local
objectClass: simpleSecurityObject
objectClass: organizationalRole
cn: admin
userPassword: {SSHA}hash_da_senha
description: LDAP Administrator
# Gerar hash SSHA para a senha
slappasswd -s MinhaSenha123 > hash.txt
Motivo: Define uma unidade organizacional (ou=People
) para usuários e uma conta administrativa (cn=admin
) com senha criptografada.
Objetivo: Criar a estrutura hierárquica inicial do diretório LDAP.
Segurança: O hash {SSHA}
protege a senha, e a hierarquia facilita ACLs.
# Importa o arquivo db.ldif para o diretório LDAP
sudo ldapadd -x -D "cn=admin,dc=exemplo,dc=local" -W -f db.ldif
Motivo: Adiciona os objetos definidos no LDIF ao servidor LDAP.
Objetivo: Popular o diretório com a estrutura inicial.
Segurança: Usa autenticação administrativa para evitar modificações não autorizadas.
# Lista objetos no diretório
ldapsearch -x -b "dc=exemplo,dc=local" -H ldap://localhost
Motivo: Confirma que os objetos foram importados corretamente.
Objetivo: Validar a configuração inicial do servidor.
Segurança: Usa conexão local para evitar exposição de dados.
sudo apt install phpldapadmin
. phpldapadmin.sourceforge.netipa-server-install
. freeipa.orgNota:
Prática:
ldapsearch
.cn=config
e teste com ldapsearch -Z
.Conformidade Legal:
O PAM (Pluggable Authentication Modules) gerencia autenticação no Linux, e os módulos pam_tally2
e pam_faillock
bloqueiam contas após tentativas de login malsucedidas, protegendo contra força bruta. Esta seção configura bloqueios, monitora falhas e garante conformidade com LGPD e PNSI.
Os passos a seguir configuram pam_tally2
e pam_faillock
para bloquear contas após 5 falhas, com desbloqueio após 600 segundos, e mostram como auditar tentativas.
# Adiciona ao /etc/pam.d/common-auth
auth required pam_tally2.so onerr=fail deny=5 unlock_time=600 even_deny_root
Motivo: Configura o módulo pam_tally2
para bloquear contas após 5 falhas de login, com desbloqueio automático após 10 minutos, incluindo o usuário root.
Objetivo: Proteger serviços (ex.: SSH, login local) contra ataques de força bruta.
Segurança: Limita tentativas de acesso não autorizado, armazenando contadores em /var/log/tallylog
.
# Exibe falhas de login para o usuário aluno
pam_tally2 --user aluno
Motivo: Consulta o número de tentativas malsucedidas e o status de bloqueio.
Objetivo: Auditar possíveis ataques ou erros de usuário.
Segurança: Facilita a detecção de força bruta e suporta auditorias.
# Zera o contador de falhas para aluno
pam_tally2 --user aluno --reset
Motivo: Desbloqueia a conta manualmente, zerando falhas.
Objetivo: Restaurar acesso legítimo após bloqueio.
Segurança: Requer privilégios administrativos, evitando abusos.
# Adiciona ao /etc/pam.d/common-auth
auth required pam_faillock.so preauth silent deny=5 fail_interval=900 unlock_time=600
auth [default=die] pam_faillock.so authfail
Motivo: Configura pam_faillock
para bloquear contas após 5 falhas em 15 minutos, com desbloqueio após 10 minutos, sem vazar informações.
Objetivo: Implementar bloqueio robusto e moderno, compatível com auditorias.
Segurança: O parâmetro silent
evita exposição de detalhes, e fail_interval
protege contra ataques distribuídos.
# Exibe falhas e status de bloqueio para aluno
faillock --user aluno
Motivo: Relata tentativas malsucedidas e estado da conta.
Objetivo: Permitir auditoria e gerenciamento de bloqueios.
Segurança: Suporta conformidade com LGPD e PNSI via rastreamento.
# Integra Fail2ban para bloquear IPs
sudo apt install fail2ban
# /etc/fail2ban/jail.local
[sshd]
enabled = true
port = ssh
maxretry = 5
bantime = 3600
sudo systemctl restart fail2ban
# Monitora logs PAM com Wazuh
tail -f /var/ossec/logs/alerts/alerts.log | grep pam
# Adiciona MFA com Google Authenticator
auth required pam_google_authenticator.so
Motivo: Combina bloqueio de contas com bloqueio de IPs e MFA para proteção em camadas.
Objetivo: Aumentar a resiliência contra ataques de força bruta.
Segurança: Fail2ban bloqueia IPs maliciosos, Wazuh audita em tempo real, e MFA adiciona autenticação forte.
fail2ban-client status sshd
. fail2ban.orgwazuh-control start
. wazuh.comPrática:
pam_tally2
e pam_faillock
em uma VM Ubuntu, simule falhas de login SSH e verifique bloqueios com pam_tally2
e faillock
.pam_faillock
.Conformidade Legal:
O auditd
é o sistema de auditoria do Linux que registra eventos como acessos a arquivos, chamadas de sistema e autenticações, essencial para detecção de incidentes e conformidade com LGPD e PNSI. Esta seção configura auditoria de eventos de autenticação, analisa logs e gera relatórios.
Os passos a seguir instalam o auditd
, configuram monitoramento de logs de autenticação, e mostram como buscar e resumir eventos para auditoria.
# Instala auditd e ativa o serviço
sudo apt update
sudo apt install auditd
sudo systemctl enable --now auditd
Motivo: Instala o daemon de auditoria e garante sua execução contínua.
Objetivo: Disponibilizar o sistema de auditoria para monitoramento de eventos.
Segurança: Usa repositórios oficiais e ativação imediata para proteção ininterrupta.
# Monitora /var/log/auth.log para eventos de autenticação
sudo auditctl -w /var/log/auth.log -p wa -k auth_events
# Monitora alterações em /etc/passwd
sudo auditctl -w /etc/passwd -p wa -k passwd_changes
Motivo: Define regras para rastrear acessos e alterações em logs de autenticação e arquivos críticos.
Objetivo: Detectar tentativas de login, uso de sudo
ou modificações não autorizadas.
Segurança: Identifica força bruta, escalação de privilégios ou manipulação de credenciais.
# Pesquisa eventos associados à chave auth_events
sudo ausearch -k auth_events --interpret
# Pesquisa eventos de alterações em /etc/passwd
sudo ausearch -k passwd_changes --interpret
Motivo: Extrai logs detalhados de eventos auditados em formato legível.
Objetivo: Investigar incidentes como falhas de login ou acessos indevidos.
Segurança: Facilita a identificação de atividades suspeitas com detalhes de usuário e hora.
# Gera relatório de eventos auditados
sudo aureport -k --summary
Motivo: Sumariza eventos por chave para auditorias ou relatórios de conformidade.
Objetivo: Fornecer uma visão geral de atividades suspeitas.
Segurança: Suporta LGPD e PNSI com evidências de monitoramento.
# Monitora execuções de comandos
sudo auditctl -a always,exit -F arch=b64 -S execve -k command_exec
# Integra com Wazuh
tail -f /var/ossec/logs/alerts/alerts.log | grep audit
# Relatório diário com Logwatch
logwatch --service audit --range yesterday --detail High
Motivo: Amplia auditoria para comandos e integra com ferramentas de análise.
Objetivo: Aumentar visibilidade e resposta a incidentes.
Segurança: Wazuh e Logwatch fornecem alertas e relatórios automatizados.
wazuh-control start
. wazuh.comlogwatch --service audit
. sourceforge.net/logwatchsplunk add monitor /var/log/audit/audit.log
. splunk.comPrática:
auditd
em uma VM Ubuntu, monitore /var/log/auth.log
e /etc/passwd
, e analise com ausearch
.auditd
com Wazuh para alertas e gere relatórios com Logwatch.aureport
.Conformidade Legal:
Este laboratório integra FreeRADIUS
, OpenLDAP
e Kerberos
para criar uma infraestrutura AAA (Autenticação, Autorização, Auditoria) centralizada, ideal para redes corporativas. A solução garante autenticação segura, autorização baseada em papéis e auditoria, conforme LGPD e PNSI.
Os passos a seguir instalam os componentes, configuram integrações e testam autenticação RADIUS, criando um servidor AAA funcional.
# Instala FreeRADIUS, OpenLDAP e Kerberos
sudo apt update
sudo apt install freeradius freeradius-ldap slapd ldap-utils krb5-kdc krb5-admin-server
Motivo: Disponibiliza os pacotes para FreeRADIUS
(autenticação RADIUS), OpenLDAP
(diretório de identidades) e Kerberos
(autenticação por tickets).
Objetivo: Preparar o servidor AAA com os componentes necessários.
Segurança: Usa repositórios oficiais para evitar pacotes maliciosos.
# Editar /etc/freeradius/3.0/mods-available/ldap
server = 'localhost'
identity = 'cn=admin,dc=exemplo,dc=local'
password = 'senha_admin'
base_dn = 'ou=People,dc=exemplo,dc=local'
# Habilitar módulo
sudo ln -s /etc/freeradius/3.0/mods-available/ldap /etc/freeradius/3.0/mods-enabled/
sudo systemctl restart freeradius
Motivo: Integra o FreeRADIUS com o OpenLDAP para consultar credenciais e atributos de usuários.
Objetivo: Usar o LDAP como backend de autenticação para RADIUS.
Segurança: A senha do bind deve ser forte; em produção, use TLS (ldaps://
).
# Editar /etc/krb5.conf
[libdefaults]
default_realm = EXEMPLO.LOCAL
[realms]
EXEMPLO.LOCAL = {
kdc = localhost
admin_server = localhost
}
# Criar principal mapeado ao LDAP
sudo kadmin.local -q "addprinc -x dn=uid=aluno,ou=People,dc=exemplo,dc=local aluno@EXEMPLO.LOCAL"
sudo systemctl restart krb5-kdc
# Verificar ticket
kinit aluno
klist
Motivo: Configura o Kerberos para autenticação por tickets e sincroniza contas LDAP como principals.
Objetivo: Habilitar SSO com Kerberos, usando o LDAP como fonte de identidades.
Segurança: O mapeamento evita duplicação, e o KDC deve ser protegido contra replay.
# Configurar cliente RADIUS em /etc/freeradius/3.0/clients.conf
client localhost {
ipaddr = 127.0.0.1
secret = secreta
}
# Testar autenticação
radtest aluno MinhaSenha123 localhost 0 secreta
Motivo: Simula uma solicitação RADIUS para verificar a integração com OpenLDAP.
Objetivo: Confirmar que o servidor AAA autentica usuários corretamente.
Segurança: A senha compartilhada (secreta
) deve ser forte e protegida.
# Habilitar TLS no LDAP
tls_cacertfile=/etc/ssl/certs/ca-cert.pem
# Auditar logs RADIUS
tail -f /var/log/freeradius/radius.log
# Capturar pacotes com Wireshark
wireshark -i lo -f "port 1812 or port 88"
Motivo: Adiciona TLS, auditoria e análise de pacotes para maior segurança e depuração.
Objetivo: Proteger comunicações e facilitar diagnóstico.
Segurança: TLS evita interceptação, e logs/Wireshark ajudam a detectar anomalias.
ipa-server-install
. freeipa.orgwireshark -f "port 1812"
. wireshark.orgsudo apt install daloradius
. github.com/daloradiusPrática:
radtest
.Conformidade Legal:
Este laboratório simula uma rede corporativa com autenticação centralizada (Kerberos), diretório de identidades (OpenLDAP), e controle de acesso (ACLs/RBAC). Dois hosts são configurados: um controlador AAA e um cliente web com SSO, garantindo conformidade com LGPD e PNSI.
Os passos a seguir montam dois hosts, definem grupos LDAP, configuram diretórios com ACLs/RBAC, e testam acessos para validar a segurança.
# Instalar FreeRADIUS, OpenLDAP e Kerberos
sudo apt update
sudo apt install freeradius freeradius-ldap slapd ldap-utils krb5-kdc krb5-admin-server
# Configurar OpenLDAP
sudo dpkg-reconfigure slapd
# Configurar Kerberos
sudo krb5_newrealm
# Instalar Apache e mod_auth_kerb
sudo apt install apache2 libapache2-mod-auth-kerb krb5-user
sudo a2enmod auth_kerb
sudo systemctl restart apache2
Motivo: O controlador AAA centraliza autenticação e autorização; o cliente web simula aplicações com SSO Kerberos e LDAP.
Objetivo: Criar um ambiente realista para testar AAA.
Segurança: Use firewall (ufw allow 1812,88,389
) no controlador e HTTPS no cliente.
# Criar groups.ldif
dn: ou=Groups,dc=exemplo,dc=local
objectClass: organizationalUnit
ou: Groups
dn: cn=financeiro,ou=Groups,dc=exemplo,dc=local
objectClass: posixGroup
cn: financeiro
gidNumber: 1001
memberUid: aluno
dn: cn=ti,ou=Groups,dc=exemplo,dc=local
objectClass: posixGroup
cn: ti
gidNumber: 1002
# Importar
sudo ldapadd -x -D "cn=admin,dc=exemplo,dc=local" -W -f groups.ldif
# Verificar
ldapsearch -x -b "dc=exemplo,dc=local" "(memberUid=aluno)"
Motivo: Cria grupos POSIX para segregar acesso por departamento.
Objetivo: Implementar RBAC com base em grupos LDAP.
Segurança: O bind administrativo protege contra modificações não autorizadas.
# Configurar diretórios
sudo mkdir -p /dados/{financeiro,ti}
sudo chown root:financeiro /dados/financeiro
sudo chown root:ti /dados/ti
sudo chmod 770 /dados/{financeiro,ti}
sudo setfacl -m g:financeiro:rwx /dados/financeiro
sudo setfacl -m g:ti:rwx /dados/ti
# Verificar
getfacl /dados/financeiro
getfacl /dados/ti
# Auditar acessos
sudo auditctl -w /dados/financeiro -p wa -k financeiro_access
Motivo: Configura diretórios com permissões baseadas em grupos, usando ACLs para controle granular.
Objetivo: Garantir segregação de acesso entre departamentos.
Segurança: ACLs e propriedade root
evitam acessos indevidos.
# Configurar Apache SSO (/etc/apache2/sites-available/000-default.conf)
<Directory /var/www/html>
AuthType Kerberos
AuthName "Kerberos SSO"
KrbAuthRealms EXEMPLO.LOCAL
KrbServiceName HTTP/cliente.exemplo.local
Krb5KeyTab /etc/apache2/http.keytab
Require ldap-group cn=financeiro,ou=Groups,dc=exemplo,dc=local
</Directory>
sudo a2ensite 000-default
sudo systemctl restart apache2
# Testar acesso local
su - aluno -c "touch /dados/financeiro/teste.txt"
su - aluno -c "touch /dados/ti/teste.txt" # Deve falhar
# Testar SSO
kinit aluno
firefox http://cliente.exemplo.local
Motivo: Valida autenticação Kerberos, autorização LDAP e ACLs/RBAC.
Objetivo: Confirmar que apenas usuários autorizados acessam recursos.
Segurança: Kerberos protege credenciais, e LDAP+ACLs garantem segregação.
ipa-server-install
. freeipa.orgtail -f /var/ossec/logs/alerts.log
. wazuh.comsudo apt install phpldapadmin
. phpldapadmin.sourceforge.netNota: O vazamento da Serasa (2024) ocorreu por permissões excessivas, mitigável com ACLs e RBAC.
Prática:
Conformidade Legal:
chage -E
define data de expiração da conta.
chage -E
para expirar contas; passwd -e
apenas força troca no próximo login.