Dato un servizio che richiede l'accesso ad alcuni segreti da un file di configurazione per iniziare, posso immaginare tre approcci:
1) Mantiene il file leggibile solo da root. Avvia il processo come root, leggi i privilegi di configurazione e rilascio.
2) Mantenere il file leggibile solo dall'utente demone, avviare il processo come utente demone.
3) Mantiene il file leggibile solo da root. Avvia il processo come utente daemon con la capacità CAP_DAC_READ_SEARCH e rilasciatelo dopo aver letto la configurazione.
La mia analisi iniziale delle alternative:
Opzione 1
+ Se esiste una vulnerabilità, un utente malintenzionato deve leggere la propria memoria di processo per ottenere dati sensibili (abbastanza difficile?)
- Più complesso a causa della necessità di setuid / setgid
- Se il software viene compromesso prima di rilasciare i privilegi, verrà eseguito come root
Opzione 2
+ più semplice da programmare, rilasciare i privilegi dallo script di init
- Se esiste una vulnerabilità, un utente malintenzionato può leggere dati sensibili dal disco (facile)
Opzione 3
+ Non fornisce mai l'accesso root completo al processo
+ Se c'è un bug, un utente malintenzionato dovrebbe leggere la memoria del processo invece di un solo file
- Molto complesso
- Offre comunque un accesso molto ampio alla lettura di file al di fuori del file di configurazione (come /etc/shadow
e simili)
Ci sono altre opzioni da prendere in considerazione, o pro o contro che ho perso? Ci sono dei buoni motivi per gestire il privilegio di abbandonare te stesso invece di lasciarlo gestire dal processo di init?