I pezzi
| Pezzo | Cosa fa | Perché così |
|---|---|---|
| Pannello | Le pagine della dashboard e l’API. | Gira in un container senza rete, con il disco in sola lettura: anche se qualcuno lo forzasse, non potrebbe chiamare fuori né eseguire comandi. |
| Agente | Esegue le operazioni, come root. | Conosce solo un elenco chiuso di operazioni, ognuna con i suoi controlli sugli argomenti; niente shell, niente comandi liberi. Scrive tutto nel registro. |
| Script | Fanno il lavoro vero. | La stessa logica per la dashboard, per i timer e per chi lavora da shell: un pulsante è sempre un comando che si può ripetere a mano. |
| Importazioni | Archivi e dump di siti di produzione da portare in sviluppo. | Sono file di altri: li apre un utente senza privilegi, il dump passa da un filtro e da un database temporaneo, nessun PHP dell’archivio viene eseguito, e il sito nasce solo dopo la conferma. |
| Siti | WordPress, uno per utente Linux. | PHP, database e cartella propri: un sito compromesso non vede gli altri. |
| Cassaforte | Credenziali dei fornitori e chiavi dei server di produzione. | Cifrata con age: si apre per poco tempo, solo per chi l’ha aperta e solo se la notifica arriva; chiusa, nessuno ne legge i valori, nemmeno root. |
| Strumenti firmati | Gli script che vanno sui server di produzione. | Un server li installa solo con la firma della chiave di rilascio dell’amministratore, che non sta su nessun server: un server di sviluppo compromesso non porta codice suo in produzione. |
| Timer | Backup, controlli, aggiornamenti, scadenze. | Il server si sorveglia da solo, anche quando nessuno guarda la dashboard. |
Difese a strati
- Rete: SSH solo a chiave, dashboard raggiungibile solo dal tunnel, firewall che blocca le uscite dei siti.
- Server web: anteprima, limiti sulla pagina di accesso, sonde respinte, amministrazione chiusa.
- fail2ban: chi insiste resta fuori, chi ritorna resta fuori una settimana.
- PHP: ogni sito chiuso nella sua cartella, funzioni pericolose disattivate.
- File: codice in sola lettura, nessun PHP eseguibile fuori da plugin e temi.
- Controlli: impronta, database, vulnerabilità, ogni notte e ogni ora.
- Backup: cifrati, fuori dal server, verificati ogni settimana.
Nessuno strato è perfetto da solo: servono tutti, perché chi attacca deve superarli tutti.
Dietro un clic: «Aggiorna» su un plugin
- Il browser manda la richiesta nel tunnel SSH, con il codice anti-falsificazione.
- Il pannello controlla sessione, ruolo e nome del plugin, poi chiede all’agente l’operazione
site.plugin.update. - L’agente controlla di nuovo gli argomenti, scrive nel registro chi l’ha chiesta e avvia un lavoro:
site.sh update-plugin. - Lo script sblocca il codice, aggiorna il plugin con wp-cli come utente del sito, senza caricare plugin e temi, e verifica i checksum ufficiali.
- Riblocca il codice e approva la nuova impronta.
- Il log arriva nel browser riga per riga; alla fine il riepilogo dice cosa è cambiato, e il registro l’esito.