Я хочу работать над пользовательской панелью управления хостингом 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
Я исправил это благодаря этому решению: 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
как это?
Других решений пока нет …