PHP exec, запуск командных командных оболочек (с использованием archlinux)

0

Я использую Archlinux, и я хочу запустить следующий скрипт (последняя строка фактически):

<?php
var_dump(get_current_user());
var_dump(exec("whoami"));
var_dump(exec("sudo echo 1 > /sys/class/gpio/gpio44/value"));

Сценарий имеет следующие разрешения (я пробовал с и без sudo в последней строке)

-rwxr-xr-x 1 http http  126 Nov 17 17:24 turn_on.php

и http был добавлен в \etc\sudoers со всеми разрешениями

http ALL=(ALL) ALL

Результатом открытия скрипта turn_on.php в браузере является:

string(4) "http" string(4) "http" string(0) ""

Скрипт не делает то, что ему нужно (последняя строка) и в журнале apache, каждый раз, когда я перезагружаю браузер, я получаю:

sh: /sys/class/gpio/gpio44/value: Permission denied

Это мой первый тест для решения того, что я хочу сделать, я думаю, что нужно сделать что-то более "API-интерфейс веб-сервиса PHP". Любое предложение высоко ценится. Cheers.-

Теги:
exec
archlinux

1 ответ

1
Лучший ответ

Вам нужно проверить разрешения /sys/class/gpio/gpio44/value, так как это создает ошибку разрешений.

Кроме того, попробуйте использовать sudo из командной строки для имитации функциональности скрипта:

sudo -u http echo 1 > /sys/class/gpio/gpio44/value

Если это не удается, вам просто нужно возиться с вашими разрешениями до тех пор, пока он не будет работать правильно, а затем повторите попытку из браузера.

Если это работает, но в браузере все еще не удается, возможно, что выполнение вашего сценария фактически не использует пользователя http.

  • 0
    Вы рок человек, я не думал о самом файле DOH! У тебя есть идея сделать это безопаснее? Спасибо
  • 0
    немного сложно комментировать безопасность, не понимая ваших полных целей. Вообще говоря, exec считается «опасным» методом php, но это действительно зависит от того, что вы с ним делаете. Что делает exec супер опасным, так это то, что вы позволяете конечным пользователям вводить информацию, которая делает его exec, например: exec ($ _ GET ['param']); Пока ты этого не сделаешь, у тебя должно быть все в порядке. Если вам нужно включить в exec какие-либо данные, отправленные пользователем, посмотрите в PHP функцию escapeshellarg ().

Ещё вопросы

Сообщество Overcoder
Наверх
Меню