Permitir que o www-data execute comandos específicos

0

Eu preciso de um script PHP para executar git pull . No entanto, não sou ingênuo o suficiente para conceder permissões a git . Eu agrupei git pull em um script para o qual www-data tem permissões, mas não sei como dar as permissões de script em 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";
}

?>

Observe que /var/www/public_html/ é, na verdade, um repositório git. Eu geralmente executo git pull nesse diretório da CLI. No entanto, quando eu chamo este script em um navegador da web, vejo que os arquivos não foram atualizados via git pull e o seguinte é enviado para o navegador:

Return Value: 1

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

    
por dotancohen 03.09.2013 / 11:37

1 resposta

2

Seu script é executado com www-data:www-data , suponho. Você precisa executar o git pull com um usuário que tenha uma permissão de gravação em seu repositório clonado. Você configurou o sudo , mas não o chama em lugar algum que não faz muito sentido (não dizendo 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 em seu repositório clonado de acordo.

    
por 03.09.2013 / 14:19