Torna a LockBox

Documentazione LockBox CLI

LockBox CLI è la versione di automazione solo in inglese per la crittografia, estrazione, attivazione, backup crittografati pianificati e flussi di lavoro CI/CD. Utilizza lo stesso modello di licenza vincolata al dispositivo dell'app desktop.

Avvio rapido

Metti LockBox.Cli.exe in una cartella inclusa in PATH, oppure chiamalo tramite percorso completo. Il marcatore --cli è accettato per compatibilità ma non è richiesto nella build solo CLI.

.\LockBox.Cli.exe --help
.\LockBox.Cli.exe device-id
.\LockBox.Cli.exe algorithms
.\LockBox.Cli.exe keygen --count 3

Workflow minimo per creare e aprire:

$env:LBX_MASTER = "use-a-long-master-password"
$env:LBX_L1 = "layer-1-key"

.\LockBox.Cli.exe create `
  --source "D:\Data" `
  --output "E:\Backups\data.lbx" `
  --master-env LBX_MASTER `
  --layer-env AES-128-GCM=LBX_L1

.\LockBox.Cli.exe open `
  --container "E:\Backups\data.lbx" `
  --output "D:\Restore" `
  --master-env LBX_MASTER `
  --key-env LBX_L1

Linux usa gli stessi comandi con percorsi con slash e un binario senza il suffisso .exe:

chmod +x ./LockBox.Cli
./LockBox.Cli --help
./LockBox.Cli device-id
./LockBox.Cli create \
  --source "/srv/data" \
  --output "/backup/data.lbx" \
  --master-env LBX_MASTER \
  --layer-env AES-128-GCM=LBX_L1

Installare e verificare la CLI

Estrai lo ZIP adatto al sistema e al processore. .NET è incluso. Confronta l’hash con SHA256SUMS.txt. Colloca la CLI nel percorso assoluto indicato sotto e verifica guida e licenza con l’account dei backup.

Linux richiede anche le dipendenze native della distribuzione, fra cui ICU e OpenSSL; il .NET incluso non le fornisce. In Windows, i criteri di esecuzione effettivi devono consentire gli script PowerShell.

.NET / Linux · PowerShell / ExecutionPolicy

Expand-Archive -LiteralPath '.\LockBox-Cli-win-x64.zip' -DestinationPath 'C:\Tools\LockBox'
& 'C:\Tools\LockBox\LockBox.Cli.exe' --help
& 'C:\Tools\LockBox\LockBox.Cli.exe' license
Get-FileHash -LiteralPath '.\LockBox-Cli-win-x64.zip' -Algorithm SHA256
uname -m
unzip LockBox-Cli-linux-x64.zip -d ./lockbox-cli
chmod +x ./lockbox-cli/LockBox.Cli
./lockbox-cli/LockBox.Cli --help
./lockbox-cli/LockBox.Cli license
sha256sum LockBox-Cli-linux-x64.zip

SHA256SUMS.txt

Windows x64   -> LockBox-Cli-win-x64.zip
Windows x86   -> LockBox-Cli-win-x86.zip
Windows ARM64 -> LockBox-Cli-win-arm64.zip
Linux x86_64  -> LockBox-Cli-linux-x64.zip
Linux aarch64 -> LockBox-Cli-linux-arm64.zip
Linux armv7l  -> LockBox-Cli-linux-arm.zip

Cartelle, percorsi e spazio

Adatta i percorsi. La cartella sorgente deve essere non vuota e il contenitore deve trovarsi all’esterno. Riutilizzare il nome sostituisce il contenitore e le sue parti. Prevedi spazio temporaneo accanto al contenitore e una copia sorgente per le attività pianificate. Le unità si basano su 1024; il riempimento aggiunge byte.

C:\Tools\LockBox\LockBox.Cli.exe     /opt/lockbox/LockBox.Cli
C:\LockBox\secrets\master.txt       /srv/lockbox/secrets/master.txt
C:\LockBox\secrets\layer1.txt       /srv/lockbox/secrets/layer1.txt
C:\LockBox\backup.ps1               /srv/lockbox/backup.sh
D:\Data\report.csv                 /srv/data/report.csv
E:\Backups\20260910-020000\data.lbx  /backup/20260910-020000/data.lbx
D:\Restore\Data\report.csv         /restore/data/report.csv
& 'C:\Tools\LockBox\LockBox.Cli.exe' create --source 'D:\Data' --output 'E:\Backups\data.lbx' --master-file 'C:\LockBox\secrets\master.txt' --layer-file 'AES-128-GCM=C:\LockBox\secrets\layer1.txt'
/opt/lockbox/LockBox.Cli create --source /srv/data --output /backup/data.lbx --master-file /srv/lockbox/secrets/master.txt --layer-file AES-128-GCM=/srv/lockbox/secrets/layer1.txt

Preparare i file dei segreti

Genera i segreti una sola volta, conservane una copia protetta e limita l’accesso ai file. Gli esempi impediscono di sostituire chiavi esistenti. I file UTF-8 mantengono gli spazi, ma eliminano le interruzioni di riga finali. Per i vecchi backup servono le chiavi originali.

