php程序里面使用sudo来执行应用程序

在树莓派里面使用php来执行已经写的c程序来获取一些硬件信息的,因为要操作GPIO,所以必须采用sudo来执行程序.

但是直接在bash里面执行是没问题的,放到php里面执行就没有任何输入.

自己做了个实现,用最简单的ls命令,直接exec("ls /")就可以获取到数据,但是加了sudo后,exec("sudo ls /")就没有任何输出了.

所以基本可以断定,是php权限的问题.

因为php是依赖于apache来运行的,所以php的权限问题又回到了apache的权限问题.

在树莓派上查看apache的执行用户:

ps auxfww | grep 'httpd'

发现是有默认用户pi来执行的,而sudo visudo命令可以看见,pi用户是可以直接使用sudo来执行任何程序而不用输入密码的.这个就奇怪了.

又回首检查了下,逻辑没错啊.但是php始终不行.

于是就直接ps auxfww,看httpd确实是有pi来执行的,但是除了httpd这个进程以外,还有apache的进程.

ps auxfww | grep 'apache'

发现执行apache的用户是www-data,还有另外一个nobody

把这2个也通过sudo visudo加到超级用户组里面去,重启apache

www-data ALL=(ALL) NOPASSWD: ALL
 
nobody ALL=(ALL) NOPASSWD: ALL
 
sudo /etc/init.d/apache2 restart

竟然可以了.

原文地址:https://www.cnblogs.com/raspberry/p/5470795.html