WvdS Vault
Vault je edino mesto za skrivnosti upravljavca te družine paketov: shranjene šifrirano, z datumom poteka, rotacijo prek predaje in zapisnikom dostopov. Brez njega dostopni podatki ležijo na toliko mestih, kolikor je paketov. Paket je namenjen skrbnikom, ki morajo skrivnosti vnašati, menjavati in dokazovati njihovo uporabo.
Prvi koraki
Hitri začetek: shranite prvo skrivnost in se sklicujte nanjo — najkrajša pot do prvega rezultata, v treh korakih.
Preverite pogoje → Določite vir ključa → Izberite shemo → Dokažite dostope
Pogosta opravila
| Kaj želite | Za koga | Kje to storite | Navodila |
|---|---|---|---|
| vnesti ali spremeniti skrivnost | uprava | Uprava > Trezor | Pet shem |
| načrtno zamenjati skrivnost | uprava | Uprava > Trezor | Rotacija |
| zamenjati vir ključa | uprava | – | Zamenjava vira ključa |
| dokazati, kdo je kdaj dostopal | uprava | Uprava > Trezor | Zapisnik dostopov |
| razumeti drugi dejavnik pred dostopom | uprava | – | Drugi dejavnik |
| vedeti, česa trezor ne opravlja | uprava | – | Česa trezor ne opravlja |
Namen
Eno mesto za skrivnosti upravljavca te zbirke: shranjene šifrirano, z datumom poteka, rotacijo
prek predaje in zapisnikom dostopov. Brez njega dostopni podatki ležijo na toliko mestih, kolikor
je vtičnikov, v toliko oblikah, kolikor so si jih izmislili njihovi avtorji — in vsaj ena od njih
je čisto besedilo v conf/local.php.
Prijavljena storitev (glej Core): vault.secrets. Vnosi ležijo prek Storage v
data/dwdo/.
Česa trezor izrecno ne opravlja
Meja stoji spredaj, ker je pri trezorju najpomembnejši podatek.
Pri privzetem viru ključa salt se glavni ključ izpelje iz instančne soli wikija. Ta sol
leži pod data/meta/ — isti veji kot podatkovna zbirka trezorja pod data/dwdo/.
data/ vsebuje ključ in šifrirano
besedilo skupaj. Kdor ima ta arhiv, doseže skrivnosti. Pred tem ta vtičnik ne varuje.
Pred čim varuje, je vse na tej strani: stran, ki je izdala preveč, preširoko nastavljena pravica do datoteke, vtičnik, ki beleži lastno konfiguracijo, podatkovna zbirka, izročena razvijalcu.
Ta razred izpostavljenosti je mogoče povsem zapustiti z izbiro drugega vira ključa — glej
Konfiguracija. env in file postavita ključ zunaj data/ in s tem zunaj varnostne
kopije wikija.
Pet shem, ena odločitev upravljavca
Vtičnik, ki potrebuje geslo, ne dobi vrednosti, temveč napotilo. Kateri vir uporablja namestitev, s tem odloči upravljavec in ne avtor vsakega posameznega vtičnika.
| Napotilo | Pomen |
|---|---|
vault:{oznaka} | Vnos iz tega trezorja |
env:{ime} | Okoljska spremenljivka |
file:{pot} | Datoteka pod imenikom, nastavljenim v file_root |
enc:… | Vrednost, shranjena neposredno šifrirano |
plain:… | Čisto besedilo, izrecno označeno kot tako |
Razreši se iz lastnega vtičnika prek SecretRef; izid razlikuje dva primera, ki ju ni dovoljeno
zamešati:
| Izid | Pomen |
|---|---|
null | nič ni bilo nastavljeno |
SecretRefException | nekaj je bilo nastavljeno in se ni dalo unovčiti |
Konfiguracija
| Nastavitev | Privzeto | Pomen |
|---|---|---|
keysource | salt | Izvor glavnega ključa: salt, env ali file |
keysource_ref | prazno | Ime spremenljivke za env, pot datoteke za file; pri salt brez učinka |
file_root | prazno | Korenski imenik, v katerem morajo ostati napotila file:. Prazno shemo povsem izklopi |
log_page_size | 100 | Vrstic na stran v zapisniku dostopov |
log_keep_days | 365 | Starost, od katere zapisi dostopov potečejo; 0 jih ohrani trajno |
file_root je privzeto prazen in s tem zaprt ob odpovedi. Napotilo je konfiguracija, ki jo
dostavi upravljavec; brez korena, ki ga zapre, bi bil file: orodje za branje poljubnih datotek
v preobleki skrivnosti.
salt je privzeti, ker ne potrebuje nastavitve — in je najšibkejši od treh. env in
file je oba mogoče prekopirati na drug stroj in drug operacijski sistem. Prav ta zahteva
izključuje na stroj vezane hrambe (DPAPI, TPM, obesek za ključe): trezor, katerega ključ ne more
zapustiti računalnika, je po odpovedi stroja nepovrnljiv — varnostna kopija obstaja in je
neberljiva.
Zamenjava vira ključa
Zamenjava je podprta in sama po sebi nenevarna: vsaka vrednost nosi prstni odtis ključa, pod katerim je bila šifrirana, nikoli ključa samega. Obstoječi vnosi se zato še naprej dešifrirajo, novi zapisi pa uporabljajo novi vir.
Vrstni red je zavezujoč:
- Spremenite nastavitev.
- Na upravnem zaslonu izvedite ponovno šifriranje.
- Šele nato odstranite staro ključno gradivo.
Zaslon prek keyUsage() javi, koliko vnosov še leži pod starim prstnim odtisom. To so natanko
tisti, ki bi ob prezgodnji odstranitvi postali neberljivi.
Rotacija: dva predala, štirje koraki
Vnos ima dva predala. Nova vrednost se najprej pripravi in pri tem ničesar ne preklopi; šele prevzem jo naredi za veljavno vrednost.
stage()— pripraviti novo vrednost, tekoče delovanje še naprej uporablja staropromote()— pripravljeno vrednost narediti za veljavno
Zapisnik dostopov
Za vsako branje, pisanje in prevzem ena vrstica z izvajalcem, vnosom, opravilom in izidom — in nikoli vrednost. To je razlika med trezorjem in šifrirano datoteko.
Storitev vault.secrets izdaja izključno branje (read(), has()) in veže izvajalca.
Vtičnik, ki potrebuje geslo, s tem ne more niti rotirati nobenega niti branja pripisati komu
drugemu.
Pospravljanje teče prek izvajanja opravil indekserja, torej pri običajnih klicih strani. Na wikiju brez prometa zapisi zato preprosto ostanejo.
Drugi dejavnik pred vsakim dostopom do skrivnega gradiva
Zavarovano prek Identity Plugin Contract v1 (opis pogodbe): most
do=wkvault_stepup s trdno vgrajenim seznamom kategorij.
| Kategorija | Velja za |
|---|---|
create | Ustvariti vnos |
rotate | Pripraviti vrednost |
delete | Izbrisati vnos |
rekey | Zamenjati vir ključa in vse na novo šifrirati |
Preverja se dvakrat — pri branju, ko se zaslon riše, in znova ob pošiljanju — in v obeh
primerih dodatno k seznamu dostopov DokuWikija, nikoli namesto njega. Brez wkidentity se
paket vede nespremenjeno.
Most nikoli ne sprejme zahteve, ki jo dostavi klicatelj, temveč le ime z lastnega seznama; neznano ime da zavrnitev, nikoli »ni zahteve«.
Pogoji
- PHP 8.2 ali novejši.
- Skrbniške pravice za upravni zaslon.
Shema ustvari dve tabeli, „vault.secret“ in „vault.zugriff“, vsako idempotentno. Pika sodi k imenu in ločuje modul, odkar vsi moduli hranijo svoje tabele v skupni podatkovni zbirki; v SQL mora vedno stati v narekovajih, ker jo SQLite sicer bere kot ločilo podatkovne zbirke in tabele ne najde.
Meje
- Privzeti vir ključa si deli varnostno kopijo s podatki — glej zgoraj.
- Potekla skrivnost se še naprej izdaja. Potek je poziv, ne zavarovanje: zavrniti izdajo na določen dan bi hkrati ustavilo pošiljanje pošte, podatkovne zbirke in dostop do repozitorija, in to iz upravnega razloga.
- Priprava ničesar ne preklopi. To stori le prevzem. To je gradbena oblika, ne pomanjkljivost.
- Trezor pri ponudniku ne more ničesar preklicati. Dokončati rotacijo z razveljavitvijo stare dostopne pravice ostaja naloga upravljavca.
- Izgubljeno ključno gradivo pomeni izgubljene vrednosti. Poti obnovitve po zasnovi ni.
- Pospravljanje je odvisno od indekserja wikija.
Podatki o paketu
Vtičnik: wkvault
Imenski prostor: lib/plugins/wkvault/
Avtor: Wolfgang van der Stille Wolfgang.van.der.Stille@gmail.com (The White Knight Labs)
Licenca: GPL 2