$ErrorActionPreference = 'Stop'
$cli = 'C:\Tools\LockBox\LockBox.Cli.exe'
$secretDir = 'C:\LockBox\secrets'
New-Item -ItemType Directory -Force -Path $secretDir | Out-Null
$files = @('master.txt', 'layer1.txt')
foreach ($name in $files) {
    if (Test-Path -LiteralPath (Join-Path $secretDir $name)) {
        throw "Secret already exists: $name"
    }
}
foreach ($name in $files) {
    $key = & $cli keygen --count 1
    if ($LASTEXITCODE -ne 0) { throw 'Key generation failed' }
    [IO.File]::WriteAllText((Join-Path $secretDir $name), [string]$key, [Text.UTF8Encoding]::new($false))
}
set -eu
umask 077
mkdir -p /srv/lockbox/secrets
test ! -e /srv/lockbox/secrets/master.txt
test ! -e /srv/lockbox/secrets/layer1.txt
set -C
/opt/lockbox/LockBox.Cli keygen --count 1 > /srv/lockbox/secrets/master.txt
/opt/lockbox/LockBox.Cli keygen --count 1 > /srv/lockbox/secrets/layer1.txt

Attivazione e stato della licenza

La chiave di licenza è vincolata all'ID del dispositivo stampato dalla stessa build CLI. Se una licenza viene copiata su un altro PC, LockBox la rifiuta e ritorna alla versione Free.

Windows controlla le posizioni dei dati dell'applicazione LockBox esistenti. Linux memorizza l'attivazione in $XDG_CONFIG_HOME/lockbox/.lockbox.license, poi ~/.config/lockbox/.lockbox.license, con ~/.lockbox/.lockbox.license come fallback.

Ottenere l'ID del dispositivo

.\LockBox.Cli.exe device-id

Controllare l'edizione corrente

.\LockBox.Cli.exe license

Attivare da un file di licenza

.\LockBox.Cli.exe activate --license-file "C:\Licenses\lockbox-license.txt"

Attivare da una variabile d'ambiente

$env:LBX_LICENSE = "LBX-LIC-..."
.\LockBox.Cli.exe activate --license-env LBX_LICENSE

Attivazione inline

L'attivazione inline funziona, ma può trapelare attraverso la cronologia della shell o i log dei processi.

.\LockBox.Cli.exe activate --license "LBX-LIC-..."

Attivazione Linux

export LBX_LICENSE="LBX-LIC-..."
./LockBox.Cli activate --license-env LBX_LICENSE
./LockBox.Cli license

Gestione dei segreti

Preferisci variabili d'ambiente o file. I segreti inline sono utili solo per i test. Le password master e le chiavi dei livelli devono essere conservate: senza di esse il contenitore non può essere aperto.

ScopoIntegratoAmbienteDa file
Password master--master value--master-env ENV--master-file path
Crea chiave del livello--layer ALG=KEY--layer-env ALG=ENV--layer-file ALG=FILE
Apri chiave del livello--key value--key-env ENV--key-file path
Password file programmatore--password value--password-env ENV--password-file path
Password distruzione contenitore--destruction-password value--destruction-password-env ENV--destruction-password-file path
Chiave di licenza--license value--license-env ENV--license-file path

Segreti basati su file

Set-Content -Path ".\master.txt" -Value "master-password" -Encoding UTF8
Set-Content -Path ".\layer1.txt" -Value "layer-key-1" -Encoding UTF8

.\LockBox.Cli.exe create `
  -s "D:\Data" `
  -o "E:\Backups\data.lbx" `
  --master-file ".\master.txt" `
  --layer-file AES-128-GCM=.\layer1.txt

Algoritmi e generazione di chiavi

Usa algorithms per vedere tutti i profili supportati e le edizioni minime. Usa keygen per le chiavi dei livelli.

.\LockBox.Cli.exe algorithms
.\LockBox.Cli.exe keygen
.\LockBox.Cli.exe keygen --count 9
.\LockBox.Cli.exe generate-keys -n 20

Alias dei comandi supportati:

algorithms
list-algorithms
profiles

keygen
generate-key
generate-keys

Crea contenitori

create impacchetta una cartella di origine, applica una compressione e un padding opzionali, cripta il payload attraverso uno o più strati e scrive un contenitore .lbx.

Opzioni obbligatorie

  • --source o -s: cartella di origine.
  • --output o -o: percorso di output del .lbx.
  • --master, --master-env o --master-file.
  • Almeno uno strato: --layer, --layer-env o --layer-file.

Contenitore AES minimale

.\LockBox.Cli.exe create `
  -s "D:\Data" `
  -o "E:\Backups\data.lbx" `
  --master-env LBX_MASTER `
  --layer-env AES-128-GCM=LBX_L1

Contenitore compresso

.\LockBox.Cli.exe create `
  --source "D:\Exports" `
  --output "E:\Backups\exports.lbx" `
  --master-env LBX_MASTER `
  --layer-env AES-256-GCM=LBX_L1 `
  --compress

Padding crittografico

.\LockBox.Cli.exe create `
  -s "D:\Contracts" `
  -o "E:\Backups\contracts.lbx" `
  --master-env LBX_MASTER `
  --layer-env AES-256-GCM=LBX_L1 `
  --padding 2GB

Dividi il contenitore in parti

