通过PHP执行Openwrt UCI命令
Execute Openwrt UCI command through PHP
我正在使用 PHP 为 openwrt 开发简单(非常简单)的前端。为此,我需要通过 PHP shell_exec() 或 system() 函数调用许多 openwrt UCI(Unified conf.interface)命令。我在终端中尝试的所有 UCI 命令都运行良好。但是,一旦我 运行 它们通过上述功能,它们就无法正常工作。
作为示例,我 运行 遵循两个在终端中运行良好的命令
uci set wireless.@wifi-iface[0].ssid=test
uci commit
但是当我 运行 他们通过 PHP 时,什么也没有发生。他们根本不工作。我制作 .sh 文件并保存以上两行和 运行 该文件使用 PHP 但又一次!!结果是一样的。但是当我通过终端执行 .sh 文件时它起作用了!!
为了测试,我将两个文件的权限都设置为 777。但这没有帮助。通过 PHP 对 运行 shell 命令是否有任何其他要求,例如对 PHP 或 Apache 的根访问权限?我是新手,如果有人能提供帮助,我将不胜感激
我的阿帕奇 error_log
[Wed Aug 19 08:26:53 2015] [error] [client 192.168.2.117] uci
[Wed Aug 19 08:26:53 2015] [error] [client 192.168.2.117] :
[Wed Aug 19 08:26:53 2015] [error] [client 192.168.2.117] I/O error
[Wed Aug 19 08:26:53 2015] [error] [client 192.168.2.117]
我使用 apache 作为网络服务器,openwrt Chaos Calmer 15.05-rc3 作为我在 Raspberry pi 2
之上的基本固件
我设法使用 uhttpd 网络服务器而不是 Apache 解决了我的问题。 Apache 不知何故没有足够的权限直接执行 UCI 命令。 uhttpd openwrt默认的web服务器可以直接执行这个命令
我试图找出同样的问题,到目前为止我的结论是 运行 php 具有 root 权限。我知道这不安全,但至少它有效。这是从 /etc/init.d/php5-fpm
到 运行 php-fpm 的 一行 ,具有 root 权限:
service_start $PROG -R -y $CONFIG -g $SERVICE_PID_FILE
这里的关键标志:
-R, --allow-to-run-as-root
允许池 运行 作为 root(默认禁用)
两个答案都对。 sameera mentions was the fact that uhttpd has special rights running on LEDE or OPENWRT (as default), but what Anton Glukhov 写的也是正确的,它允许我 运行 作为 root 但限制以避免错误。我无法 运行 我的脚本 (.sh) 与 uhttpd 一样,但是 php 运行 没问题并且没有任何错误运行宁作为根。我猜它是默认情况下在 Nginx 和 Openwrt 上的文件权限问题。我的解决方案是将 uhttpd 运行ning 留在不同的端口上,运行 我的程序具有所有权利和许可,同时 运行ning 其他所有内容都作为 Nginx 中的非根用户。就我而言,安全性没有问题,它是离线服务器。
service_start $PROG -R -y $CONFIG -g $SERVICE_PID_FILE
有效,在我的例子中编辑在 /etc/init.d/php7-fpm
中添加 -R
标志
我正在使用 PHP 为 openwrt 开发简单(非常简单)的前端。为此,我需要通过 PHP shell_exec() 或 system() 函数调用许多 openwrt UCI(Unified conf.interface)命令。我在终端中尝试的所有 UCI 命令都运行良好。但是,一旦我 运行 它们通过上述功能,它们就无法正常工作。
作为示例,我 运行 遵循两个在终端中运行良好的命令
uci set wireless.@wifi-iface[0].ssid=test
uci commit
但是当我 运行 他们通过 PHP 时,什么也没有发生。他们根本不工作。我制作 .sh 文件并保存以上两行和 运行 该文件使用 PHP 但又一次!!结果是一样的。但是当我通过终端执行 .sh 文件时它起作用了!!
为了测试,我将两个文件的权限都设置为 777。但这没有帮助。通过 PHP 对 运行 shell 命令是否有任何其他要求,例如对 PHP 或 Apache 的根访问权限?我是新手,如果有人能提供帮助,我将不胜感激
我的阿帕奇 error_log
[Wed Aug 19 08:26:53 2015] [error] [client 192.168.2.117] uci
[Wed Aug 19 08:26:53 2015] [error] [client 192.168.2.117] :
[Wed Aug 19 08:26:53 2015] [error] [client 192.168.2.117] I/O error
[Wed Aug 19 08:26:53 2015] [error] [client 192.168.2.117]
我使用 apache 作为网络服务器,openwrt Chaos Calmer 15.05-rc3 作为我在 Raspberry pi 2
之上的基本固件我设法使用 uhttpd 网络服务器而不是 Apache 解决了我的问题。 Apache 不知何故没有足够的权限直接执行 UCI 命令。 uhttpd openwrt默认的web服务器可以直接执行这个命令
我试图找出同样的问题,到目前为止我的结论是 运行 php 具有 root 权限。我知道这不安全,但至少它有效。这是从 /etc/init.d/php5-fpm
到 运行 php-fpm 的 一行 ,具有 root 权限:
service_start $PROG -R -y $CONFIG -g $SERVICE_PID_FILE
这里的关键标志:
-R, --allow-to-run-as-root
允许池 运行 作为 root(默认禁用)
两个答案都对。 sameera mentions was the fact that uhttpd has special rights running on LEDE or OPENWRT (as default), but what Anton Glukhov 写的也是正确的,它允许我 运行 作为 root 但限制以避免错误。我无法 运行 我的脚本 (.sh) 与 uhttpd 一样,但是 php 运行 没问题并且没有任何错误运行宁作为根。我猜它是默认情况下在 Nginx 和 Openwrt 上的文件权限问题。我的解决方案是将 uhttpd 运行ning 留在不同的端口上,运行 我的程序具有所有权利和许可,同时 运行ning 其他所有内容都作为 Nginx 中的非根用户。就我而言,安全性没有问题,它是离线服务器。
service_start $PROG -R -y $CONFIG -g $SERVICE_PID_FILE
有效,在我的例子中编辑在 /etc/init.d/php7-fpm
-R
标志