Ti trovi qui: start » it » Documentazione interna » Estensioni DokuWiki (WvdS) » WvdS Vault

WvdS Vault

Vault è l'unico luogo per i segreti operativi della famiglia di pacchetti: conservati cifrati, con data di scadenza, rotazione per consegna e un registro degli accessi. Senza di esso le credenziali si trovano in tanti punti quanti sono i pacchetti. Il pacchetto si rivolge agli amministratori che devono inserire segreti, sostituirli e dimostrarne l'uso.

Primi passi

Attività frequenti

Che cosa volete Per chi Dove si fa Istruzioni
inserire o modificare un segreto amministrazione Amministrazione > Cassaforte Cinque schemi
sostituire un segreto secondo piano amministrazione Amministrazione > Cassaforte Rotazione
cambiare la sorgente della chiave amministrazione Cambiare la sorgente della chiave
dimostrare chi ha avuto accesso e quando amministrazione Amministrazione > Cassaforte Il registro degli accessi
capire il secondo fattore prima dell'accesso amministrazione Secondo fattore
sapere che cosa la cassaforte non fa amministrazione Che cosa la cassaforte non fa

Scopo

Un luogo per i segreti operativi della suite: conservati cifrati, con data di scadenza, rotazione per consegna e un registro degli accessi. Senza di esso le credenziali si trovano in tanti punti quanti sono i plugin, in tante forme quante ne hanno inventate i loro autori — e almeno una di queste è testo in chiaro in conf/local.php.

Servizio registrato (vedi Core): vault.secrets. Le voci risiedono tramite Storage in data/dwdo/.

Non mancava un metodo di cifratura — mancava un luogo. È questo il compito del plugin, e da esso discende il confine descritto nella sezione seguente.

Che cosa la cassaforte esplicitamente non fa

Il confine viene per primo, perché in una cassaforte è l'informazione più importante.

Con la sorgente della chiave predefinita salt la chiave principale è derivata dal salt di istanza del wiki. Quel salt risiede sotto data/meta/ — lo stesso ramo della banca dati della cassaforte sotto data/dwdo/.

Misurato, non supposto: un normale backup di data/ contiene chiave e testo cifrato insieme. Chi possiede quell'archivio raggiunge i segreti. Da questo il plugin non protegge.

Ciò da cui protegge è tutto quanto sta al di qua: una pagina che ha rivelato troppo, un permesso di accesso ai file impostato troppo largo, un plugin che registra la propria configurazione, una banca dati consegnata a uno sviluppatore.

Questa classe di esposizione si può abbandonare del tutto scegliendo un'altra sorgente della chiave — vedi Configurazione. env e file collocano la chiave fuori da data/ e quindi fuori dal backup del wiki.


Cinque schemi, una decisione dell'amministratore

Un plugin che ha bisogno di una password non riceve un valore, riceve un riferimento. Quale sorgente usi un'installazione lo decide quindi l'amministratore, non l'autore di ogni singolo plugin.

Riferimento Significato
vault:{identificativo} Voce di questa cassaforte
env:{nome} Variabile d'ambiente
file:{percorso} File al di sotto della directory configurata in file_root
enc:… Valore depositato cifrato direttamente
plain:… Testo in chiaro, esplicitamente contrassegnato come tale

La risoluzione avviene dall'interno del proprio plugin tramite SecretRef; il risultato distingue due casi che non vanno confusi:

Risultato Significato
null non era configurato nulla
SecretRefException qualcosa era configurato e non ha potuto essere riscattato
Sono problemi diversi. «Nessuna password depositata» è un passo di configurazione ancora mancante; «riferimento non riscattabile» è un errore in una configurazione esistente. Un messaggio che tratta i due casi allo stesso modo manda l'amministratore nella direzione sbagliata.

Configurazione

Impostazione Predefinito Significato
keysource salt Origine della chiave principale: salt, env o file
keysource_ref vuoto Nome della variabile per env, percorso del file per file; con salt senza effetto
file_root vuoto Directory radice entro cui i riferimenti file: devono restare. Vuoto disattiva del tutto lo schema
log_page_size 100 Righe per pagina nel registro degli accessi
log_keep_days 365 Età a partire dalla quale i record di accesso scadono; 0 li conserva in permanenza
file_root è vuoto per impostazione predefinita e quindi chiuso in caso di guasto. Un riferimento è configurazione fornita dall'amministratore; senza una radice che lo racchiuda, file: sarebbe uno strumento per leggere file arbitrari travestito da segreto.
salt è il predefinito perché non richiede configurazione — ed è il più debole dei tre. env e file sono entrambi copiabili su un'altra macchina e un altro sistema operativo. È proprio questo requisito a escludere gli archivi legati alla macchina (DPAPI, TPM, portachiavi): una cassaforte la cui chiave non può lasciare il computer è irrecuperabile dopo un guasto hardware — backup presente e illeggibile.

