Parabéns! Você está no caminho para dar acesso irrestrito a qualquer pessoa que possa fazer com que seu servidor nginx execute um código arbitrário. É melhor que você tenha certeza de que cada script CGI e página php e qualquer outra coisa que possa ser usada para executar código arbitrário é segura.
Seu wrapper C é equivalente a configurar o sudo para permitir que o nginx execute qualquer comando como root.
NÃO faça fazer assim.
Escreva invólucros de script de shell individuais (ou qualquer outro) para comandos específicos e conceda acesso sudo apenas a esses scripts de wrapper. Por exemplo, /usr/local/sbin/restart-nginx.sh
, que nada , mas service nginx restart
, dá ao nginx sudo acesso a esse script.
Em seguida, escreva outro script completamente separado para executar, digamos, dmidecode -s system-uuid
como na sua pergunta anterior. E dê ao nginx sudo acesso a esse script também.
Quanto mais simples e menos complicado cada roteiro individual, melhor. O mais seguro de tudo é não receber nenhuma entrada do usuário, não da linha de comando e não de variáveis de ambiente.
Se alguns de seus scripts de wrapper precisarem de entrada do usuário, verificação de sanidade e limpeza de todas as entradas fornecidas pelo usuário antes de usá-lo. E cite suas variáveis - por exemplo, use sempre "$variable"
e nunca apenas $variable
sem aspas.
Se os scripts do wrapper estiverem ficando excessivamente longos e complicados, tente identificar apenas o comando mínimo ou o conjunto de comandos que precisam ser executados como root e escrevê-los como um script (ou scripts) separado, chamado por sudo
do script principal. ou seja, corra o mínimo possível como root.