Feito com Chinaski

Logs do Sistema e Eventos de Segurança

Os logs da aplicação vão para stdout/stderr e caem no journal do systemd; eventos de alto sinal são adicionalmente emitidos como JSON de uma linha para ingestão por máquina. Opcionalmente, os eventos mais relevantes de segurança também podem ser espelhados em um arquivo append-only fora do banco de dados. Esta página cobre ambas as camadas mais as considerações de retenção/PII.

Lendo o journal

journalctl -u chinaski@<N> -f                         # siga o stream ao vivo
journalctl -u chinaski@<N> -o json --since '1 hour ago' | grep -F '"event"'

Linhas em texto simples [chinaski] … e linhas JSON estruturadas compartilham o stream (o filtro grep isola o conjunto estruturado.)

Os eventos estruturados (JSON)

Eventos documentados e seus níveis/campos:

Evento Nível Campos
login_success info user, role, ip
login_failure warn user, ip, reason
login_lockout warn ip, wait_seconds
setup_completed info user
build_started info triggered_by
build_finished info/error status, files_written, error_count
webhook_fired info url_host, status_code

Além disso, um conjunto mais amplo de eventos de segurança é espelhado no log externo quando configurado (veja abaixo).

PII e retenção

Os campos ip contêm o endereço IP do cliente requisitante, necessário para forense de segurança (correlacionar tentativas de login, bloqueios) mas dados pessoais sob GDPR/CCPA. O README embarca uma amostra de política de retenção para o journald:

# /etc/systemd/journald.conf.d/chinaski.conf
[Journal]
SystemMaxUse=2G          # teto no uso de disco
MaxRetentionSec=30day    # poda automática após N dias

Recarregue o journal com systemctl restart systemd-journald. Se os logs vão para um SIEM externo, aplique retenção equivalente lá.

Log de segurança externo

Definir o security log destination (Settings → Security) para um caminho de arquivo habilita um segundo canal: os eventos de segurança de alto sinal listados (login com sucesso/falha, bloqueio e conta suspensa, login SSO, limpezas de sessão obsoleta, sondagens de honeypot, rate limit de registro) são anexados como linhas JSON àquele arquivo (criado com modo 0600). O objetivo é a durabilidade da forense: o journal sobrevive a um comprometimento do banco de dados SQLite.

Leia este site em