2016-05-04 3 views
1

Я пытаюсь запустить 'lightled.py' (кнопка RON) и 'lightledoff.py' (кнопка ROFF) через PHP. Обе программы включают библиотеку GPIO и требуют доступа root. Кнопка «ВКЛ» и «ВЫКЛ» напрямую включает и выключает светодиод. Кнопка ON и OFF работает правильно, но RON и ROFF не работают. Как я могу запускать программы python или C++, которым нужен root-доступ?Запуск программы с sudo в php

<!doctype html> 
<html> 
    <head> 
     <title>LED Test</title> 
     <meta charset="UTF-8"/> 
    </head> 
    <body> 
     <h1>Light Led</h1> 
     <form method=GET action="index.php"> 
      <h3>Radio Led</h3> 
      <input name="button" type="submit" value="RON"> 
      <input name="button" type="submit" value="ROFF"> 
      <h3>On Board Led for Test</h3> 
      <input name="button" type="submit" value="ON"> 
      <input name="button" type="submit" value="OFF"> 
     </form> 
     <?php 
     if ($_GET["button"] == "RON") { 
      system("echo raspberry | sudo -S python ./lightled.py"); 
     }; 
     if ($_GET["button"] == "ROFF") { 
      system("echo raspberry | sudo -S python ./lightledoff.py"); 
     }; 
     if ($_GET["button"] == "ON") { 
      system("gpio -g mode 17 out"); 
      system("gpio -g write 17 1"); 
     }; 
     if ($_GET["button"] == "OFF") { 
      system("gpio -g mode 17 out"); 
      system("gpio -g write 17 0"); 
     }; 
     ?> 
    </body> 
</html> 

ответ

0

То, что вы пытаетесь сделать, это запустить команду Судо от пользователя, который не имеет никаких привилегий, даже при работе рамки PHP как корень, пользователь, который сделан (каркас пользователя) не повышен до корня привилегии судо.

Вам нужно будет добавить фреймворк, который запускает ваш PHP-скрипт, в файл sudoers, и вы должны иметь возможность выполнять файлы как root через команду sudo, как вы уже пытались сделать. для этого вам необходимо выполнить команду visudo в качестве суперпользователя и добавить запись для пользователей, которые выглядят так:

# User Privilege Specification 

root ALL=(ALL) ALL 
PHPFramework ALL=(ALL) ALL 

Если вы хотите, чтобы не дать основы PHP все привилегии корня (которые я рекомендую, даже если это всего лишь небольшая RPi, работающая локально), вам нужно будет отредактировать файл sudo более конкретно, чтобы прочитать тему google 'visudo priveleges', это одно из первых хитов, которые я нашел: https://www.garron.me/en/linux/visudo-command-sudoers-file-sudo-default-editor.html

пример просто давая разрешение на запуск скрипта python через sudo:

# User Privilege Specification 


PHPFramework ALL=/path/to/file/lightled.py; /path/to/python_install 

где PHPFramework - это имя вашего метода развертывания, для apache это будет «apache» (без qoutes).

0

«Недавно я опубликовал проект, который позволяет PHP получать и взаимодействовать с реальной оболочкой Bash. Получить его здесь: https://github.com/merlinthemagic/MTS

После загрузки вы бы просто использовать следующий код:

$shell = \MTS\Factories::getDevices()->getLocalHost()->getShell('bash', true); 
    //insert command 
    $strCmd = 'echo raspberry | sudo -S python ./lightled.py'; 
    $return = $shell->exeCmd($strCmd); 
    //handle any return and issue next command into the shell 
Смежные вопросы