Skip to content
KitploitKITPLOIT
StrumentiBlog
Invia
StrumentiBlog
Invia

Strumenti di Hacking, PenTest e Cybersecurity per il tuo Arsenale di Sicurezza!

Kitploit è una directory di strumenti di hacking, cybersecurity e pentesting. Scopri gli ultimi aggiornamenti dei progetti per trovare vulnerabilità, analizzare sistemi, automatizzare i test e rafforzare la tua sicurezza.

··Feed·Contatto·Privacy·© 2026 Kitploit

Directory degli strumenti

Categorie

Vedi tutte le categorie
Loading categories
envsec — Strumento CLI sicuro per la gestione dei segreti di ambiente utilizzando i depositi di credenziali nativi del sistema operativo (macOS Keychain, Linux Secret Service, Windows Credential Manager) | Kitploit
Strumenti/GitHubGitHub/davidnussio/envsec
Autenticazione e AutorizzazioneUtilità GenericheStrumenti di Crittografia/DecrittografiaSicurezza CloudDevSecOpsRilevamento Segreti
GitHubdavidnussio/envsec

envsec

Strumento CLI sicuro per la gestione dei segreti di ambiente utilizzando i depositi di credenziali nativi del sistema operativo (macOS Keychain, Linux Secret Service, Windows Credential Manager)

Vedi Repository
153 mesi faNon ancora revisionato

Più Popolari

Vedi tutti →

Scopri gli strumenti più utilizzati dalla nostra community.

Esplora tutti gli strumenti

Sfoglia la nostra collezione di strumenti

Vedi tutti gli strumenti →
Condividi
Sito web

envsec

Gestione sicura dei segreti d'ambiente utilizzando i depositi nativi del sistema operativo.

Demo

Image

Funzionalità

  • Memorizza i segreti nel deposito nativo del sistema operativo (non in file di testo semplice)
  • Multipiattaforma: macOS, Linux, Windows
  • Organizza i segreti per contesto (es. myapp.dev, stripe-api.prod, work.staging)
  • Traccia i metadati dei segreti (nomi delle chiavi, timestamp) tramite SQLite
  • Cerca contesti e segreti con pattern glob
  • Esegui comandi con interpolazione dei segreti
  • Salva e riesegui comandi con cmd (cerca, elenca, esegui, elimina)
  • Esporta segreti in file .env (con tracciamento delle generazioni tramite audit)
  • Esporta segreti come variabili d'ambiente della shell (eval $(envsec env))
  • Carica segreti da file .env (con rilevamento dei conflitti)
  • Condividi segreti crittografati con GPG per i membri del team
  • Interfaccia utente terminale interattiva (envsec tui) per gestire segreti senza memorizzare comandi

Pacchetti

Questo è un monorepo contenente i seguenti pacchetti:

Avvio rapido SDK

Per l'accesso programmatico ai segreti da Node.js o Bun, usa @envsec/sdk:```bash npm install @envsec/sdk

root@kitploit:~
Please provide the Markdown content to translate.```typescript
import { loadSecrets } from "@envsec/sdk";

// Load and inject into process.env
await loadSecrets({ context: "myapp.dev", inject: true });

// Or use the client for full control
import { EnvsecClient } from "@envsec/sdk";
const client = await EnvsecClient.create({ context: "myapp.dev" });
const apiKey = await client.get("api.key");
await client.close();

Vedi la documentazione SDK completa per tutte le API, il supporto multi-contesto e le opzioni.

Requisiti

  • Node.js >= 22

macOS

Nessuna dipendenza aggiuntiva. Utilizza il Keychain integrato tramite lo strumento CLI security.

Linux

Richiede libsecret-tools (fornisce il comando secret-tool), che comunica con GNOME Keyring, KDE Wallet o qualsiasi provider dell'API Secret Service tramite D-Bus.```bash

Debian / Ubuntu

sudo apt install libsecret-tools

Fedora

sudo dnf install libsecret

Arch

sudo pacman -S libsecret

root@kitploit:~
Una sessione D-Bus in esecuzione e un demone keyring (es. `gnome-keyring-daemon`) devono essere attivi. La maggior parte degli ambienti desktop gestisce questo automaticamente.

### Windows

Nessuna dipendenza extra. Utilizza il Gestore credenziali di Windows integrato tramite `cmdkey` e PowerShell.

## Installation

### Homebrew (macOS / Linux)```bash
brew tap davidnussio/homebrew-tap
brew install envsec

npm```bash

npm install -g envsec

root@kitploit:~
### npx (nessuna installazione)```bash
npx envsec