.\LockBox.Cli.exe create `
  -s "D:\Media" `
  -o "E:\Backups\media.lbx" `
  --master-env LBX_MASTER `
  --layer-env AES-256-GCM=LBX_L1 `
  --split 700MB

La prima parte mantiene .lbx. Le parti aggiuntive usano .lbx1, .lbx2 e così via. Conserva tutte le parti nella stessa cartella.

Esempio Max a nove strati

$env:LBX_MASTER = "use-a-long-master-password"
$env:LBX_L1 = "layer-1-key"
$env:LBX_L2 = "layer-2-key"
$env:LBX_L3 = "layer-3-key"
$env:LBX_L4 = "layer-4-key"
$env:LBX_L5 = "layer-5-key"
$env:LBX_L6 = "layer-6-key"
$env:LBX_L7 = "layer-7-key"
$env:LBX_L8 = "layer-8-key"
$env:LBX_L9 = "layer-9-key"

.\LockBox.Cli.exe create `
  --source "D:\Data" `
  --output "E:\Backups\data-max.lbx" `
  --master-env LBX_MASTER `
  --compress `
  --padding 2GB `
  --split 700MB `
  --layer-env AES-256-GCM=LBX_L1 `
  --layer-env CHACHA20-POLY1305=LBX_L2 `
  --layer-env AES-256-CCM=LBX_L3 `
  --layer-env SERPENT-256-CTR-HMACSHA512=LBX_L4 `
  --layer-env TWOFISH-256-CTR-HMACSHA512=LBX_L5 `
  --layer-env CAMELLIA-256-CTR-HMACSHA512=LBX_L6 `
  --layer-env ARIA-256-CTR-HMACSHA512=LBX_L7 `
  --layer-env AES-256-CBC-HMACSHA512=LBX_L8 `
  --layer-env AES-192-OFB-HMACSHA384=LBX_L9

Sintassi alternativa per algoritmo/chiave

.\LockBox.Cli.exe create `
  -s "D:\Data" `
  -o "E:\Backups\data.lbx" `
  --master-env LBX_MASTER `
  --algorithm AES-128-GCM --key-env LBX_L1 `
  --algorithm AES-128-CTR-HMACSHA256 --key-env LBX_L2

Elimina la cartella di origine dopo una creazione manuale riuscita

.\LockBox.Cli.exe create `
  -s "D:\TempToEncrypt" `
  -o "E:\Backups\temp.lbx" `
  --master-env LBX_MASTER `
  --layer-env AES-256-GCM=LBX_L1 `
  --delete-source

--delete-source elimina la cartella di origine solo dopo che il contenitore è stato creato con successo. Il pianificatore ha un'opzione diversa: --delete-source-contents.

Password di distruzione del contenitore

L'edizione Max può aggiungere una password di distruzione separata a un contenitore. Se successivamente tale password viene inserita come password principale, LockBox sovrascrive immediatamente il contenitore senza conferma. Questo è pensato per scenari di pressione coercitiva. Mantenerla separata dalla vera password principale.

Il comando verifica lo spazio libero su disco, cripta i dati originali del contenitore con un nuovo segreto casuale e AES-256-GCM in un file temporaneo, normalizza il risultato alla dimensione esatta originale, sostituisce il file originale e dimentica il segreto casuale. Per i contenitori divisi, ogni parte .lbx, .lbx1, .lbx2 nella stessa cartella viene sostituita preservando le dimensioni originali delle parti.

Crea con una password di distruzione

$env:LBX_MASTER = "real-master-password"
$env:LBX_L1 = "layer-key-1"
$env:LBX_DESTROY = "pressure-password"

.\LockBox.Cli.exe create `
  --source "D:\Data" `
  --output "E:\Backups\data.lbx" `
  --master-env LBX_MASTER `
  --layer-env AES-256-GCM=LBX_L1 `
  --destruction-password-env LBX_DESTROY

Attiva la distruzione senza chiavi di livello

.\LockBox.Cli.exe open `
  --container "E:\Backups\data.lbx" `
  --output "D:\Restore" `
  --master-env LBX_DESTROY

Attivazione su Linux

export LBX_DESTROY="pressure-password"
./LockBox.Cli open \
  --container "/backup/data.lbx" \
  --output "/restore" \
  --master-env LBX_DESTROY

Dopo la distruzione riuscita, il contenitore non è più un file LockBox valido. La CLI restituisce il codice di uscita 0 perché l'azione di distruzione richiesta è stata completata con successo.

Aprire i contenitori

open estrae un contenitore nella cartella di output. Per l'estrazione normale, le chiavi di livello devono essere passate nello stesso ordine utilizzato durante la creazione. Per un flusso di lavoro con password di distruzione, sono richiesti solo il percorso del contenitore, il percorso di output e la password di distruzione come password principale.

Aprire un contenitore a un livello

.\LockBox.Cli.exe open `
  --container "E:\Backups\data.lbx" `
  --output "D:\Restore" `
  --master-env LBX_MASTER `
  --key-env LBX_L1

Aprire un contenitore diviso

.\LockBox.Cli.exe open `
  -c "E:\Backups\data.lbx" `
  -o "D:\Restore" `
  --master-env LBX_MASTER `
  --key-env LBX_L1

Aprire un contenitore multi-livello

.\LockBox.Cli.exe open `
  -c "E:\Backups\data-max.lbx" `
  -o "D:\Restore" `
  --master-env LBX_MASTER `
  --key-env LBX_L1 `
  --key-env LBX_L2 `
  --key-env LBX_L3 `
  --key-env LBX_L4 `
  --key-env LBX_L5 `
  --key-env LBX_L6 `
  --key-env LBX_L7 `
  --key-env LBX_L8 `
  --key-env LBX_L9

