Como permitir o comando para o usuário www-data?

Como permitir o comando para o usuário www-data?

Tento executar o seguinte comando PHP para obter o endereço IP da eth0.

$ip = trim(shell_exec("/sbin/ifconfig eth0 | grep -i 'inet Adresse:' | tr ':' ' ' | awk '{ print $3 }'"));

Mas não recebo nada em troca. Se eu executar exatamente o mesmo comando via ssh, recebo o IP, então o comando deve funcionar.

Eu abri visudoe adicionei essas linhas e reiniciei o apache2 depois disso

www-data        ALL = NOPASSWD: /sbin/ifconfig
www-data        ALL = NOPASSWD: /bin/grep
www-data        ALL = NOPASSWD: /usr/bin/awk
www-data        ALL = NOPASSWD: /usr/bin/tr

Mas ainda não recebo nada de volta

Responder1

Seu padrão grep parece não corresponder à saída ifconfige, portanto, grepnão está produzindo saída, tente:

$ip = trim(shell_exec("/sbin/ifconfig eth0 | grep -i 'inet Adresse:' | awk '{ print $2 }'"));

Responder2

Eu encontrei a solução. É porque shell_execsempre obtém uma saída em inglês, mesmo que o sistema operacional esteja configurado para alemão, se você executar, shell_exec("/sbin/ifconfig")sempre obterá, por exemplo, inet addrem vez de inet Adressena saída.

Também esqueci de alterar o usuário e o grupo do meu arquivo para www-datawith chowne permitir a execução do script with chmod, mas não sei se isso é necessário.

informação relacionada