A execução de scripts de shell em sudo
é segura , desde que sudo
esteja configurado para redefinir o ambiente . Por outro lado, se sudo
não reconfigurar o ambiente, a execução de um script de shell não será segura, mesmo que seu script não use seus parâmetros (consulte Permitir setuid em scripts de shell ). Verifique se você tem Defaults env_reset
em /etc/sudoers
ou se essa opção é o padrão em tempo de compilação ( sudo sudo -V | grep env
deve incluir Reset the environment to a default set of variables
).
Não há perigo particular em usar os parâmetros de script. $1
é uma string, tudo que você precisa para ter certeza é que você está usando como uma string. (Por exemplo, não faça eval "$1"
.) Obviamente, é especialmente importante aqui não fazer suposições sobre o conteúdo da variável, e para coloca aspas duplas em torno de todas as substituições de variáveis (ou seja, escreve "$1"
, não $1
). Observe que colocar aspas duplas em torno de substituições de variáveis não é específico para scripts executados com privilégios, é algo que você deve fazer o tempo todo.
Você pode querer validar mais o parâmetro, dependendo do que udhcpc
faz com algo que não se parece com um nome de host. Por exemplo, isso executará uma primeira verificação sintática:
#!/bin/sh
case "$1" in
*[!:-.0-9A-Za-z]*|-*) echo 1>&2 "Badly formed host name!"; exit 3;;
esac
udhcpc -b -i eth0 -h "$1"