Alias

open
decrypt
extract

Verificare un backup ripristinandolo

Crea un piccolo report.csv di prova. Estrai in una nuova cartella, che conserva al suo interno il nome della sorgente. Mantieni insieme tutte le parti e confronta i file con le sorgenti immutate. L’estrazione richiede spazio temporaneo scrivibile accanto al contenitore. Proteggi anche i file ripristinati in chiaro.

$ErrorActionPreference = 'Stop'
$cli = 'C:\Tools\LockBox\LockBox.Cli.exe'
$container = 'E:\Backups\data.lbx'
$restore = Join-Path 'D:\RestoreChecks' ([guid]::NewGuid().ToString('N'))
& $cli open --container $container --output $restore --master-file 'C:\LockBox\secrets\master.txt' --key-file 'C:\LockBox\secrets\layer1.txt'
if ($LASTEXITCODE -ne 0) { exit $LASTEXITCODE }
$original = (Get-FileHash -LiteralPath 'D:\Data\report.csv' -Algorithm SHA256).Hash
$restored = (Get-FileHash -LiteralPath (Join-Path $restore 'Data\report.csv') -Algorithm SHA256).Hash
if ($original -ne $restored) { throw 'SHA256 mismatch' }
Write-Output $restore
set -eu
umask 077
mkdir -p /restore
restore=$(mktemp -d /restore/check-XXXXXX)
/opt/lockbox/LockBox.Cli open --container /backup/data.lbx --output "$restore" --master-file /srv/lockbox/secrets/master.txt --key-file /srv/lockbox/secrets/layer1.txt
cmp /srv/data/report.csv "$restore/data/report.csv"
sha256sum /srv/data/report.csv "$restore/data/report.csv"

Pianificatore

I comandi del pianificatore sono disponibili nell'edizione Max. Memorizzano tutti i metadati delle attività in un file .lbxjobs criptato, incluso il percorso di origine, il percorso di output, le password, la password di distruzione, le chiavi dei livelli, la compressione, il padding, la divisione, e l'impostazione elimina-contenuti-sorgente.

I lavori pianificati vengono eseguiti solo mentre LockBox.Cli.exe schedule run è in esecuzione. Usa Windows Task Scheduler, Linux systemd, cron, un wrapper di servizio o una sessione console a lunga durata se hai bisogno che il worker si avvii automaticamente dopo il riavvio.

Valori di frequenza

once
30m
hourly
2h
3h
6h
9h
12h
18h
daily
2d
3d
5d
weekly
2w
monthly
2mo
3mo
6mo
9mo
yearly

Aggiungi un'attività di backup giornaliero criptato

$env:LBX_JOBS_PASSWORD = "jobs-file-password"
$env:LBX_MASTER = "master-password"
$env:LBX_L1 = "layer-key-1"
$env:LBX_DESTROY = "pressure-password"

.\LockBox.Cli.exe schedule add `
  --tasks "E:\Backups\jobs.lbxjobs" `
  --password-env LBX_JOBS_PASSWORD `
  --name "Nightly data backup" `
  --frequency daily `
  --start ((Get-Date).AddDays(1).ToString("o")) `
  --source "D:\Data" `
  --output "E:\Backups\nightly-data.lbx" `
  --master-env LBX_MASTER `
  --layer-env AES-256-GCM=LBX_L1 `
  --destruction-password-env LBX_DESTROY `
  --compress

Aggiungi un'attività che elimina il contenuto della cartella sorgente dopo il successo

.\LockBox.Cli.exe schedule add `
  --tasks "E:\Backups\jobs.lbxjobs" `
  --password-env LBX_JOBS_PASSWORD `
  --name "Encrypt outgoing folder" `
  --frequency 30m `
  --start ((Get-Date).AddDays(1).ToString("o")) `
  --source "D:\Outgoing" `
  --output "E:\Backups\outgoing.lbx" `
  --master-env LBX_MASTER `
  --layer-env AES-256-GCM=LBX_L1 `
  --delete-source-contents

Aggiungi un archivio mensile con padding e parti divise

.\LockBox.Cli.exe schedule add `
  --tasks "E:\Backups\jobs.lbxjobs" `
  --password-env LBX_JOBS_PASSWORD `
  --name "Monthly legal archive" `
  --frequency monthly `
  --start ((Get-Date).AddDays(1).ToString("o")) `
  --source "D:\Legal" `
  --output "E:\Archives\legal-monthly.lbx" `
  --master-env LBX_MASTER `
  --layer-env AES-256-GCM=LBX_L1 `
  --compress `
  --padding 4GB `
  --split 2GB

Elenca le attività salvate

.\LockBox.Cli.exe schedule list `
  --tasks "E:\Backups\jobs.lbxjobs" `
  --password-env LBX_JOBS_PASSWORD

Esegui il worker del pianificatore

.\LockBox.Cli.exe schedule run `
  --tasks "E:\Backups\jobs.lbxjobs" `
  --password-env LBX_JOBS_PASSWORD `
  --state "E:\Backups\jobs.status.json" `
  --poll-seconds 30

Esegui le attività dovute una volta e esci

.\LockBox.Cli.exe schedule run-once `
  --tasks "E:\Backups\jobs.lbxjobs" `
  --password-env LBX_JOBS_PASSWORD `
  --state "E:\Backups\jobs.status.json"

Mostra lo stato di esecuzione più recente

