Painel de Controle de Hospedagem Linux Customizado em PHP - executando comandos como root

0

Eu quero trabalhar em um painel de controle de hospedagem linux personalizado com base na minha experiência no gerenciamento de pilha LEMP / LAMP. Este é apenas um projeto de estimação. Eu acredito que encontrei algum obstáculo.

O CP está sendo escrito em PHP e servidor por NginX como servidor padrão na porta 8000. Eu não estou usando nenhum framework, apenas baunilha PHP.

Em putty, logado como root, eu posso pegar o sistema uuid assim:

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

Quando eu tento isso em PHP com o seguinte script:

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

Eu recebo o seguinte:

sh: dmidecode: command not found

Como posso executar o comando acima para obter a saída em PHP?

O Nginx / PHP-FPM está sendo executado como usuário nginx . Preciso adicionar o usuário nginx ao grupo raiz?

Eu quero ser capaz de executar comandos muito específicos como: /etc/init.d/php-fpm restart do meu painel de controle (para reiniciar o gateway php-fpm).

Como posso conseguir isso? Quais são minhas opções? Como o painel de controle, como cPanel, DirectAdmin, etc ... faz isso?

Eu também tentei o seguinte método. Instalou sudo e usou o comando sudo visudo e adicionou as seguintes linhas no final:

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

e o conteúdo de php_shell.sh é:

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

Agora, tentei executá-lo assim:

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

Eu recebo: sudo: no tty present and no askpass program specified

    
por Latheesan 25.10.2015 / 19:12

1 resposta

0

dmidecode é geralmente no diretório /usr/sbin e nem sempre é no PATH, então do php use o caminho completo, encontrado com type -p dmidecode , ex. /usr/sbin/dmidecode .

Quanto ao seu sudo, você fez sudo sh ... em vez de sudo /path/to/php_shell.sh , então sua entrada NOPASSWD não coincidiu. No entanto, seria melhor listar explicitamente em seu arquivo sudo o comando e seus argumentos, em vez de permitir que um script de propósito geral seja executado como root. Então use por exemplo

Defaults:nginx        !requiretty
nginx ALL NOPASSWD:/usr/sbin/dmidecode -s system-uuid

Se você tem vários comandos que você precisa para executar como root, coloque-os no mesmo linha separada por uma vírgula.

    
por 26.10.2015 / 10:37