Maurizio Lemmo - Tannoiser wrote:
Solo una malinconia da security through obscurity[1]. In presenza di
piu` "uploader", se si diffonde l'informazione di questa feature,
chiunque puo` scrivere qualcosa che killa processi.
Chiosando sulla questione, l'assunto di base è che www-data deve poter
eseguire uno ed un solo comando con euid 0, e che questo deve poter
avere come unico effetto di killare il singolo processo "pippo".
Questo porta con sé che ogni entità in grado di far eseguire quel
comando come www-data (facendo eseguire il cgi precotto col browser o
creando una pagina in un qualsiasi linguaggio che permette di fare una
system(3)) potrà killare pippo. E da questo non si scappa.
Se www-data deve eseguire qualcosa con euid 0 non ci sono alternative,
serve un wrapper setuid. Ce lo si può scrivere (cattiva idea, IMHO) o si
può usare un wrapper precotto e considerato stabile e sicuro (suid, super).
In ogni modo, qualsiasi cosa si usi, secondo me non si deve permettere a
www-data di poter scegliere o modificare _cosa_ killare, il parametro
deve essere hardcoded. Questo perché fare validazione e sanitizzazione
dell'input è comunque troppo gravoso e prono ad errori, dovendo
riscrivere da 0 il codice.
Usando sudo anche la validazione dell'input viene "gratis", ed è per
questo che era la soluzione che mi piaceva di più:
# tail -1 /etc/sudoers
www-data localhost= NOPASSWD: /usr/bin/killall pippo
# su - www-data
$ sudo /usr/bin/killall pippo
$ sudo /usr/bin/killall init
Sorry, user www-data is not allowed to execute '/usr/bin/killall init'
as root on localhost.
Ciao,
- ap
|