.\LockBox.Cli.exe schedule status --state "E:\Backups\jobs.status.json"

I marker di stato sono [OK], [RUNNING] e [FAILED]. Un'attività fallita include la ragione e informa l'utente di contattare il supporto se il problema si ripete.

Script JSON

Usa --script quando un flusso di lavoro ha diversi passaggi. Il runner di script supporta create, open, keygen, algorithms, device-id, license e activate.

Crea e apri in un solo script

{
  "stopOnError": true,
  "commands": [
    {
      "command": "create",
      "source": "D:\\Data",
      "output": "E:\\Backups\\data.lbx",
      "masterPasswordEnv": "LBX_MASTER",
      "destructionPasswordEnv": "LBX_DESTROY",
      "compression": true,
      "padding": "512MB",
      "split": "700MB",
      "layers": [
        { "algorithm": "AES-256-GCM", "keyEnv": "LBX_L1" },
        { "algorithm": "CHACHA20-POLY1305", "keyEnv": "LBX_L2" }
      ]
    },
    {
      "command": "open",
      "container": "E:\\Backups\\data.lbx",
      "output": "D:\\Restore",
      "masterPasswordEnv": "LBX_MASTER",
      "keyEnvs": [ "LBX_L1", "LBX_L2" ]
    }
  ]
}
.\LockBox.Cli.exe --script ".\backup.lockbox.json"

Continua dopo un passaggio fallito

{
  "stopOnError": false,
  "commands": [
    { "command": "license" },
    { "command": "algorithms" },
    {
      "command": "create",
      "source": "D:\\BuildOutput",
      "output": "E:\\Artifacts\\build.lbx",
      "masterPasswordEnv": "LBX_MASTER",
      "layers": [
        { "algorithm": "AES-128-GCM", "keyEnv": "LBX_L1" }
      ]
    }
  ]
}

Attiva dallo script

{
  "commands": [
    {
      "command": "activate",
      "licenseKeyFile": "C:\\Licenses\\lockbox-license.txt"
    },
    { "command": "license" }
  ]
}

Campi JSON e regole di esecuzione

La tabella associa campi create e array di chiavi open alle opzioni CLI. I percorsi relativi partono dalla directory di lavoro del processo; variabili e date non vengono sostituite. Usa una sorgente di segreto per campo. open legge keys, poi keyEnvs, poi keyFiles. Preferisci stopOnError: true; con false un successo successivo può nascondere un errore. I comandi del pianificatore non sono supportati negli script JSON.

{
  "stopOnError": true,
  "commands": [
    {
      "command": "create",
      "source": "/srv/data",
      "output": "/backup/data.lbx",
      "masterPasswordFile": "/srv/lockbox/secrets/master.txt",
      "layers": [
        { "algorithm": "AES-128-GCM", "keyFile": "/srv/lockbox/secrets/layer1.txt" }
      ]
    },
    {
      "command": "open",
      "container": "/backup/data.lbx",
      "output": "/restore/check",
      "masterPasswordFile": "/srv/lockbox/secrets/master.txt",
      "keyFiles": ["/srv/lockbox/secrets/layer1.txt"]
    }
  ]
}
/opt/lockbox/LockBox.Cli --quiet script /srv/lockbox/backup.lockbox.json
source / sourceFolder / sourceFolderPath--sourceCartella da impacchettare e crittografare.
output / outputContainerPath--outputPercorso di output .lbx.
masterPassword--masterPassword principale inline.
masterPasswordEnv--master-envLeggi la password principale dalla variabile d'ambiente.
masterPasswordFile--master-fileLeggi la password principale da un file di testo UTF-8.
layers[].algorithm + layers[].key--layerAggiungi ALGORITHM=KEY.
layers[].algorithm + layers[].keyEnv--layer-envAggiungi ALGORITHM=ENV.
layers[].algorithm + layers[].keyFile--layer-fileAggiungi ALGORITHM=FILE.
compression / compress--compressAbilita la compressione.
padding--paddingAggiungi padding casuale crittografato. Unità: B, KB, MB, GB, TB.
paddingBytes--padding-bytesDimensione del padding in byte grezzi.
split / splitSize--splitDividi l'output in .lbx, .lbx1, .lbx2.
splitPartSizeBytes--split-bytesDimensione delle parti in byte grezzi.
destructionPassword--destruction-passwordPassword di distruzione Max-only inline. Inserirla successivamente come password principale sovrascrive immediatamente il contenitore.
destructionPasswordEnv--destruction-password-envLeggi la password di distruzione Max-only da una variabile d'ambiente.
destructionPasswordFile--destruction-password-fileLeggi la password di distruzione Max-only da un file di testo UTF-8.
deleteSource / deleteSourceFolderAfterSuccess--delete-sourceElimina la cartella di origine dopo la creazione manuale riuscita.
container / containerPath--containerContainer .lbx esistente.
keys[]--keyChiave del layer inline nell'ordine originale.
keyEnvs[]--key-envChiave di livello dalla variabile ambientale.
keyFiles[]--key-fileChiave di livello dal file di testo UTF-8.

Ricette di automazione

Backup del dump del database criptato

$stamp = Get-Date -Format "yyyyMMdd-HHmmss"
$dump = "D:\DbDumps\$stamp"
New-Item -ItemType Directory -Path $dump | Out-Null

Copy-Item "D:\DatabaseExports\*" $dump -Recurse

