OS Layer Secrets: bezpečná capability pre .env, tokeny a runtime konfiguráciu
Každý normálny systém časom narazí na rovnaký problém: niekde musí držať tokeny, heslá, API kľúče, inštalačné tokeny, privátne endpointy alebo bootstrap konfiguráciu.
A presne na toto vznikla capability OS Layer Secrets.
Nie je to veľký enterprise vault. Nie je to cloud služba. Je to malý, skriptovateľný, unixový secrets layer pre lokálny OS layer, ktorý vie pracovať s .env súbormi bezpečnejšie než primitívne source .env.
Čo je OS Layer Secrets
secrets je capability, ktorá rieši čítanie, exportovanie, šifrovanie a dešifrovanie .env súborov v OS layeri.
Vie pracovať s dvomi formátmi:
crypto/crypto.env
crypto/crypto.env.age
Plaintext .env je jednoduchý vývojový režim. Encrypted .env.age je režim, kde sú secrets uložené cez age encryption.
Runtime helper automaticky vie použiť plaintext súbor, alebo ak plaintext neexistuje, pokúsi sa decryptnúť encrypted variant.
Prečo nestačí source .env
Veľa ľudí robí toto:
. .env
Ale to je problém. .env sa tým správa ako shell script. Ak tam niekto dá:
TOKEN=$(rm -rf ~/something)
shell to môže vykonať.
OS Layer Secrets ide inou cestou. .env súbor berie ako dáta, nie ako program.
Takže hodnota:
EVIL=$(touch SHOULD_NOT_EXIST)
ostane len obyčajný text. Nespustí sa.
To je hlavný bezpečnostný rozdiel.
Čo capability vie
Aktuálna verzia poskytuje CLI:
secrets status
secrets list
secrets key init
secrets unlock
secrets lock
secrets get
secrets cat
secrets source
secrets encrypt [--remove-plain]
secrets decrypt [--remove-age]
secrets fix-perms
A runtime knižnicu:
. "$HOME/os_layer/secrets/lib/secrets.sh"
Tá sa používa z ostatných capabilities.
Inicializácia master identity
Najprv treba vytvoriť master identity:
secrets key init
Tento príkaz vytvorí age identity a uloží ju ako:
master.identity.age
Tento súbor je zašifrovaný passphrase. Bez neho a bez passphrase encrypted secrets neobnovíš.
Toto je koreň dôvery celého secrets layeru.
Unlock / lock model
Keď chceš pracovať so šifrovanými secrets, odomkneš master identity:
secrets unlock
Vznikne runtime identity:
secrets/.tmp/unlocked.identity
Tá sa používa na decrypt runtime secrets.
Keď skončíš:
secrets lock
Tým sa unlocked identity zmaže.
Model je jednoduchý:
master.identity.age -> dlhodobý encrypted master key
.tmp/unlocked.identity -> dočasne odomknutý runtime key
*.env.age -> encrypted secret files
Ako získať jednu hodnotu
Napríklad máš:
secrets/crypto/crypto.env
S obsahom:
INSTALL_TOKEN=abc123
API_URL=https://example.local
Hodnotu prečítaš takto:
secrets get crypto/crypto.env INSTALL_TOKEN
Z inej capability:
. "$HOME/os_layer/secrets/lib/secrets.sh"
INSTALL_TOKEN="$(secret_get crypto/crypto.env INSTALL_TOKEN)"
Toto je najbezpečnejší bežný spôsob použitia. Nepotrebuješ eval.
Ako exportovať celé .env
Keď capability potrebuje viac premenných, použiješ:
eval "$(secret_source crypto/crypto.env)"
Dôležité: secret_source nesourcuje .env priamo. Vygeneruje bezpečné exporty:
export INSTALL_TOKEN='abc123'
export API_URL='https://example.local'
Hodnoty sú shell-quotované a názvy premenných musia prejsť validáciou:
[A-Za-z_][A-Za-z0-9_]*
Nevalidné názvy sa ignorujú.
Ako zašifrovať jeden .env
secrets unlock
secrets encrypt crypto/crypto.env
Výsledok:
crypto/crypto.env.age
Ak chceš odstrániť plaintext:
secrets encrypt crypto/crypto.env --remove-plain
Potom ostane iba:
crypto/crypto.env.age
Runtime helper ho vie čítať, pokiaľ je secrets layer odomknutý.
Ako zašifrovať všetko
secrets unlock
secrets encrypt all --remove-plain
Toto nájde všetky .env súbory v secrets capability a vytvorí .env.age varianty.
Je to dobrý príkaz pred commitom alebo pred presunom projektu na stroj, kde nechceš držať plaintext secrets.
Ako dešifrovať späť
secrets unlock
secrets decrypt crypto/crypto.env
Alebo všetko:
secrets decrypt all
Ak chceš odstrániť encrypted variant po dešifrovaní:
secrets decrypt all --remove-age
Status systému
secrets status
Ukáže:
path=...
tmp=...
plain_env=...
encrypted_env=...
age=present/missing
age_keygen=present/missing
master_identity=present/missing
unlock_state=locked/unlocked
A tiež protection matrix:
crypto/crypto.env plain=yes encrypted=yes
remote/t505.env plain=no encrypted=yes
Toto je veľmi užitočné pri audite, lebo hneď vidíš, čo je ešte plaintext a čo už je encrypted.
Zoznam secrets
secrets list
Vypíše plaintext .env a encrypted .env.age súbory.
Oprava permissions
secrets fix-perms
Nastaví:
directories -> 700
files -> 600
Pri secrets je toto baseline. Nie je to náhrada za encryption, ale znižuje to riziko náhodného čítania iným userom/procesom.
Typický runtime pattern
Capability, ktorá potrebuje token, použije:
. "$HOME/os_layer/secrets/lib/secrets.sh"
TOKEN="$(secret_get crypto/crypto.env INSTALL_TOKEN)"
Capability, ktorá potrebuje viac konfigurácie:
. "$HOME/os_layer/secrets/lib/secrets.sh"
eval "$(secret_source crypto/crypto.env)"
Potom môže používať:
echo "$INSTALL_TOKEN"
echo "$API_URL"
Typický operačný flow
Vývoj:
mkdir -p "$HOME/os_layer/secrets/crypto"
cat > "$HOME/os_layer/secrets/crypto/crypto.env" <<'EOF'
INSTALL_TOKEN=abc123
API_URL=https://example.local
EOF
Inicializácia crypto vrstvy:
secrets key init
secrets unlock
Zašifrovanie:
secrets encrypt crypto/crypto.env --remove-plain
Použitie z inej capability:
. "$HOME/os_layer/secrets/lib/secrets.sh"
INSTALL_TOKEN="$(secret_get crypto/crypto.env INSTALL_TOKEN)"
Zamknutie:
secrets lock
Čo je na tom najdôležitejšie
Najväčší rozdiel oproti bežným .env skriptom je bezpečnostný kontrakt:
.env súbor je dáta
.env súbor nie je shell script
secret_get nespúšťa hodnoty
secret_source generuje bezpečné exporty
encrypted runtime číta age súbory cez odomknutú identity
To znamená, že ostatné OS layer capabilities môžu brať secrets jednotným spôsobom bez toho, aby každá riešila vlastné parsovanie, vlastné šifrovanie a vlastné bezpečnostné chyby.
Záver
OS Layer Secrets je malá, unixová, skriptovateľná capability pre lokálny secrets management.
Vie:
- čítať .env ako dáta
- bezpečne získať jednu hodnotu
- bezpečne exportovať premenné
- šifrovať .env cez age
- dešifrovať .env.age späť
- držať master identity za passphrase
- unlocknúť runtime identity len na čas práce
- opraviť permissions
- ukázať stav a protection matrix
Nie je to cloud vault. Je to presne ten typ nízkoúrovňového nástroja, ktorý dáva zmysel v OS layer architektúre: jednoduchý, auditovateľný, shell-friendly a použiteľný z ďalších capabilities.
Toto je základná infraštruktúra pre moment, keď systém musí niečo urobiť sám — poslať email, zavolať API, deploynúť službu, odomknúť vzdialený node alebo vykonať automatizáciu — ale nesmie mať tokeny rozhádzané po skriptoch.
Secrets patria do jednej vrstvy. A táto capability presne tú vrstvu dodáva.