Chame um script de shell do PHP, execute como root

3

Estou executando o Ubuntu 11.10. Eu quero ser capaz de chamar um script de shell do PHP e executar esse script como root. Quando meu php tenta chamar o script shell como root - assim:

$output = shell_exec('sudo /var/www/my_script.sh')

Eu recebo esse erro no log do apache:

sudo: no tty present and no askpass program specified

Eu mudei o dono do script php para root: root. Eu adicionei esta linha para sudoers:

www-data ALL = NOPASSWD:/var/www/my_script.php

Eu percebo que devo comentar esta linha em sudoers:

Defaults    requiretty

No entanto, não existe essa linha no meu arquivo sudoers. O que preciso fazer para superar esse erro?

    
por Sparky1 07.11.2011 / 22:15

3 respostas

3

Sua linha sudoers está concedendo acesso para executar "my_script.php" enquanto seu shell_exec está invocando "my_script.sh". Quando uma senha não é necessária, a opção requiretty deve ser irrelevante.

    
por João Pinto 08.11.2011 / 01:08
2

Use "suexec" ... no servidor Ubuntu 10.04:

sudo apt-get install apache2-suexec-common

Ativar o suexec:

sudo a2enmod suexec

Edite o arquivo de configuração para corresponder ao seu site:

sudo -e /etc/apache2/suexec/www-data

Depois, veja Usando suEXEC no Apache.org para configurar o (s) arquivo (s) de configuração do Apache .

Outra abordagem ...

Permita que o usuário www-data rode para executar program1 e program2 sem senha:

sudo visudo

Adicione ao conteúdo do arquivo sudoers:

User_Alias WWW_USER = www-data
Cmnd_Alias WWW_COMMANDS = /sbin/program1, /sbin/program2
WWW_USER ALL = (ALL) NOPASSWD: WWW_COMMANDS

Salvar.

Ainda outro é com suPHP

    
por user8290 04.01.2012 / 02:48
0

Eu publiquei recentemente um projeto que permite ao PHP obter e interagir com um shell Bash real (como usuário: apache / www-data ou root, se necessário). Obtenha aqui: link

Após o download, basta usar o seguinte código:

//Setting the second argument in getShell():
//true will return a shell with root
//false will return a shell with the php execution user
$shell    = \MTS\Factories::getDevices()->getLocalHost()->getShell('bash', true);
$return1  = $shell->exeCmd('/var/www/my_script.sh');
    
por Merlin 18.05.2016 / 14:37