.\LockBox.Cli.exe create `
  -s $dump `
  -o "E:\Backups\db-$stamp.lbx" `
  --master-env LBX_MASTER `
  --layer-env AES-256-GCM=LBX_L1 `
  --compress `
  --padding 512MB

Protezione degli artifact CI

.\LockBox.Cli.exe create `
  --source "$env:BUILD_ARTIFACTSTAGINGDIRECTORY" `
  --output "$env:AGENT_TEMPDIRECTORY\protected-artifacts.lbx" `
  --master-env LBX_MASTER `
  --layer-env AES-128-GCM=LBX_L1

Trasferimento sicuro al partner

.\LockBox.Cli.exe create `
  -s "D:\PartnerPackage" `
  -o "E:\Transfer\partner-package.lbx" `
  --master-env LBX_MASTER `
  --layer-env AES-256-GCM=LBX_L1 `
  --layer-env CHACHA20-POLY1305=LBX_L2 `
  --compress `
  --split 1GB

Archivio a lungo termine

.\LockBox.Cli.exe create `
  -s "D:\Records\2026" `
  -o "E:\ColdStorage\records-2026.lbx" `
  --master-file "C:\Secrets\records-master.txt" `
  --layer-file AES-256-GCM=C:\Secrets\records-layer1.txt `
  --layer-file SERPENT-256-CTR-HMACSHA512=C:\Secrets\records-layer2.txt `
  --compress `
  --padding 8GB `
  --split 4GB

Esempio di file batch

@echo off
set LBX_MASTER=master-password
set LBX_L1=layer-key-1

LockBox.Cli.exe create ^
  --source "D:\Data" ^
  --output "E:\Backups\data.lbx" ^
  --master-env LBX_MASTER ^
  --layer-env AES-128-GCM=LBX_L1

if errorlevel 1 exit /b %errorlevel%
echo OK

Windows: backup di più cartelle

Salva lo script nel percorso indicato. Crea un contenitore con nome univoco e un registro per ogni sorgente, si ferma in caso di errore e conserva il codice di uscita CLI. AES-128-GCM funziona con Free; compressione e suddivisione richiedono Pro o Max.

C:\LockBox\backup.ps1

param(
    [string[]]$Source = @('D:\Data'),
    [string]$Destination = 'E:\Backups'
)
$ErrorActionPreference = 'Stop'
$cli = 'C:\Tools\LockBox\LockBox.Cli.exe'
$secretDir = 'C:\LockBox\secrets'
try {
    foreach ($folder in $Source) {
        $sourcePath = (Resolve-Path -LiteralPath $folder).Path
        $stamp = (Get-Date).ToUniversalTime().ToString('yyyyMMdd-HHmmss-fff')
        $runId = [guid]::NewGuid().ToString('N')
        $runDir = Join-Path $Destination "$stamp-$runId"
        New-Item -ItemType Directory -Path $runDir | Out-Null
        $container = Join-Path $runDir 'data.lbx'
        $log = Join-Path $runDir 'create.log'
        $cliArgs = @(
            '--quiet', 'create', '--source', $sourcePath, '--output', $container,
            '--master-file', (Join-Path $secretDir 'master.txt'),
            '--layer-file', ('AES-128-GCM=' + (Join-Path $secretDir 'layer1.txt'))
        )
        $ErrorActionPreference = 'Continue'
        & $cli @cliArgs > $log 2>&1
        $result = $LASTEXITCODE
        $ErrorActionPreference = 'Stop'
        if ($result -ne 0) {
            Get-Content -LiteralPath $log
            exit $result
        }
        if (-not (Test-Path -LiteralPath $container -PathType Leaf)) {
            throw "Container missing: $container"
        }
        Write-Output $container
    }
    exit 0
} catch {
    Write-Error $_ -ErrorAction Continue
    exit 1
}
& 'C:\LockBox\backup.ps1' -Source 'D:\Data', 'D:\Reports' -Destination 'E:\Backups'
# 0 = success; 1 = runtime error; 2 = usage error; 3 = edition restriction
$LASTEXITCODE

Linux: backup non presidiati

Salva lo script Bash con terminazioni LF. Prepara CLI e segreti nei percorsi indicati e passa le cartelle sorgenti come argomenti. Ogni esecuzione ha una propria directory. Gli errori lasciano un registro e restituiscono un codice diverso da zero; le sorgenti rimangono intatte.

/srv/lockbox/backup.sh

#!/bin/bash
set -eu
umask 077
cli=/opt/lockbox/LockBox.Cli
secret_dir=/srv/lockbox/secrets
backup_root=/backup
mkdir -p "$backup_root"
if [ "$#" -eq 0 ]; then
    set -- /srv/data
fi
for source in "$@"; do
    run_dir=$(mktemp -d "$backup_root/$(date -u +%Y%m%d-%H%M%S)-XXXXXX")
    container="$run_dir/data.lbx"
    log="$run_dir/create.log"
    "$cli" --quiet create \
        --source "$source" \
        --output "$container" \
        --master-file "$secret_dir/master.txt" \
        --layer-file "AES-128-GCM=$secret_dir/layer1.txt" > "$log" 2>&1 || {
        result=$?
        cat "$log" >&2
        exit "$result"
    }
    test -s "$container"
    printf '%s\n' "$container"
done
/bin/bash /srv/lockbox/backup.sh /srv/data /srv/reports

Pianificare con il sistema operativo

Queste attività avviano gli script precedenti; questo uso di create non richiede Max. La registrazione Windows richiede un utente connesso; configura l’esecuzione senza accesso nell’Utilità di pianificazione se necessario. Aggiungi cron al crontab dell’utente dei backup dopo aver verificato flock. Entrambi gli esempi partono alle 02:00 locali e impediscono esecuzioni pianificate sovrapposte. Controlla i permessi e prova manualmente.

Windows

$action = New-ScheduledTaskAction -Execute 'powershell.exe' -Argument '-NoProfile -NonInteractive -File "C:\LockBox\backup.ps1"' -WorkingDirectory 'C:\LockBox'
$trigger = New-ScheduledTaskTrigger -Daily -At '02:00'
$settings = New-ScheduledTaskSettingsSet -StartWhenAvailable -MultipleInstances IgnoreNew -ExecutionTimeLimit ([TimeSpan]::Zero)
$principal = New-ScheduledTaskPrincipal -UserId ([Security.Principal.WindowsIdentity]::GetCurrent().Name) -LogonType Interactive
Register-ScheduledTask -TaskName 'LockBox backup' -Action $action -Trigger $trigger -Settings $settings -Principal $principal
Start-ScheduledTask -TaskName 'LockBox backup'
Get-ScheduledTaskInfo -TaskName 'LockBox backup'

New-ScheduledTaskSettingsSet · New-ScheduledTaskPrincipal

Linux: cron

crontab -e
0 2 * * * /usr/bin/flock -n /srv/lockbox/backup.lock /bin/bash /srv/lockbox/backup.sh >> /srv/lockbox/cron.log 2>&1

crontab(5)

Max: gestire il pianificatore

Crea l’account di servizio lockbox con i permessi necessari, attiva Max per tale account e prepara il file password UTF-8 separato jobs.txt. add aggiunge, non aggiorna: usalo una volta per attività. Mantieni un processo per file di attività e riavvialo dopo le modifiche. Il JSON di stato non ripristina la cronologia: le ricorrenze scadute vengono saltate, un’attività once scaduta può ripartire. Per avvii periodici del sistema usa create anziché ripetere run-once. Il pianificatore riutilizza il nome di destinazione.

/opt/lockbox/LockBox.Cli schedule add \
  --tasks /srv/lockbox/jobs.lbxjobs \
  --password-file /srv/lockbox/secrets/jobs.txt \
  --name nightly-data --frequency daily \
  --start "$(date -d 'tomorrow 02:00' --iso-8601=seconds)" \
  --source /srv/data --output /backup/nightly-data.lbx \
  --master-file /srv/lockbox/secrets/master.txt \
  --layer-file AES-128-GCM=/srv/lockbox/secrets/layer1.txt

/opt/lockbox/LockBox.Cli schedule list --tasks /srv/lockbox/jobs.lbxjobs --password-file /srv/lockbox/secrets/jobs.txt

/etc/systemd/system/lockbox-scheduler.service

[Unit]
Description=LockBox scheduler
After=local-fs.target
RequiresMountsFor=/srv/data /srv/lockbox /backup

[Service]
Type=simple
User=lockbox
WorkingDirectory=/srv/lockbox
UMask=0077
ExecStart=/opt/lockbox/LockBox.Cli schedule run --tasks /srv/lockbox/jobs.lbxjobs --password-file /srv/lockbox/secrets/jobs.txt --state /srv/lockbox/jobs.status.json --poll-seconds 30
Restart=on-failure
RestartSec=10
KillSignal=SIGINT
TimeoutStopSec=300

[Install]
WantedBy=multi-user.target
sudo systemctl daemon-reload
sudo systemctl enable --now lockbox-scheduler.service
systemctl status lockbox-scheduler.service
journalctl -u lockbox-scheduler.service -n 50 --no-pager
/opt/lockbox/LockBox.Cli schedule status --state /srv/lockbox/jobs.status.json

systemd.service

Riferimento comandi

ComandoScopoAlias
helpMostra l'aiuto della console.--help, -h, ?
device-idStampa l'ID del dispositivo PC per l'emissione della licenza.deviceid, machine-id
licenseMostra l'edizione corrente e il percorso della licenza.license-status, status
activateInstalla una chiave di licenza legata al dispositivo.activation
algorithmsElenca algoritmi ed edizioni minime.profiles, list-algorithms
keygenGenera chiavi casuali.generate-key, generate-keys
createCrea un contenitore criptato.encrypt
openEstrai il contenitore criptato.decrypt, extract
scheduleGestisci ed esegui attività programmate.scheduler, scheduled-tasks
scriptEsegui file di automazione JSON.--script

Opzioni di creazione

--source, -sCartella da impacchettare e crittografare.
--output, -oPercorso di output .lbx.
--masterPassword principale inline.
--master-envLeggi la password principale dalla variabile d'ambiente.
--master-fileLeggi la password principale da un file di testo UTF-8.
--layerAggiungi ALGORITHM=KEY.
--layer-envAggiungi ALGORITHM=ENV.
--layer-fileAggiungi ALGORITHM=FILE.
--algorithm, -aAlgoritmo alternativo abbinato a --key, --key-env, o --key-file.
--compressAbilita la compressione.
--no-compressDisabilita la compressione se impostata precedentemente.
--paddingAggiungi padding casuale crittografato. Unità: B, KB, MB, GB, TB.
--padding-bytesDimensione del padding in byte grezzi.
--splitDividi l'output in .lbx, .lbx1, .lbx2.
--split-bytesDimensione delle parti in byte grezzi.
--no-splitDisabilita la divisione se impostata precedentemente.
--destruction-passwordPassword di distruzione Max-only inline. Inserirla successivamente come password principale sovrascrive immediatamente il contenitore.
--destruction-password-envLeggi la password di distruzione Max-only da una variabile d'ambiente.
--destruction-password-fileLeggi la password di distruzione Max-only da un file di testo UTF-8.
--delete-sourceElimina la cartella di origine dopo la creazione manuale riuscita.

Opzioni di apertura

--container, -cContainer .lbx esistente.
--output, -oCartella estrazione.
--master, --master-env, --master-fileSorgente della password principale.
--key, -kChiave del layer inline nell'ordine originale.
--key-envChiave di livello dalla variabile ambientale.
--key-fileChiave di livello dal file di testo UTF-8.
Consentito per flussi di lavoro di distruzione-password. L'estrazione normale fallisce dopo la lettura dei metadati se mancano le chiavi necessarie.

Opzioni del pianificatore

schedule addAggiungi un compito a .lbxjobs cifrato.
schedule listMostra i compiti salvati.
schedule runCorri, lavoratore longevo.
schedule run-onceEsegui i compiti da scadere una volta ed esci.
schedule statusLeggi l'ultimo stato di esecuzione JSON.
--tasks, --filePercorso file del compito criptato.
--password, --password-env, --password-filePassword per il file dell'attività.
--state, --status-filePercorso JSON di stato di runtime.
--nameNome del compito per schedule add.
--frequency, --everyFrequenza dei compiti.
--start, --start-atData/ora di inizio locale.
--delete-source-contentsElimina il contenuto originale della cartella sorgente dopo l'esecuzione programmata con successo.
--poll-secondsIntervallo di sondaggio per i lavoratori per schedule run.

--language e --lang scelgono la lingua della console; --quiet nasconde l’avanzamento ordinario, mentre gli errori restano nel flusso di errore standard. Ctrl+C richiede l’annullamento e restituisce 1. Il codice 2 indica sintassi non valida; 3 indica una funzione di creazione non disponibile nell’edizione attuale. Anche l’attivazione intenzionale della password di distruzione restituisce 0: questo codice da solo non prova l’estrazione dei file. Verifica il risultato atteso prima dei successivi passaggi automatici.

Codici di uscita e monitoraggio

schedule run-once può restituire zero anche con attività fallite; schedule status anche senza stato. Controlla savedAt, lastSuccessAt e lastError; [OK] può significare solo Ready. Il monitor presuppone backup giornalieri, controlli ogni 30 secondi e un successo nelle ultime 26 ore. Adatta le soglie. Gli stati JSON sono numerici; --quiet sopprime l’output ordinario di create/open riusciti.

$ErrorActionPreference = 'Stop'
try {
    $status = Get-Content -LiteralPath 'E:\Backups\jobs.status.json' -Raw | ConvertFrom-Json
    if (@($status.tasks).Count -eq 0) { throw 'No tasks in status file' }
    if ([DateTimeOffset]$status.savedAt -lt [DateTimeOffset]::Now.AddMinutes(-2)) {
        throw 'Worker status is stale'
    }
    foreach ($task in $status.tasks) {
        if ($task.state -eq 3 -or $task.lastError) { throw "Task failed: $($task.name)" }
        if (-not $task.lastSuccessAt -or [DateTimeOffset]$task.lastSuccessAt -lt [DateTimeOffset]::Now.AddHours(-26)) {
            throw "No recent successful backup: $($task.name)"
        }
    }
    exit 0
} catch {
    Write-Error $_ -ErrorAction Continue
    exit 1
}
0 -> Ready
1 -> Running
2 -> Completed
3 -> Failed

Risoluzione dei problemi

Perché ricevo il codice di uscita 3?

L'edizione corrente non consente la funzione richiesta: troppi livelli, compressione, padding crittografico, divisione, scheduler o un algoritmo più potente.

Perché l'estrazione fallisce con un errore di tag di autenticazione?

La password principale, la chiave del livello, l'ordine dei livelli o il file del contenitore sono errati. Per i contenitori divisi, verifica anche che ogni parte sia presente nella stessa cartella.

Perché lo scheduler non viene eseguito dopo aver chiuso la console?

schedule run è il processo del worker. Lascialo aperto, oppure avvialo tramite Windows Task Scheduler o un wrapper di servizio.

Perché schedule add fallisce immediatamente?

Lo scheduler convalida licenza, cartella di origine, percorso di output, algoritmi, password e spazio su disco disponibile prima di salvare il task.

Posso memorizzare le password dello scheduler all'interno del file .lbxjobs?

Sì. Il file .lbxjobs è criptato con la password del file dello scheduler e memorizza tutti i metadati del task, incluse password di crittografia e chiavi dei livelli.

Cosa succede se una esecuzione pianificata si sovrappone alla precedente?

Il nuovo evento viene ignorato, il task riporta uno stato di fallimento con spiegazione, e le esecuzioni future continuano dopo il completamento della esecuzione attiva.

Come posso evitare che i segreti finiscano nella cronologia della shell?

Usa --master-env, --master-file, --layer-env, --layer-file, --destruction-password-env, --destruction-password-file, --password-env e --password-file.