mise```bash

mise use -g npm:envsec

root@kitploit:~
## Utilizzo

La maggior parte dei comandi richiede un contesto specificato con `--context` (o `-c`).
Un contesto è un'etichetta libera per raggruppare segreti — ad es. `myapp.dev`, `stripe-api.prod`, `work.staging`.

### Opzioni globali

Queste opzioni sono disponibili su tutti i comandi:

- `--context`, `-c` — Nome del contesto (ad es. `myapp.dev`, `stripe-api.prod`). Legge anche la variabile d'ambiente `ENVSEC_CONTEXT`
- `--debug`, `-d` — Abilita il logging di debug
- `--json` — Output in formato JSON per script
- `--db` — Percorso del file del database SQLite (default: `~/.envsec/store.sqlite`). Legge anche la variabile d'ambiente `ENVSEC_DB`

### Percorso personalizzato del database

Per impostazione predefinita, i metadati sono memorizzati in `~/.envsec/store.sqlite`. Puoi sovrascrivere questo con `--db` o la variabile d'ambiente `ENVSEC_DB`:```bash
# Use a project-local database
envsec --db ./local-store.sqlite -c myapp.dev list

# Or via environment variable
export ENVSEC_DB=/shared/team/envsec.sqlite
envsec -c myapp.dev list

The --db flag ha la precedenza su ENVSEC_DB. I casi d'uso includono database per progetto, database condivisi in team su unità di rete e CI/CD con storage effimero.

Aggiungi un segreto

Archivia un segreto nel deposito di credenziali del sistema operativo.

  • <key> — Nome della chiave segreta (ad es. api.key, db.password)
  • --value, -v — Valore da archiviare (omettere per prompt interattivo mascherato)
  • --expires, -e — Durata di scadenza (ad es. 30m, 2h, 7d, 4w, 3mo, 1y)```bash

Store a value inline

envsec -c myapp.dev add api.key --value "sk-abc123"

Or use the short alias

envsec -c myapp.dev add api.key -v "sk-abc123"

Omit --value for an interactive masked prompt

envsec -c myapp.dev add api.key

Set an expiry duration with --expires (-e)

envsec -c myapp.dev add api.key -v "sk-abc123" --expires 30d

Supported duration units: m (minutes), h (hours), d (days), w (weeks), mo (months), y (years)

Combinable: 1y6mo, 2w3d, 1d12h

envsec -c myapp.dev add api.key -v "sk-abc123" -e 6mo

root@kitploit:~
### Ottieni un segreto

Recupera un valore segreto dal deposito di credenziali del sistema operativo.

- `<key>` — Nome della chiave segreta da recuperare
- `--quiet`, `-q` — Stampa solo il valore grezzo (nessun avviso o output aggiuntivo)
- `--json` — Output in formato JSON (include contesto, chiave, valore, expires_at)```bash
envsec -c myapp.dev get api.key

# Print only the raw value (no warnings or extra output)
envsec -c myapp.dev get api.key --quiet
envsec -c myapp.dev get api.key -q

Elimina un segreto

Rimuovi un segreto dall'archivio di credenziali del sistema operativo.

  • <key> — Nome della chiave del segreto da eliminare (opzionale se si usa --all)
  • --yes, -y — Salta la richiesta di conferma
  • --all — Elimina tutti i segreti nel contesto```bash envsec -c myapp.dev delete api.key

or use the alias

envsec -c myapp.dev del api.key

root@kitploit:~
### Rinominare un segreto

Rinomina una chiave segreta all'interno dello stesso contesto. Il valore e i metadati di scadenza vengono preservati.

- `<old-key>` — Nome attuale della chiave segreta
- `<new-key>` — Nuovo nome della chiave segreta
- `--force`, `-f` — Sovrascrivi la destinazione se esiste già```bash
# Rename a key
envsec -c myapp.dev rename old.key new.key

# Overwrite target if it already exists
envsec -c myapp.dev rename old.key existing.key --force

Elenca tutti i segreti in un contesto

Elenca tutte le chiavi segrete e i metadati in un contesto.

  • --json — Output in formato JSON```bash envsec -c myapp.dev list
root@kitploit:~
### Elenca tutti i contesti

Elenca tutti i contesti disponibili con il conteggio dei segreti.

- `--json` — Output in formato JSON```bash
# Without --context, lists all available contexts with secret counts
envsec list

Cerca segreti

Cerca segreti o contesti utilizzando pattern glob.

  • <pattern> — Pattern glob da cercare (es. api.*, myapp.*)
  • --json — Output in formato JSON```bash

Search secrets within a context

envsec -c myapp.dev search "api.*"

Search contexts by pattern (without --context)

envsec search "myapp.*"

root@kitploit:~
### Sposta segreti tra contesti

Sposta segreti da un contesto a un altro. I segreti sorgente vengono rimossi dopo lo spostamento.

- `<pattern>` — Pattern glob o chiave esatta da spostare (opzionale se si usa `--all`)
- `--to`, `-t` — Contesto di destinazione in cui spostare i segreti
- `--all` — Sposta tutti i segreti dal contesto sorgente
- `--force`, `-f` — Sovrascrivi segreti esistenti nel contesto di destinazione
- `--yes`, `-y` — Salta la richiesta di conferma```bash
# Move a single secret
envsec -c myapp.dev move api.token --to myapp.prod

