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_L1Installare 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 SHA256uname -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.zipWindows 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.zipCartelle, 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.txtPreparare 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.txtAttivazione 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 licenseGestione 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.
| Scopo | Integrato | Ambiente | Da 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.txtAlgoritmi 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-keysCrea 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
--sourceo-s: cartella di origine.--outputo-o: percorso di output del.lbx.--master,--master-envo--master-file.- Almeno uno strato:
--layer,--layer-envo--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
extractVerificare 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 $restoreset -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.jsonsource / sourceFolder / sourceFolderPath | --source | Cartella da impacchettare e crittografare. |
output / outputContainerPath | --output | Percorso di output .lbx. |
masterPassword | --master | Password principale inline. |
masterPasswordEnv | --master-env | Leggi la password principale dalla variabile d'ambiente. |
masterPasswordFile | --master-file | Leggi la password principale da un file di testo UTF-8. |
layers[].algorithm + layers[].key | --layer | Aggiungi ALGORITHM=KEY. |
layers[].algorithm + layers[].keyEnv | --layer-env | Aggiungi ALGORITHM=ENV. |
layers[].algorithm + layers[].keyFile | --layer-file | Aggiungi ALGORITHM=FILE. |
compression / compress | --compress | Abilita la compressione. |
padding | --padding | Aggiungi padding casuale crittografato. Unità: B, KB, MB, GB, TB. |
paddingBytes | --padding-bytes | Dimensione del padding in byte grezzi. |
split / splitSize | --split | Dividi l'output in .lbx, .lbx1, .lbx2. |
splitPartSizeBytes | --split-bytes | Dimensione delle parti in byte grezzi. |
destructionPassword | --destruction-password | Password di distruzione Max-only inline. Inserirla successivamente come password principale sovrascrive immediatamente il contenitore. |
destructionPasswordEnv | --destruction-password-env | Leggi la password di distruzione Max-only da una variabile d'ambiente. |
destructionPasswordFile | --destruction-password-file | Leggi la password di distruzione Max-only da un file di testo UTF-8. |
deleteSource / deleteSourceFolderAfterSuccess | --delete-source | Elimina la cartella di origine dopo la creazione manuale riuscita. |
container / containerPath | --container | Container .lbx esistente. |
keys[] | --key | Chiave del layer inline nell'ordine originale. |
keyEnvs[] | --key-env | Chiave di livello dalla variabile ambientale. |
keyFiles[] | --key-file | Chiave 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 OKWindows: 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
$LASTEXITCODELinux: 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/reportsPianificare 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 -e0 2 * * * /usr/bin/flock -n /srv/lockbox/backup.lock /bin/bash /srv/lockbox/backup.sh >> /srv/lockbox/cron.log 2>&1Max: 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.targetsudo 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.jsonRiferimento comandi
| Comando | Scopo | Alias |
|---|---|---|
help | Mostra l'aiuto della console. | --help, -h, ? |
device-id | Stampa l'ID del dispositivo PC per l'emissione della licenza. | deviceid, machine-id |
license | Mostra l'edizione corrente e il percorso della licenza. | license-status, status |
activate | Installa una chiave di licenza legata al dispositivo. | activation |
algorithms | Elenca algoritmi ed edizioni minime. | profiles, list-algorithms |
keygen | Genera chiavi casuali. | generate-key, generate-keys |
create | Crea un contenitore criptato. | encrypt |
open | Estrai il contenitore criptato. | decrypt, extract |
schedule | Gestisci ed esegui attività programmate. | scheduler, scheduled-tasks |
script | Esegui file di automazione JSON. | --script |
Opzioni di creazione
--source, -s | Cartella da impacchettare e crittografare. |
--output, -o | Percorso di output .lbx. |
--master | Password principale inline. |
--master-env | Leggi la password principale dalla variabile d'ambiente. |
--master-file | Leggi la password principale da un file di testo UTF-8. |
--layer | Aggiungi ALGORITHM=KEY. |
--layer-env | Aggiungi ALGORITHM=ENV. |
--layer-file | Aggiungi ALGORITHM=FILE. |
--algorithm, -a | Algoritmo alternativo abbinato a --key, --key-env, o --key-file. |
--compress | Abilita la compressione. |
--no-compress | Disabilita la compressione se impostata precedentemente. |
--padding | Aggiungi padding casuale crittografato. Unità: B, KB, MB, GB, TB. |
--padding-bytes | Dimensione del padding in byte grezzi. |
--split | Dividi l'output in .lbx, .lbx1, .lbx2. |
--split-bytes | Dimensione delle parti in byte grezzi. |
--no-split | Disabilita la divisione se impostata precedentemente. |
--destruction-password | Password di distruzione Max-only inline. Inserirla successivamente come password principale sovrascrive immediatamente il contenitore. |
--destruction-password-env | Leggi la password di distruzione Max-only da una variabile d'ambiente. |
--destruction-password-file | Leggi la password di distruzione Max-only da un file di testo UTF-8. |
--delete-source | Elimina la cartella di origine dopo la creazione manuale riuscita. |
Opzioni di apertura
--container, -c | Container .lbx esistente. |
--output, -o | Cartella estrazione. |
--master, --master-env, --master-file | Sorgente della password principale. |
--key, -k | Chiave del layer inline nell'ordine originale. |
--key-env | Chiave di livello dalla variabile ambientale. |
--key-file | Chiave 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 add | Aggiungi un compito a .lbxjobs cifrato. |
schedule list | Mostra i compiti salvati. |
schedule run | Corri, lavoratore longevo. |
schedule run-once | Esegui i compiti da scadere una volta ed esci. |
schedule status | Leggi l'ultimo stato di esecuzione JSON. |
--tasks, --file | Percorso file del compito criptato. |
--password, --password-env, --password-file | Password per il file dell'attività. |
--state, --status-file | Percorso JSON di stato di runtime. |
--name | Nome del compito per schedule add. |
--frequency, --every | Frequenza dei compiti. |
--start, --start-at | Data/ora di inizio locale. |
--delete-source-contents | Elimina il contenuto originale della cartella sorgente dopo l'esecuzione programmata con successo. |
--poll-seconds | Intervallo 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 -> FailedRisoluzione 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.