Add cp, folder mv, get -r, and unlock/lock to remember the key
Filesystem basics: mv now moves folders as well as files, and like mv(1) a NEW ending in / or naming an existing folder means into it. cp copies a file, or a folder with -r, by writing new records that share the original's objects, so it is instant and takes no space; rm already keeps objects another record still uses. New records go first, so an interrupted move leaves both names, never neither. get -r extracts a folder, keeping its structure. vault unlock [--for 5m] checks the passphrase and starts the binary again as a hidden __agent process, handing it the suite ID and seed over a pipe. The agent keeps them in mlocked memory, with core dumps off and (on Linux) PR_SET_DUMPABLE cleared, serves them on a Unix socket in a 0700 per-user directory whose owner is checked on every use, and wipes them and exits at a hard deadline or on vault lock. Commands ask it first unless VAULT_PASSPHRASE is set, and genkey stops any agent left for that path. Guide, man pages (new vault-cp, vault-unlock, vault-lock), README and screenshots updated; the guide's error table is split so it fits.
This commit is contained in:
@@ -56,10 +56,16 @@ vault list # every file, all the way down, full names
|
||||
vault list work # everything under work/
|
||||
vault get work/2026/report.pdf # writes ./report.pdf
|
||||
vault get report.pdf -o copy.pdf
|
||||
vault get -r work # a whole folder, into ./work
|
||||
vault mv report.pdf old/report.pdf
|
||||
vault mv report.pdf old/ # the same: into a folder, like mv(1)
|
||||
vault mv work archive/work # folders move too
|
||||
vault cp -r work work-backup # instant; copies share their encrypted data
|
||||
vault rm old/report.pdf
|
||||
vault rm -r old # a whole folder; lists it and asks first
|
||||
vault rm -rf old # the same, without asking
|
||||
vault unlock # remember the key for 5 minutes (--for 30m)
|
||||
vault lock # forget it now
|
||||
```
|
||||
|
||||
Commands that change the vault take an exclusive lock on `DIR/.lock`, and
|
||||
@@ -77,6 +83,16 @@ existing file and writes nothing until the whole object has authenticated.
|
||||
The passphrase is read from the terminal, or from `$VAULT_PASSPHRASE` for
|
||||
scripts.
|
||||
|
||||
`vault unlock` asks once, then starts a helper process, like `ssh-agent`,
|
||||
that holds the unlocked key in memory until a hard deadline (5 minutes by
|
||||
default) or `vault lock`. Until then commands skip the prompt, unless
|
||||
`$VAULT_PASSPHRASE` is set, which always wins. The key reaches the helper
|
||||
over a pipe and never touches the disk; the helper's memory is locked
|
||||
against swapping, it cannot be core-dumped (or, on Linux, debugged), and it
|
||||
answers only on a socket in a directory private to your user. While it is
|
||||
unlocked, anything running as you can use the vault, decoy or not, so lock
|
||||
before handing the machine over.
|
||||
|
||||
## Decoy passphrase
|
||||
|
||||
`vault genkey` offers an optional second passphrase. In scripts, set
|
||||
|
||||
Reference in New Issue
Block a user