# Move secrets matching a glob pattern
envsec -c myapp.dev move "redis.*" --to myapp.prod -y

# Move all secrets from one context to another
envsec -c myapp.dev move --all --to myapp.prod -y

# Overwrite existing secrets in the target context
envsec -c myapp.dev move "redis.*" --to myapp.prod --force -y

Copia segreti tra contesti

Copia segreti da un contesto a un altro. I segreti di origine rimangono intatti.

  • <pattern> — Pattern glob o chiave esatta da copiare (opzionale se si usa --all)
  • --to, -t — Contesto di destinazione in cui copiare i segreti
  • --all — Copia tutti i segreti dal contesto di origine
  • --force, -f — Sovrascrivi segreti esistenti nel contesto di destinazione
  • --yes, -y — Salta la richiesta di conferma```bash

Copy a single secret

envsec -c myapp.dev copy api.token --to myapp.staging

Copy secrets matching a glob pattern

envsec -c myapp.dev copy "redis.*" --to myapp.staging -y

Copy all secrets from one context to another

envsec -c myapp.dev copy --all --to myapp.staging -y

Overwrite existing secrets in the target context

envsec -c myapp.dev copy "redis.*" --to myapp.staging --force -y

root@kitploit:~
### Esegui un comando con segreti

Esegui un comando con valori segreti interpolati tramite segnaposto o iniettati come variabili d'ambiente.

- `<command>` — Comando da eseguire. Usa i segnaposto `{key}` per interpolare i segreti
- `--inject`, `-i` — Inietta tutti i segreti del contesto come variabili d'ambiente (`KEY.NAME` → `KEY_NAME`)
- `--save`, `-s` — Salva questo comando per un uso futuro
- `--name`, `-n` — Nome per il comando salvato (richiesto interattivamente se omesso con `--save`)```bash
# Placeholders {key} are resolved with secret values before execution
envsec -c myapp.dev run 'curl {api.url} -H "Authorization: Bearer {api.token}"'

# Any {dotted.key} in the command string is replaced with its value
envsec -c myapp.prod run 'psql {db.connection_string}'

# Inject ALL context secrets as environment variables (KEY.NAME → KEY_NAME)
envsec -c myapp.dev run --inject 'node server.js'
envsec -c myapp.dev run -i 'docker compose up'

# Combine --inject with placeholders
envsec -c myapp.dev run --inject 'curl {api.url} -H "Authorization: Bearer $API_TOKEN"'

# Save the command for later use with --save (-s) and --name (-n)
envsec -c myapp.dev run --save --name deploy 'kubectl apply -f - <<< {k8s.manifest}'

# If you use --save without --name, you'll be prompted interactively
envsec -c myapp.dev run --save 'psql {db.connection_string}'

Se un placeholder fa riferimento a un segreto che non esiste, il comando non verrà eseguito e vedrai un chiaro errore:``` ❌ Missing secrets in context "myapp.dev":

  • api.url
  • api.token

Add them with: envsec -c myapp.dev add

root@kitploit:~
### Comandi salvati

I comandi salvati si trovano sotto il sottocomando `cmd`, mantenendoli separati dalle operazioni segrete.

#### cmd list

Elenca tutti i comandi salvati.```bash
envsec cmd list

cmd run

Esegue un comando salvato (utilizza il contesto con cui è stato salvato).

  • <name> — Nome del comando salvato da eseguire
  • --override-context, -o — Sovrascrive il contesto salvato al momento dell'esecuzione
  • --quiet, -q — Sopprime l'output informativo (stampa solo l'output del comando)
  • --inject, -i — Inietta tutti i segreti del contesto come variabili di ambiente```bash envsec cmd run deploy

Run quietly (suppress informational output like "Resolved N secret(s)")

envsec cmd run deploy --quiet envsec cmd run deploy -q

Override the context at execution time

envsec cmd run deploy --override-context myapp.prod envsec cmd run deploy -o myapp.prod

Inject all context secrets as env vars when running a saved command

envsec cmd run deploy --inject envsec cmd run deploy -i

root@kitploit:~
#### cmd search

Cerca comandi salvati per nome o stringa di comando.

- `<pattern>` — Pattern di ricerca
- `--name`, `-n` — Cerca solo nei nomi dei comandi
- `--command`, `-m` — Cerca solo nelle stringhe dei comandi```bash
envsec cmd search psql

# Search only by name
envsec cmd search deploy -n

# Search only by command string
envsec cmd search kubectl -m

cmd delete

Elimina un comando salvato.

  • <name> — Nome del comando da eliminare```bash envsec cmd delete deploy
root@kitploit:~
### Genera un file .env

Esporta tutti i segreti da un contesto in un file `.env`.

- `--output`, `-o` — Percorso del file di output (predefinito: `.env`)```bash
# Creates .env with all secrets from the context
envsec -c myapp.dev env-file

# Specify a custom output path
envsec -c myapp.dev env-file --output .env.local

