Вам нужен слой абстракции, чтобы хотя бы немного обеспечить безопасность! ...
Я могу написать простой UDP-сервер * с правами root на Python, который:
следит за входящими пакетами UDP на заданном порту
сравнивает их с белым списком
если они совпадают, выполнить операцию
Затем у вас есть немного PHP, который отправляет на сервер Python предопределенные сообщения ...
<?php
$handle = fsockopen("udp://localhost",12345);
fwrite($handle,"Start Script");
fclose($handle);
?>
Сервер python отслеживает пакеты на порту 12345, но просто игнорирует все пакеты, которые не являются ни «Start Script», ни «Stop Script», так как он запускается с правами root и может успешно запустить ваш bash-скрипт. Вы АБСОЛЮТНО ДОЛЖНЫ использовать белый список, однако ДЕЙСТВИТЕЛЬНО НЕ БЕЗОПАСНО отправлять ЛЮБОЙ ввод из UDP-сокета в командную строку напрямую!
Обратите внимание, что UDP может быть подделан, поэтому, если ваш брандмауэр разрешает подделанный входящий трафик (это действительно не должно!), Кто-то может отправить поддельные пакеты на ваш сервер Python и остановить / запустить вашу службу. Это вряд ли будет проблемой, но если вы не можете починить свой брандмауэр и хотите защититься от него, вы можете переделать вышеперечисленное, используя TCP / IP, который не может быть подделан.
Роджер Хиткот.
* Это действительно тривиальный сервер для записи (~ 20 строк), но если вы не знаете, как это сделать, просто напишите мне, и я отправлю его вам или опубликую здесь.