Permitir que www-data execute comandos específicos

0

Eu preciso de um script PHP para executar, git pullmas não sou ingênuo o suficiente para conceder permissões git. Eu envolvi git pullum script que www-datapossui permissões para, mas não sei como atribuir permissões ao script git:

$ sudo tail -n1 /etc/sudoers
www-data ALL=(ALL) NOPASSWD: /home/php-scripts/git-pull

$ cat /home/php-scripts/git-pull
#!/bin/bash
/usr/bin/git pull

$ ls -la /home | grep php-scripts
drwxr-xr-x  2 ubuntu ubuntu 4096 Sep  3 09:26 php-scripts

$ ls -la /home/php-scripts/git-pull
-rwxrwxr-x 1 ubuntu ubuntu 30 Sep  3 08:44 /home/php-scripts/git-pull

$ cat /var/www/public_html/git-wrapper.php
<?php

$output = array();
$value = 0;
exec("/home/php-scripts/git-pull", $output, $value);

echo "<pre>";  
echo "Return Value: {$value}\n";

foreach ( $output as $o) {
    echo $o."\n";
}

?>

Note que /var/www/public_html/é de fato um repositório git. Costumo executar git pullnesse diretório a partir da CLI. No entanto, quando chamo esse script em um navegador da Web, vejo que os arquivos não foram atualizados via git pulle o seguinte é enviado para o navegador:

Return Value: 1

Este é no Ubuntu Server 12.04 com Git 1.7.9.5. O repositório remoto está no mesmo servidor.

dotancohen
fonte
1
/usr/bin/git pull >/tmp/git.log 2>&1e ver o que o erro
Alex

Respostas:

2

Seu script é executado em www-data:www-dataSuponho. Você deve executar o git pullcom um usuário que tenha permissão de gravação no seu repositório clonado. Você configurou sudo, mas não o chama em nenhum lugar que não faça muito sentido (sem dizer que você precisa fazer isso). Verifique sob qual usuário você está executando e, em seguida, mude para o apropriado, se necessário, e ajuste as permissões no seu repositório clonado de acordo.

Miroslav Koškár
fonte