Keys are converted to UPPER_SNAKE_CASE (e.g. api.token → API_TOKEN).

Esporta i segreti come variabili d'ambiente

Restituisce istruzioni di esportazione da usare con eval o sourcing di shell.

  • --shell, -s — Sintassi della shell di destinazione: bash (default), zsh, fish, powershell
  • --unset, -u — Restituisce comandi di unset/rimozione invece di export```bash

Output export statements for eval (bash/zsh)

eval $(envsec -c myapp.dev env)

Specify target shell syntax

envsec -c myapp.dev env --shell fish envsec -c myapp.dev env --shell powershell

Output unset commands to clean up exported variables

eval $(envsec -c myapp.dev env --unset)

Combine shell and unset

envsec -c myapp.dev env --unset --shell fish

root@kitploit:~
Shell supportati: `bash` (default), `zsh`, `fish`, `powershell`. Le chiavi vengono convertite in `UPPER_SNAKE_CASE` (es. `api.token` → `API_TOKEN`). L'output va su stdout in modo che possa essere passato tramite pipe a `eval` o eseguito direttamente con source — nessun file viene scritto su disco.

### Avviare una sessione shell con ambito secrets

Avvia un subshell interattivo con tutti i segreti del contesto iniettati come
variabili d'ambiente. Quando fai `exit`, i segreti scompaiono — nessuna pulizia necessaria.

- `--shell`, `-s` — Shell in cui avviare (`bash`, `zsh`, `fish`, `powershell`). Default: rilevamento automatico
- `--no-inherit` — Non ereditare le variabili d'ambiente genitore
- `--quiet`, `-q` — Sopprime il banner di avvio/uscita```bash
envsec -c myapp.dev shell

INPUT:``` ▶ envsec shell — context: myapp.dev (8 secrets loaded) Type 'exit' or press Ctrl+D to leave the session.

(envsec:myapp.dev) ~ $ echo $DATABASE_URL postgres://user:pass@localhost/mydb

(envsec:myapp.dev) ~ $ exit → Exiting envsec shell — secrets cleared.

root@kitploit:~
INPUT:```bash
# Force a specific shell
envsec -c myapp.dev shell --shell zsh

# Only envsec secrets in env (no parent variables, except PATH)
envsec -c myapp.dev shell --no-inherit

# Suppress the startup/exit banner
envsec -c myapp.dev shell --quiet

La variabile ENVSEC_CONTEXT è sempre impostata all'interno della sessione, quindi puoi farci riferimento in script o personalizzazioni del prompt.

Carica i segreti da un file .env

Importa i segreti da un file .env in un contesto.

  • --input, -i — Percorso del file .env di input (default: .env)
  • --force, -f — Sovrascrive i segreti esistenti senza richiedere conferma
  • --batch, -b — Modalità batch: rimanda la persistenza nel database fino all'importazione di tutti i segreti```bash

Import secrets from .env into the context

envsec -c myapp.dev load

Specify a custom input file

envsec -c myapp.dev load --input .env.local

Overwrite existing secrets without warning

envsec -c myapp.dev load --force

root@kitploit:~
Keys are converted from `UPPER_SNAKE_CASE` to `dotted.lowercase` (ad esempio `API_TOKEN` → `api.token`). Se una chiave esiste già, viene saltata con un avviso a meno che non venga specificato `--force` (`-f`).

### Condividi segreti (crittografati con GPG)

Crittografa tutti i segreti da un contesto per un membro del team utilizzando GPG.

- `--encrypt-to` — chiave del destinatario GPG (email, ID chiave o impronta digitale) per cui crittografare
- `--output`, `-o` — Percorso del file di output (default: stdout). Usa `-` per stdout esplicitamente
- `--json` — Usa il formato JSON all'interno del payload crittografato (default: formato `.env`)```bash
# Encrypt all secrets from a context for a team member
envsec -c myapp.dev share --encrypt-to [email protected]

# Save encrypted output to a file
envsec -c myapp.dev share --encrypt-to [email protected] -o secrets.enc

# Use JSON format inside the encrypted payload
envsec -c myapp.dev --json share --encrypt-to [email protected] -o secrets.enc

Il destinatario può decrittare con gpg --decrypt secrets.enc e inviare il risultato a envsec load. Per impostazione predefinita, il payload crittografato utilizza il formato .env (KEY="value"); con --json utilizza un oggetto JSON strutturato. Richiede che GPG sia installato e che la chiave pubblica del destinatario sia nel tuo portachiavi.

Controlla i segreti per la scadenza

