setresuid operação não permitida ao chamar via php

1

Eu tenho seguinte problema: meus scripts Apache e PHP estão sendo executados como usuário www-data.

Eu quero chamar um script que só pode ser executado como root, então eu adicionei um novo arquivo para /etc/sudoers.d para permitir este comando para o usuário www-data:

echo390:/var/www/html# cat /etc/sudoers.d/iptables
www-data ALL= NOPASSWD: /sbin/iptables

meu script PHP tem a seguinte aparência:

<?php
$command = '"/usr/bin/sudo" "/sbin/iptables" -L  -v -n | grep "220.177.198.43"';
echo 'Benutzer: '.exec('whoami').'<br/>';
echo 'Command: '.$command.'<br/>';
$result = array();
exec($command,$result);
print_r($result);
?>

se eu chamar o script pela linha de comando via: sudo -u www-data / usr / bin / teste php.php tudo funciona como esperado, mas quando eu chamo o script via Apache, Eu recebi o seguinte erro em apache2 / error.log:

sudo: PERM_ROOT: setresuid(0, -1, -1): Operation not permitted

Eu fiz o upgrade do Ubuntu de 12.02 para 14.04 O mesmo script foi executado no Ubuntu 12.02 sem problemas. Alguém pode me ajudar? onde está o erro aqui?

grupos para www-data:
echo390:~$ groups www-data
mostra o www-data : www-data

Como informações:
Eu uso o módulo Apache-mpm-itk sothat cada host virtual apache é executado sob um ID de usuário separado. Então, como você permite que um usuário específico do Apache execute um script de shell específico com privilégios de root (em php etc)?

Agradecemos antecipadamente e cumprimentos Ravermeister

    
por Jonny Rimkus 04.07.2014 / 12:16

3 respostas

4

Corrigir apache2.4 e mpm-itk
Coloque isso em /etc/apache2/conf-enabled/security.conf

<IfModule mpm_itk_module>
    LimitUIDRange 0 6000
    LimitGIDRange 0 6000
</IfModule>

e reinicie o apache .

Isso não é necessário em apache2.2 , mas depois que fiz o upgrade para apache2.4 , meus scripts PHP que estavam usando shell_exec e sudo pararam de funcionar.

    
por user2158987 19.12.2015 / 23:05
1

Acho estranho sugerir desabilitar o mpm-itk, pois pode haver uma razão pela qual ele é realmente usado.

Usamos o mpm-itk (versão 2.4.7-02) com o apache 2.4 e funciona perfeitamente. A única coisa a considerar aqui são as novas diretivas de configuração

LimitUIDRange

e

LimitGIDRange

Essas diretivas definem quais UIDs e GIDs o mpm-itk pode usar (via setuid / setguid). Como você obviamente quer que seja capaz de se tornar root, seu intervalo inferior deve ser ID 0. A seguinte configuração funcionará aqui:

<IfModule mpm_itk_module>
    LimitUIDRange 0 6000
    LimitGIDRange 0 6000
</IfModule>

Esteja ciente de que a borda superior deve incluir todas as combinações UID / GID do usuário que você deseja usar em sua configuração via AssignUserID.

Observe que você pode configurá-lo para cada host virtual que você possui. Note também que você precisa de um kernel Linux 3.5.0 ou superior para isso.

    
por Heiko Kopp 12.01.2015 / 15:09
0

Sua configuração de sudoers está correta, na verdade, quando você executa:

  sudo -u www-data /usr/bin/php test.php

funcione como esperado.

Em operação normal, seu apache é executado como root e usa o módulo mpm-itk . Aqui está o problema.

De acordo com a documentação do mpm-itk :

% bl0ck_qu0te%

e:

% bl0ck_qu0te%

Isso significa que o processo mpm-itk fork apache e o uso de setuid () para atribuir o usuário desejado a cada host virtual.

De acordo com o manual do setuid :

% bl0ck_qu0te%

Isso já poderia explicar, mas não estou convencido, eu baixei a fonte do mpm-itk e notei que ele mudou capacidade permitem e restringem o intervalo de uid de 1 a UINT_MAX.

% bl0ck_qu0te%

Minha conclusão é que usando mpm-itk seus scripts php não podem obter permissão de root.

Se tiver a oportunidade, pode verificar se está a executar o apache como www-data e a desativar o módulo mpm-itk o seu test.php funciona.

    
por Lety 17.07.2014 / 01:08