我正在使用PHP为openwrt开发简单(非常简单)的前端。为此,我需要调用许多openwrt (Unified )。接口)通过PHP、shell_exec()或system()函数执行命令。我在终端上尝试过的所有UCI命令都运行得非常好。但是,一旦我完成了上述功能,它们就根本无法工作。
作为一个示例,我运行了两个在终端中运行良好的命令
uci set wireless.@wifi-iface[0].ssid=test
uci commit但是,当我通过PHP运行它们时,什么都不会发生。他们根本不起作用。I创建.sh文件并保存以上两行,并使用PHP运行该文件,但再次!!结果是一样的。但是当我通过终端执行.sh文件时,它可以工作!!
为了进行测试,我将两个文件的权限设置为777。但这没什么用。是否还需要通过PHP运行shell命令,比如对PHP或Apache的根访问?我是新手,如果有人能帮上忙,我会很感激
我的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作为web服务器,openwrt混沌平静器15.05-rc3作为我在Raspberry pi 2之上的基本固件。
发布于 2015-08-25 07:50:01
我设法用uhttpd web服务器而不是Apache来解决我的问题。Apache不知怎么没有足够的权限直接执行UCI命令。uhttpd openwrt中的默认web服务器可以直接执行此命令。
发布于 2017-01-24 14:22:26
我试图找出同样的问题,到目前为止,我的结论是使用根权限运行php。我知道这不安全,但至少起作用了。下面是一行,从/etc/init.d/php5-fpm运行具有根权限的php:
service_start $PROG -R -y $CONFIG -g $SERVICE_PID_FILE
这里的关键标志是:
-R,-允许以根方式运行
允许池以root形式运行(默认情况下禁用)
发布于 2020-10-03 09:52:03
两个答案都是正确的。sameera提到的事实是,uhttpd具有在LEDE或OPENWRT上运行的特殊权限(默认情况下),但是Anton Glukhov编写的内容也是正确的,它允许我作为根用户运行,但为了避免错误而受到限制。我无法像运行uhttpd那样运行脚本(),但是php运行正常,并且在作为根用户运行时没有任何but。我想这是Openwrt默认情况下在Nginx上发出的文件权限问题。我的解决方案是让uhttpd在不同的端口上运行,并在Nginx中以非根的形式运行所有的权限和权限的程序。在我的例子中,安全性不是问题,它的脱机服务器。
service_start $PROG -R -y $CONFIG -g $SERVICE_PID_FILE工作,在我的示例中,编辑在/etc/init.d/php7-fpm中添加/etc/init.d/php7-fpm标志。
https://stackoverflow.com/questions/32044209
复制相似问题