Verifica i segreti scaduti o in scadenza e le esportazioni tracciate dei file .env.

  • --within, -w — Mostra i segreti in scadenza entro questa durata (default: 30d). Usa 0d per mostrare solo quelli già scaduti
  • --json — Output in formato JSON```bash

Check for expired or expiring secrets in a context (default window: 30 days)

envsec -c myapp.dev audit

Specify a custom window

envsec -c myapp.dev audit --within 7d

Show only already-expired secrets

envsec -c myapp.dev audit --within 0d

Audit across all contexts (omit --context)

envsec audit

JSON output

envsec -c myapp.dev audit --json

root@kitploit:~
I segreti con una durata `--expires` impostata tramite `envsec add` vengono tracciati nei metadati. Il comando `audit` cerca i segreti già scaduti o che scadranno entro la finestra specificata. I comandi `get` e `list` mostrano anche avvisi di scadenza in linea.

Il comando `audit` traccia anche i file `.env` generati. Ogni volta che `env-file` viene utilizzato, vengono registrati il percorso di output, il contesto e il timestamp. L'output del comando audit include una seconda sezione che elenca questi file. Se un file `.env` tracciato non esiste più sul disco, audit lo rimuove automaticamente dai metadati e segnala la pulizia.

### Genera un segreto casuale

Genera un segreto casuale crittograficamente sicuro, opzionalmente memorizzandolo.

- `<key>` — Nome della chiave segreta (opzionale; omettere per generazione di password standalone)
- `--length`, `-l` — Lunghezza del segreto generato (default: `32`)
- `--prefix`, `-p` — Prefisso da anteporre al segreto generato (es. `sk_`)
- `--expires`, `-e` — Durata di scadenza (es. `30m`, `2h`, `7d`, `4w`, `3mo`, `1y`)
- `--alphanumeric`, `-a` — Usa solo caratteri alfanumerici `[a-zA-Z0-9]` (default)
- `--special`, `-s` — Includi caratteri speciali comuni `[a-zA-Z0-9!@#$%^&*]`
- `--all-chars`, `-A` — Usa tutti i caratteri ASCII stampabili per la massima entropia```bash
# Generate and store a 32-char alphanumeric secret
envsec -c myapp.dev secret api.key

# Custom length and prefix
envsec -c myapp.dev secret api.key --prefix "sk_" --length 48

# Character sets:
#   --alphanumeric (-a)  [a-zA-Z0-9] (default)
#   --special (-s)       [a-zA-Z0-9] + !@#$%^&*
#   --all-chars (-A)     all printable ASCII
envsec -c myapp.dev secret db.password --special --length 64

# With expiry
envsec -c myapp.dev secret api.key --prefix "sk_" -l 48 --expires 90d

# Standalone password generator (no store, just print)
envsec secret --length 32
envsec secret --special --length 64 --prefix "pk_"

Quando sono forniti sia context che key, il valore generato viene memorizzato e stampato. Senza nessuno dei due, il valore grezzo va su stdout — utile per reindirizzare a pbcopy, xclip o altri strumenti.

TUI Interattiva

envsec include un'interfaccia terminale a schermo intero per gestire i segreti in modo interattivo — nessun bisogno di memorizzare comandi.```bash

Launch the TUI

envsec tui

Launch with a pre-selected context

envsec -c myapp.dev tui

root@kitploit:~
La TUI fornisce otto schermate accessibili dal menu principale:

- **Contesti** — sfoglia tutti i contesti, imposta il contesto attivo con `s`, cancella il contesto con `x`, visualizza il conteggio dei segreti, elimina interi contesti
- **Segreti** — elenca i segreti in una tabella, rivela i valori, aggiungi o elimina segreti
- **Aggiungi Segreto** — modulo interattivo con input mascherato e durata opzionale di scadenza
- **Ricerca** — ricerca con pattern glob tra segreti o contesti
- **Comandi Salvati** — elenca, visualizza ed elimina modelli di comandi salvati
- **Audit** — verifica segreti scaduti/in scadenza, rivedi esportazioni tracciate di file `.env`
- **Importa .env** — carica segreti da un file `.env` nel contesto corrente
- **Esporta .env** — esporta segreti in un file `.env` (tracciato per audit)

Scorciatoie da tastiera:

| Tasto | Azione |
|-------|--------|
| `↑` / `↓` | Naviga tra voci di menu e righe della tabella |
| `Enter` | Seleziona / conferma |
| `c` | Apri la vista contesti (menu principale) |
| `s` | Imposta selezionato come contesto attivo (vista contesti) |
| `x` | Cancella contesto attivo (vista contesti) |
| `a` | Aggiungi un nuovo segreto (vista segreti) |
| `d` | Elimina elemento selezionato |
| `r` | Rivela valore segreto (vista dettaglio) |
| `Esc` | Torna indietro / annulla |
| `q` | Esci dalla TUI |

### Diagnostica la tua configurazione

Esegui controlli di integrità per verificare la tua installazione di envsec.

- `--json` — Output in formato JSON per scripting```bash
# Run all health checks
envsec doctor

# JSON output for scripting
envsec --json doctor

Il comando doctor verifica che l'installazione di envsec funzioni correttamente. Controlla:

  • Supporto della piattaforma e versione di Node.js
  • Disponibilità del gestore di credenziali (macOS Keychain, Linux secret-tool, Windows cmdkey)
  • Accesso in lettura/scrittura al keychain
  • Percorso del database, permessi e integrità dello schema
  • Segreti orfani (metadati senza voce nel keychain)
  • Segreti scaduti
  • Variabili d'ambiente (ENVSEC_DB, ENVSEC_CONTEXT)
  • Shell corrente

Completamenti della shell

envsec supporta il completamento dinamico con tab per bash, zsh e fish. I completamenti sono sensibili al contesto: suggeriscono i tuoi nomi di contesto effettivi, le chiavi dei segreti e i nomi dei comandi salvati in tempo reale interrogando il database dei metadati.```bash

Bash (add to ~/.bashrc)

eval "$(envsec --completions bash)"

Zsh (add to ~/.zshrc)

eval "$(envsec --completions zsh)"

Fish (add to ~/.config/fish/config.fish)

envsec --completions fish | source

root@kitploit:~
Ciò che viene completato dinamicamente:
- `--context` / `-c` — elenca tutti i tuoi contesti
- Argomenti della chiave segreta (`get`, `add`, `delete`) — elenca le chiavi per il contesto corrente
- `cmd run` / `cmd delete` — elenca i nomi dei comandi salvati
- `--override-context` / `-o` — elenca i contesti per `cmd run`
- Sottocomandi, flag e scelte statiche (shell, ecc.) sono anch'essi completati

## Confronto

Come si confronta envsec con altri strumenti per la gestione dei segreti di ambiente?

| Caratteristica | envsec | dotenv / dotenvx | CLI 1Password (`op`) |
|---|---|---|---|
| Archiviazione segreti | Archivio credenziali del sistema operativo (Keychain, Secret Service, Credential Manager) | File `.env` su disco (dotenvx aggiunge crittografia) | Cloud vault 1Password |
| Crittografia a riposo | Delegata al sistema operativo (Keychain, GNOME Keyring, DPAPI) | Nessuna (dotenv) / ECIES per file (dotenvx) | AES-256 nel cloud 1Password |
| Segreti su disco | Mai — i valori vanno direttamente nell'archivio credenziali del sistema operativo | Sempre — i file `.env` sono in chiaro di default | Mai localmente (recuperati a runtime dal cloud) |
| Accesso offline | Completo — i segreti sono locali nell'archivio del sistema operativo | Completo — i file sono locali | Richiede rete (elementi memorizzati nella cache disponibili offline nell'app) |
| Account / abbonamento | Nessuno — gratuito, open source, nessuna registrazione | Gratuito (dotenv) / open source gratuito (dotenvx) | Abbonamento a pagamento (da ~$3/mese individuale, ~$8/utente/mese aziendale) |
| Multipiattaforma | macOS, Linux, Windows | Qualsiasi piattaforma con Node.js / qualsiasi runtime (dotenvx) | macOS, Linux, Windows |
| Organizzazione contesti/ambienti | Contesti (es. `myapp.dev`, `stripe.prod`) | File `.env` separati per ambiente | Vault e oggetti |
| Esecuzione comandi con segreti | `envsec run` — interpolazione placeholder + `--inject` variabili d'ambiente | `dotenvx run -- cmd` — inietta da `.env` crittografato | `op run -- cmd` — inietta tramite riferimenti segreti |
| Esportazione in file `.env` | `envsec env-file` (tracciato per audit) | Formato nativo — i file `.env` sono la fonte di verità | `op inject --out-file` |
| Importazione da file `.env` | `envsec load` (con rilevamento conflitti) | N/D — `.env` è l'archivio primario | Creazione manuale di oggetti |
| Esportazione variabili d'ambiente shell | `eval $(envsec env)` — bash, zsh, fish, powershell | `dotenvx run` o `node -r dotenv/config` | `op run --env-file` |
| Sessione shell interattiva | `envsec shell` — subshell con ambito e pulizia automatica | Non integrato | Non integrato |
| Ricerca segreti | Pattern glob su chiavi e contesti | Non integrato | Filtro `op item list --tags/--category` |
| Audit scadenza/rotazione | `envsec audit` — scaduti, in scadenza, file `.env` tracciati | Non integrato | Watchtower (nell'app, non nella CLI) |
| Comandi salvati | `envsec cmd` — salva, elenca, cerca, esegui, elimina | Non integrato | Non integrato |
| Sposta/copia segreti | `envsec move` e `envsec copy` tra contesti | Copia manuale di file | `op item move` tra vault |
| Rinomina segreti | `envsec rename` (preserva valore e metadati) | Modifica manuale del file `.env` | `op item edit` |
| Condivisione crittografata GPG | `envsec share --encrypt-to` | File `.env` crittografati committati in git (dotenvx) | Condivisione vault integrata, provisioning team |
| TUI interattivo | `envsec tui` — interfaccia terminale a schermo intero | Non integrato | Non integrato |
| Diagnostica salute | `envsec doctor` — verifica piattaforma, portachiavi, integrità DB | Non integrato | Non integrato |
| Completamenti shell | Dinamici (contesti, chiavi, comandi) per bash, zsh, fish | Non integrato | Completamenti statici per bash, zsh, fish, powershell |
| SDK / accesso programmatico | `@envsec/sdk` per Node.js / Bun | `require('dotenv').config()` — caso d'uso principale | SDK 1Password (Node.js, Python, Go, ecc.) |
| Team / multiutente | Condivisione GPG (manuale) | Condivisione basata su git con file `.env` crittografati (dotenvx) | Gestione team integrata, RBAC, log di audit |
<!-- | Integrazione CI/CD | CLI standard — funziona ovunque Node.js sia eseguito | `dotenvx run` in qualsiasi pipeline CI | Account di servizio, integrazioni CI/CD native | -->
| Autenticazione biometrica | Eredita i biometrici del sistema operativo (es. sblocco Keychain macOS) | Nessuna | Impronta digitale / Touch ID tramite integrazione app |
| Tracciamento metadati | SQLite (nomi chiave, timestamp — mai valori) | Nessuno | Cronologia oggetti e log di audit basati su cloud |

In breve: dotenv è l'approccio più semplice (file su disco), CLI 1Password è il più ricco di funzionalità per team con sincronizzazione cloud e RBAC, e envsec si colloca nel mezzo — offrendo crittografia nativa del sistema operativo senza account, senza dipendenze cloud e un flusso di lavoro incentrato sugli sviluppatori che va oltre ciò che i file `.env` possono fare.

## Come funziona

I segreti vengono archiviati nell'archivio credenziali nativo del sistema operativo. Il backend viene selezionato automaticamente in base alla piattaforma:

| Sistema operativo | Backend | Strumento / API |
|---|---|---|
| macOS | Portachiavi | CLI `security` |
| Linux | API Secret Service (D-Bus) | `secret-tool` (libsecret) |
| Windows | Gestione credenziali | `cmdkey` + PowerShell (advapi32) |

I metadati (nomi delle chiavi, timestamp) sono conservati in un database SQLite in `~/.envsec/store.sqlite` (configurabile tramite `--db` o `ENVSEC_DB`). Le chiavi devono contenere almeno un separatore punto (es. `service.account`) che corrisponde alla struttura servizio/account dell'archivio credenziali.

## Sicurezza

envsec è costruito attorno a un principio semplice: i tuoi segreti appartengono al tuo sistema operativo, non ai file di configurazione. Ogni decisione progettuale parte da questa base.

### Come envsec protegge i tuoi segreti

**Crittografia nativa del sistema operativo, zero crittografia personalizzata.** I valori segreti vengono archiviati direttamente in macOS Keychain, GNOME Keyring / KDE Wallet o Windows Credential Manager. envsec non inventa mai una propria crittografia — si affida agli archivi credenziali collaudati che il tuo sistema operativo già fornisce, protetti dalla tua sessione utente e (su macOS) dal portachiavi di login.

**Supporto Unicode completo.** I valori segreti possono contenere qualsiasi carattere Unicode, inclusi emoji e lettere accentate. I valori vengono codificati in base64 prima di essere archiviati nell'archivio credenziali del sistema operativo, evitando stranezze di codifica specifiche della piattaforma (es. la CLI `security` di macOS codifica in esadecimale l'output non ASCII). I segreti legacy in testo semplice vengono letti in modo trasparente per la compatibilità con le versioni precedenti.

