Questa domanda è del tutto generale e non si applica solo alla mia situazione, ma ... Ho un piccolo dispositivo busybox in cui desidero che un utente non root sia in grado di eseguire uno script particolare con i privilegi di root. Ad esempio, qualcosa come questo piccolo script per abilitare DHCP, dove l'unica variabile ( $1
) da inviare sulla cmdline (!!) è il nome host da inviare:
#!/bin/bash
udhcpc -b -i eth0 -h $1
eseguire udhcpc in questo modo richiede l'accesso come root, quindi per fare questo ho intenzione di modificare /etc/sudoers
per contenere questa riga:
joe ALL = NOPASSWD: /path/to/enable_dhcp.sh
che dovrebbe consentire a "joe" di eseguire facilmente quello script con i privilegi di root semplicemente eseguendo:
sudo /path/to/enable_dhcp.sh
e non mi viene chiesta una password (che è quello che voglio, dato che voglio che Joe sia in grado di scrivere questo).
Ora .. So (o almeno penso di farlo) che l'utilizzo $1
in uno script che può essere facilmente eseguito con i privilegi di root è un'idea ORRIBILE poiché puoi iniettare quello che vuoi in quello.
Quindi ... qual è il modo migliore per affrontarlo? Come posso lasciare che joe faccia quello che voglio con i privilegi di root, consentirgli di passare una variabile (o effettivamente farlo come con una variabile d'ambiente), senza essere troppo aperto agli attacchi di iniezione?