È buona norma eseguire un demone con un account utente non root?


13

Ho sviluppato un'applicazione che utilizza NTP per modificare i tempi di rete, per sincronizzare due dei miei computer. Funziona come root, poiché solo a quest'ultimo è consentito modificare l'ora e la data su Linux (immagino).

Ora voglio eseguirlo come utente. Ma devo accedere al tempo.

  • È buona norma eseguire un demone con un account utente non root?
  • Devo dare alla mia applicazione una capacità come CAP_SYS_TIME?
  • Non introduce una vulnerabilità di sicurezza?
  • C'è un modo migliore?

Normalmente il demone NTP dovrebbe funzionare come ntpaccount utente (almeno su sistemi Linux), quindi non dovresti essere obbligato a fare questa modifica. Quale pacchetto NTP hai installato?

6
L'esecuzione di un demone con un account non root si chiama "eliminazione dei privilegi di root" ed è una buona pratica comunemente nota in quanto limita i potenziali danni delle vulnerabilità di sicurezza nel demone.

1
Vedi Wikipedia per " Separazione dei privilegi ".
Kusalananda

Ho compilato NTP dalle fonti. Non ho un gruppo NTP
Anonymous12223

@xhaltar È possibile creare il gruppo e l'utente NTP. Per configurare la modalità di avvio di un servizio (utente, gruppo, ecc.) È possibile creare / modificare lo script di inizializzazione del servizio o creare / configurare un'unità di sistema.
Pl4nk,

Risposte:


15

È buona norma eseguire un demone con un account utente non root?

Sì, e questo è comune. Ad esempio, Apache inizia come root e quindi avvia un nuovo processo come www-data (di default).
Come detto in precedenza, se il tuo programma viene violato (es: iniezione di codice), l'attaccante non otterrà un accesso root, ma sarà limitato ai privilegi che hai dato a questo specifico utente.

Devo fornire una "Capacità" come "CAP_SYS_TIME"?

È una buona idea poiché eviti di usare setuid e limiti le autorizzazioni a questa capacità molto specifica.

Devo usare un altro modo per farlo che sarebbe considerato "buona pratica"?

Puoi aumentare la sicurezza, ad esempio:

  • Esegui il servizio come utente non privilegiato, senza shell.
  • Usa chroot per bloccare l'utente nella sua home directory.

NB: Chroot non fornisce alcuna sicurezza se si è root e si esegue su Linux. L'utente root può creare una directory nella chroot, aprire la directory root della chroot, chroot nella nuova directory, tornare indietro alla root reale e quindi chroot nella root reale. BSD risolve questo problema impedendo di prendere la directory fd in un chroot.
Kevin

@Kevin Se sei root, puoi anche eseguire processi al di fuori del chroot e ci sono molti altri modi per aggirarlo. Un semplice chroot non riesce a radicarsi.
Gilles 'SO- smetti di essere malvagio'

//, emp.jar.st crea effettivamente un utente per se stesso per motivi di sicurezza. Pratica molto buona.
Nathan Basanese,

Aspetta, se sono USER, posso bloccare USER in una directory specifica? Come "/ opt" (ad esempio)?
Anonimo12223,

@xhaltar Per bloccare un processo eseguito USERin una directory, lo si utilizza chroot(eseguirlo come utente root). Tuttavia, è necessario creare e inizializzare una jail (directory) prima. In breve, devi inserire le librerie e i binari di cui il tuo processo ha bisogno in questo jail, quindi chiamare chroot <path/to/jail> <command>. Un buon tutorial con alcuni degli esempi di cui hai bisogno è disponibile qui
Pl4nk,

13
  • Devo usare un altro modo per farlo che sarebbe considerato "buona pratica"?

A meno che non abbiate ragioni forti e inconfutabili, dovreste semplicemente usare il pacchetto NTP fornito con la vostra distribuzione GNU / Linux. Il demone NTP standard ha impiegato anni per maturare e venire con funzionalità sofisticate come rallentare o accelerare l'orologio del sistema per sincronizzarlo con una rete o un orologio GPS. È stato progettato su misura per la sincronizzazione degli orologi, quindi molto probabilmente è lo strumento migliore in circolazione a tale scopo.

ntpdè ancora mantenuto, a giudicare dai recenti aggiornamenti (al momento di scrivere questo post). Se hai bisogno di più funzionalità, ti suggerisco di contattare direttamente gli sviluppatori, fidati di quello che hanno da dire al riguardo.


5

Se hai un programma che deve essere in grado di eseguire la funzione X (ad esempio, manipolare l'orologio) e puoi dargli il privilegio / il potere di fare la funzione X e nient'altro, è meglio che dargli l'intera lattina dell'alfabeto la minestra. Questo è noto come il principio del privilegio minimo . Considera, se il tuo programma ha un bug - un normale errore di programmazione o una vulnerabilità di sicurezza sfruttabile. Se funziona come "root", potrebbe rimuovere tutti i file o inviarli a un utente malintenzionato. Se l'unica cosa che il programma è in grado di fare è manipolare l'orologio (e le funzioni non privilegiate, come la manipolazione dei file in una directory bloccata), questo è il peggio che può accadere se il programma diventa malvagio.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.