**I segreti non toccano mai il disco come testo in chiaro.** I valori vanno direttamente dal terminale all'archivio credenziali del sistema operativo. Non vengono mai scritti in file di configurazione, log o archivi intermedi.

**Nessun segreto nell'output del terminale.** I comandi `list` e `search` mostrano solo i nomi delle chiavi — i valori non vengono mai stampati. Questo mantiene i segreti fuori dai buffer di scorrimento, dalle registrazioni dello schermo e dalla portata di curiosi.

**Esecuzione sicura dei comandi.** Il comando `run` inietta i segreti come variabili d'ambiente del processo figlio anziché interpolarli nella stringa di comando. Ciò significa che i valori segreti non compaiono nell'output di `ps` o nella cronologia della shell. Se un segreto referenziato è mancante, il comando viene bloccato completamente — nessuna esecuzione parziale con credenziali incomplete.

**Convalida dell'input e prevenzione dell'iniezione.** I nomi dei contesti vengono convalidati rispetto a un elenco consentito rigoroso (alfanumerici, punti, trattini, underscore) con controlli di path traversal e prototype pollution. Tutte le query SQLite utilizzano istruzioni preparate con parametri vincolati, prevenendo l'iniezione SQL. Gli argomenti PowerShell su Windows vengono escaped per proteggere dall'iniezione di comandi.

