如何允许用户 www-data 执行命令?

如何允许用户 www-data 执行命令?

我尝试执行以下 PHP 命令从 eth0 获取 IP 地址。

$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")始终会得到 eginet addr而不是。inet Adresse

我还忘了将我的文件的用户和组更改为,www-datachown允许使用执行脚本chmod,但我不知道这是否有必要。

相关内容