Cambiare la sorgente della chiave

Il cambio è supportato e di per sé innocuo: ogni valore porta un'impronta della chiave con cui è stato cifrato, mai la chiave stessa. Le voci esistenti continuano quindi a decifrarsi, e le nuove scritture usano la nuova sorgente.

L'ordine è vincolante:

  1. Modificare l'impostazione.
  2. Eseguire la ricifratura nella schermata di amministrazione.
  3. Solo dopo rimuovere il vecchio materiale di chiave.

La schermata segnala tramite keyUsage() quante voci si trovano ancora sotto la vecchia impronta. Sono esattamente quelle che diventerebbero illeggibili con una rimozione anticipata.


Rotazione: due scomparti, quattro passi

Una voce ha due scomparti. Un nuovo valore viene dapprima predisposto e non commuta nulla; solo l'adozione lo rende il valore valido.

  • stage() — predisporre un nuovo valore, l'esercizio in corso continua a usare quello vecchio
  • promote() — rendere valido il valore predisposto
L'ordine è predisporre → verificare → adottare → revocare presso il fornitore. Ogni altro ordine ha una finestra in cui la risposta è sbagliata.

Il registro degli accessi

Per ogni lettura, scrittura e adozione una riga con l'agente, la voce, l'operazione e l'esito — e mai un valore. È questa la differenza tra una cassaforte e un file cifrato.

Il servizio vault.secrets rilascia esclusivamente la lettura (read(), has()) e vincola l'agente. Un plugin che ha bisogno di una password non può quindi né ruotarne una né attribuire una lettura a qualcun altro.

La pulizia passa per l'esecuzione delle attività dell'indicizzatore, cioè durante le normali chiamate di pagina. Su un wiki senza traffico i record restano quindi semplicemente lì.


Secondo fattore prima di ogni accesso al materiale segreto

Garantito tramite l'Identity Plugin Contract v1 (descrizione del contratto): un ponte do=wkvault_stepup con un elenco di categorie cablato in modo fisso.

Categoria Vale per
create Creare una voce
rotate Predisporre un valore
delete Eliminare una voce
rekey Cambiare la sorgente della chiave e ricifrare tutto

La verifica avviene due volte — in lettura quando la schermata viene disegnata e di nuovo all'invio — e in entrambi i casi in aggiunta all'elenco di accesso di DokuWiki, mai al suo posto. Senza wkidentity il pacchetto si comporta in modo invariato.

Il ponte non accetta mai un requisito fornito dal chiamante, solo un nome del proprio elenco; un nome sconosciuto produce un rifiuto, mai «nessun requisito».

Dal 9 agosto 2026 anche «eliminare» porta il rango di pericolo. Prima l'azione più distruttiva del pacchetto stava su un rango di pulsante che nessun foglio di stile definisce — era quindi priva di forma e non portava alcun segnale visivo, proprio accanto a un «adotta» evidenziato. Una marcatura assente sembra una decisione, e non lo era.

Prerequisiti

  • PHP 8.2 o più recente.
  • Core per la registrazione del servizio e Storage per le voci — entrambi necessari, non facoltativi.
  • Diritti di amministratore per la schermata di amministrazione.

Lo schema crea due tabelle, “vault.secret” e “vault.zugriff”, ciascuna in modo idempotente. Il punto fa parte del nome e separa il modulo, da quando tutti i moduli tengono le proprie tabelle in una banca dati comune; in SQL deve stare sempre tra virgolette, perché altrimenti SQLite lo legge come separatore di banca dati e non trova la tabella.


Limiti

  • La sorgente della chiave predefinita condivide il backup con i dati — vedi sopra.
  • Un segreto scaduto viene comunque consegnato. La scadenza è un invito, non una salvaguardia: rifiutare la consegna a una data stabilita fermerebbe contemporaneamente l'invio della posta, le banche dati e l'accesso al repository, e per giunta per un motivo amministrativo.
  • Predisporre non commuta nulla. Lo fa solo l'adozione. È la forma costruttiva, non una mancanza.
  • La cassaforte non può revocare nulla presso il fornitore. Completare una rotazione invalidando la vecchia credenziale resta compito dell'amministratore.
  • Materiale di chiave perduto significa valori perduti. Per costruzione non esiste una via di recupero.
  • La pulizia dipende dall'indicizzatore del wiki.

Dati del pacchetto

Plugin: wkvault
Spazio dei nomi: lib/plugins/wkvault/
Autore: Wolfgang van der Stille Wolfgang.van.der.Stille@gmail.com (The White Knight Labs)
Licenza: GPL 2

it/wiki/dwe/wkvault/start.txt · Ultima modifica: da 0.0.0.0