**Permessi restrittivi sui file.** La directory dei metadati (`~/.envsec/`) viene creata con permessi `0700` e il database SQLite con `0600`, limitando l'accesso all'utente proprietario.

### Limitazioni note e aree di miglioramento

Crediamo nell'essere trasparenti su ciò che envsec non copre ancora. Questi sono compromessi reali, non bug — e comprenderli ti aiuta a prendere decisioni informate.

**I metadati sono visibili.** Il database SQLite in `~/.envsec/store.sqlite` memorizza nomi di chiavi, nomi di contesti e timestamp — mai valori segreti, ma abbastanza per rivelare *quali* segreti esistono. I modelli di comandi salvati (con segnaposto `{key}`) sono anch'essi memorizzati lì. Se la riservatezza dei metadati è importante per te, assicurati che la tua home directory sia su un volume crittografato.

**Le esportazioni `env-file` sono in chiaro.** Il comando `env-file` scrive i valori segreti in un file `.env` su disco. Questo è intrinsecamente sensibile — tratta il file di output di conseguenza e non committarlo mai nel controllo versione. Consideralo un ponte di comodità, non un meccanismo di archiviazione.

**L'esecuzione della shell comporta rischi intrinseci.** Il comando `run` passa il tuo modello di comando attraverso `/bin/sh` (o `cmd.exe` su Windows). Se il modello stesso proviene da input non fidato, è possibile l'iniezione di shell. Esegui solo modelli di comando che hai scritto tu o di cui ti fidi.

