Пользовательская панель управления хостингом Linux при запуске команд от имени пользователя root

Я хочу работать над пользовательской панелью управления хостингом Linux, основываясь на моем опыте управления стеком LEMP / LAMP. Это всего лишь любимый проект. Я считаю, что я столкнулся с некоторым препятствием.

CP пишется на PHP и сервер NginX в качестве сервера по умолчанию на порту 8000.
Я не использую фреймворк, просто ванильный PHP.

В putty, вошедший в систему как root, я могу получить системный uuid следующим образом:

[root@localhost ~]# dmidecode -s system-uuid
997C4DE8-213B-4ACC-8E23-01E79D6CC12F

Когда я пытаюсь это в PHP с помощью следующего скрипта:

var_dump(shell_exec('dmidecode -s system-uuid 2>&1'));

Я получаю следующее:

sh: dmidecode: команда не найдена

Как я могу выполнить эту команду, чтобы получить вывод в PHP?

Nginx / PHP-FPM работает как пользователь nginx, Нужно ли добавлять пользователя nginx в корневую группу?

Я хочу иметь возможность выполнять очень конкретные команды, такие как: /etc/init.d/php-fpm restart из моей панели управления (чтобы перезапустить шлюз php-fpm).

Как мне этого добиться? Какие у меня варианты? Как панель управления, такая как cPanel, DirectAdmin и т. Д … делает это?

Обновить

Я попробовал также следующий метод. Установлены sudo и использовал sudo visudo команда и добавил следующие строки в конце:

nginx    ALL=(ALL)    NOPASSWD:/path/to/php_shell.sh
Defaults:nginx        !requiretty

и содержание php_shell.sh является:

#!/bin/bash
dmidecode -s system-uuid

Теперь я попытался выполнить это так:

var_dump(shell_exec('sudo sh /path/to/php_shell.sh 2>&1'));

Я получил: sudo: no tty present and no askpass program specified

0

Решение

Я исправил это благодаря этому решению: https://stackoverflow.com/a/30284644/2332336

Вот что я должен был сделать:

Установлены sudo и использовал sudo visudo команда и добавил следующие строки в конце:

nginx    ALL=(ALL)    NOPASSWD:/path/to/php_shell.sh,/bin/bash
Defaults:nginx        !requiretty

и содержимое php_shell.sh:

#!/bin/bash
dmidecode -s system-uuid

Теперь я попытался выполнить это так:

var_dump(shell_exec('sudo /bin/bash /path/to/php_shell.sh 2>&1'));

Вывод получаю:

string(36) "997C4DE8-213B-4ACC-8E23-01E79D6CC12F"

Теперь, когда это работает, мне просто нужно знать, будет ли это безопасно, так как я ТОЛЬКО когда-либо выполняю набор определенных команд, таких как dmidecode -s system-uuid и не принимать пользовательский ввод. Или я открыл какую-то дыру в безопасности, добавив nginx на visudo как это?

0

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

Других решений пока нет …

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