CLI `tatuzim`
CLI administrativo do server. Opera diretamente no vault (file lock exclusivo — server precisa estar parado).
Sintaxe geral
tatuzim <COMMAND> [OPTIONS]Variaveis de ambiente comuns
| Var | Default | Uso |
|---|---|---|
TATUZIM_MASTER_PASSPHRASE |
(prompt) | Passphrase do vault — evita prompt interativo |
RUST_LOG |
info |
Verbosidade: error, warn, info, debug, trace |
Comandos
`tatuzim init`
Inicializa um novo vault criptografado.
tatuzim init --root <DIR> [--passphrase <PASS>]Opcoes:
| Flag | Default | Descricao |
|---|---|---|
--root |
/var/lib/tatuzim |
Diretorio onde criar config.json + db.enc |
--passphrase |
(prompt env) | Passphrase mestra |
Exit codes:
0— sucesso1— erro (root ja existe, passphrase vazia, etc.)
Exemplo:
TATUZIM_MASTER_PASSPHRASE=minha-senha tatuzim init --root /var/lib/tatuzimO que faz:
- Gera salt aleatorio (32 bytes)
- Argon2id deriva KEK da passphrase
- Gera DEK random
- Cifra DEK com KEK →
wrapped_dek - Salva
config.json(salt, kdf_params, wrapped_dek_b64) - Inicializa Stoolap em
db.plain/, aplica schema_v1 - Cifra
db.plain→db.enc - Remove
db.plain
`tatuzim unseal`
Valida que vault abre com a passphrase + schema integro.
tatuzim unseal --root <DIR>Opcoes: igual init.
Exemplo:
tatuzim unseal --root /var/lib/tatuzim
# Esperado: "Vault unsealed and verified at /var/lib/tatuzim"Uso tipico: validacao apos restore de backup.
`tatuzim token create`
Gera um enrollment token one-time.
tatuzim token create [OPTIONS] --hostname <H> --role <R>Opcoes:
| Flag | Obrigatorio | Default | Descricao |
|---|---|---|---|
--root |
nao | /var/lib/tatuzim |
Vault root |
--passphrase |
nao | (env) | Passphrase |
--hostname |
sim | — | Hostname esperado do agent |
--role |
sim | — | Role esperado do agent |
--ttl |
nao | 1h |
TTL do token (30m, 1h, 1d, ...) |
Exit codes:
0— token criado1— erro
Exemplo:
tatuzim token create --hostname vps-mautic-01 --role mautic --ttl 1hOutput:
Enrollment token created:
ID: 00000000-0000-4000-8000-000000000002
Hostname: vps-mautic-01
Role: mautic
Expires: 2026-05-23T23:02:22+00:00
Token (single-use, save it now — won't be shown again):
EXEMPLO_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxImportante: token plaintext mostrado apenas 1x. Apos isso, so o SHA256 vive no vault.
`tatuzim agente list`
Lista agents registrados.
tatuzim agente list --root <DIR>Output:
ID HOSTNAME ROLE ENROLLED_AT
00000000-0000-4000-8000-000000000001 vps-mautic-01 mautic 2026-05-23T22:14:38+00:00
3a8c7f12-... vps-traefik-02 edge 2026-05-23T20:11:22+00:00Sem agents:
No agents enrolled.`tatuzim carga create`
Registra uma carga + atribui a um agent como entrega pendente.
tatuzim carga create [OPTIONS] --nome <N> --destino <HOST>Opcoes:
| Flag | Obrigatorio | Default | Descricao |
|---|---|---|---|
--root |
nao | /var/lib/tatuzim |
Vault root |
--passphrase |
nao | (env) | Passphrase |
--tipo |
nao | csr_cert |
csr_cert, selado (v0.2), push (v0.3) |
--nome |
sim | — | Nome simbolico da carga |
--destino |
sim | — | Hostname do agent destinatario |
Exemplo:
tatuzim carga create --tipo csr_cert --nome traefik-cert --destino vps-mautic-01Output:
Carga registrada:
carga_id: 00000000-0000-...
entrega_id: 00000000-0000-...
destinatario: vps-mautic-01 (00000000-0000-...)`tatuzim evento list`
Lista eventos do audit log (com opcao de verificar a hash chain).
tatuzim evento list [OPTIONS]Opcoes:
| Flag | Default | Descricao |
|---|---|---|
--root |
/var/lib/tatuzim |
Vault root |
--passphrase |
(env) | Passphrase |
--agente |
nenhum | Filtrar por hostname do agent |
--limit |
50 |
Max numero de eventos |
--verify |
falso | Verifica integridade da hash chain |
Exemplo:
tatuzim evento list --agente vps-mautic-01 --verify --limit 20Output:
Hash chain: VALID
OCORRIDO_EM TIPO EVENTO_ID HASH_PRFX
2026-05-23T22:30:15.123456789+00:00 entrega_instalada 00000000-0000-4000-8000-000000000003 0000000000000000
2026-05-23T22:29:46.179498265+00:00 cert_renewed 00000000-0000-4000-8000-000000000004 1111111111111111
2026-05-23T22:29:30.456789012+00:00 agent_started a1b2c3d4-... 2222222222222222Hash chain: cada evento contem hash_atual = SHA256(hash_anterior || payload || timestamp). Adulteracao detectavel via --verify (recomputa toda a chain e compara).
Se houver adulteracao:
Hash chain: BROKENPattern de uso (com server rodando)
Como o vault tem lock exclusivo (flock), pra usar o CLI voce precisa parar o server:
# Stop
docker stop dev_tatuzim_server
# Operate
tatuzim agente list --root /var/lib/tatuzim
tatuzim token create --hostname X --role Y
# Start
docker start dev_tatuzim_serverErro se tentar com server up:
Error: configuration error: vault already locked (...): Resource temporarily unavailable — another process is using the vaultEm containers
Quando o vault esta num volume Docker:
docker run --rm --entrypoint /usr/local/bin/tatuzim \
-v tatuzim_tatuzim_vault:/var/lib/tatuzim \
-e TATUZIM_MASTER_PASSPHRASE=SUA-SENHA \
tatuzim-server:dev \
agente list --root /var/lib/tatuzim--entrypoint /usr/local/bin/tatuzim substitui o entrypoint default (que e o tatuzim-server), permitindo rodar o CLI.
Roadmap
| Comando | Versao |
|---|---|
tatuzim agente revoke <hostname> |
v0.2 |
tatuzim carga delete <id> |
v0.2 |
tatuzim token list / revoke |
v0.2 |
tatuzim backup / restore (CLI wrappers) |
v0.4 |
| API HTTP admin (todas operacoes via mTLS) | v0.4 |