**Nessun controllo di accesso tra contesti.** Qualsiasi processo in esecuzione come utente del sistema operativo può leggere tutti i segreti in tutti i contesti. envsec si affida all'isolamento a livello di sistema operativo — non aggiunge un proprio livello di autorizzazione tra i contesti.

**Ambienti Linux headless.** Su Linux, envsec dipende da una sessione D-Bus attiva e da un demone keyring (es. `gnome-keyring-daemon`). In contenitori o server headless senza sessione grafica, il keyring potrebbe non essere disponibile o potrebbe archiviare segreti con protezione più debole.

**La crittografia dipende dal tuo sistema operativo.** envsec non aggiunge ulteriore crittografia a riposo oltre a quella fornita dall'archivio credenziali nativo. Su sistemi senza crittografia completa del disco, un utente malintenzionato con accesso fisico potrebbe potenzialmente estrarre segreti dal portachiavi. Raccomandiamo di attivare la crittografia completa del disco (FileVault, LUKS, BitLocker) per la massima protezione.

## Sviluppo

### Prerequisiti

- Node.js >= 22
- pnpm

### Configurazione```bash
git clone https://github.com/davidnussio/envsec.git
cd envsec
pnpm install
pnpm run build

Struttura del Progetto```

packages/ cli/ → envsec CLI (published as envsec) sdk/ → Node.js/Bun SDK (published as @envsec/sdk) core/ → Core engine, shared by CLI and SDK (published as @envsec/core) tui/ → Interactive terminal UI (published as @envsec/tui) apps/ website/ → Documentation website

root@kitploit:~
### Comandi comuni```bash
# Build all packages
pnpm run build

# Lint and format check (all packages)
pnpm run check

# Auto-fix lint and formatting
pnpm run fix

# Release (build + changeset publish)
pnpm run release

Esecuzione locale senza installazione

Crea un alias temporaneo per utilizzare la build locale come se fosse installata globalmente:```bash

Bash / Zsh

alias envsec="node $(pwd)/packages/cli/dist/main.js"

Fish

alias envsec "node (pwd)/packages/cli/dist/main.js"

root@kitploit:~
### Testare i completamenti della shell localmente

Dopo aver creato e impostato l'alias, carica i completamenti nella tua sessione corrente:```bash
# Bash
alias envsec="node $(pwd)/packages/cli/dist/main.js"
eval "$(envsec --completions bash)"

# Zsh
alias envsec="node $(pwd)/packages/cli/dist/main.js"
eval "$(envsec --completions zsh)"

# Fish
alias envsec "node (pwd)/packages/cli/dist/main.js"
envsec --completions fish | source

Quindi premi TAB dopo envsec -c per vedere i tuoi contesti, oppure dopo envsec -c myapp.dev get per vedere le chiavi segrete.

Esecuzione dei test

I test di integrazione end-to-end coprono l'intero ciclo di vita della CLI (add, get, list, search, env-file, load, delete, run, cmd, audit, share, completions).```bash

Build first

pnpm run build

macOS / Linux

bash packages/cli/test/e2e-test.sh

Windows (PowerShell)

pwsh packages/cli/test/e2e-test.ps1

root@kitploit:~
CI viene eseguita automaticamente su push/PR verso `main` tramite GitHub Actions, eseguendo `e2e-test.sh` su macOS e Ubuntu, e `e2e-test.ps1` su Windows.

## Licenza

MIT
Scarica lo strumento
PacchettoDescrizionenpm
envsecStrumento CLI per la gestione dei segretinpm
@envsec/sdkSDK Node.js / Bun per caricare segreti a livello di programmazionenpm
@envsec/coreMotore principale — adattatori del deposito OS + database metadatanpm
@envsec/tuiInterfaccia utente terminale interattiva per la gestione dei segretinpm