Linux — Выполнить скрипт PHP без разрешения из Интернета

Я пытаюсь выполнить скрипт 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 из командной строки!

Заранее спасибо!

0

Решение

Если вы используете на своем компьютере, вы должны изменить разрешение каталога по умолчанию:

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

в противном случае, если вы запускаете код на сервере, в панели сервера и в файлах разделов (например, CPanel), измените разрешение и добавьте право записи.

Другой способ — запустить команду exec ():

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

Тем не мение, PHP должен иметь право exec и работать с рутом!

0

Другие решения

Недавно я опубликовал проект, который позволяет PHP получать и взаимодействовать с реальной оболочкой Bash (как 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;

С точки зрения безопасности это намного лучше, чем запускать Apache от имени root или широко открытые разрешения sudo в вашем вопросе. Но позволить PHP где-нибудь рядом с root всегда сложно.

Проект, который я построил, достигает оболочки root bash одним из двух способов:

1) Вы разрешаете apache право на sudo python.

ИЛИ ЖЕ

2) Вы передаете учетные данные пользователя root каждый раз, когда вам нужна оболочка с настройкой root.

Выбрать свой яд. 🙂 Прочтите документацию.

0

По вопросам рекламы [email protected]