Как разрешить команду для пользователя www-data?

Как разрешить команду для пользователя www-data?

Я пытаюсь выполнить следующую команду PHP, чтобы получить IP-адрес из eth0.

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

Но я ничего не получаю в ответ. Если я выполняю ту же самую команду через ssh, то я получаю IP, так что команда должна работать.

Я открыл visudoи добавил эти строки и перезапустил apache2 после этого

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

Но я все равно ничего не получаю взамен.

решение1

Ваш шаблон grep, похоже, не соответствует выводу ifconfigи, следовательно, grepне выводит ничего, попробуйте:

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

решение2

Я нашел решение. Это потому, что shell_execвсегда получает английский вывод, даже если ОС установлена ​​на немецком языке, если вы выполните, shell_exec("/sbin/ifconfig")то вы всегда получите eg inet addrвместо inet Adresseв выводе.

Я также забыл изменить пользователя и группу моего файла на www-datawith chownи разрешить выполнение скрипта with chmod, хотя я не знаю, нужно ли это.

Связанный контент