未经web许可,执行php脚本

时间:2016-01-10 15:31:34

标签: php linux permissions sudo raspbian

我试图执行php脚本,但我遇到了这种错误:

Warning: file_put_contents(/sys/class/gpio/export): failed to open stream: Permission denied in /home/pi/php-gpio/src/PhpGpio/Gpio.php on line 99
Warning: file_put_contents(/sys/class/gpio/gpio17/direction): failed to open stream: Permission denied in /home/pi/php-gpio/src/PhpGpio/Gpio.php on line 103

我试图像这样在$ sudo visudo中设置权限:

www-data ALL=NOPASSWD: path/to/my/script

www-data ALL=NOPASSWD: ALL

但是没有用,我只能用sudo从命令行执行这个脚本!

提前致谢!

2 个答案:

答案 0 :(得分:0)

如果您在计算机中使用,则必须更改默认目录权限:

$ sudo chmod -R +w /sys/class/gpio/export

否则,如果您在服务器,服务器面板和部分文件(例如CPanel)中运行代码,则更改权限并添加写权限。

另一种方法是运行exec()命令:

<?php
exec('chmod -R +w /sys/class/gpio/export');
?>

然而, php 应该有exec权限并且运行root!

答案 1 :(得分:0)

我最近发布了一个项目,允许PHP获取真正的Bash shell并与之交互(如果需要,可以作为root),它解决了exec()和shell_exec()的限制。在此处获取:https://github.com/merlinthemagic/MTS

下载后,您只需使用以下代码:

$shell    = \MTS\Factories::getDevices()->getLocalHost()->getShell('bash', true);
$return1  = $shell->exeCmd('/sys/class/gpio/export');
$return2  = $shell->exeCmd('/sys/class/gpio/gpio17/direction');

//the return will be a string containing the return of the command
echo $return1;
echo $return2;

就安全性而言,它比以root身份运行apache或在你的问题中运行广泛的sudo权限要好得多。但让PHP靠近root,总是很棘手。

我构建的项目以两种方式之一实现了root bash shell:

1)你允许apache权限sudo python。

OR

2)每次需要具有root设置的shell时,都会将根凭据传递给对象。

选择你的毒药。 :)阅读文档。