php não me permitirá fazer `shell_exec('git pull origin master 2>&1');`

php não me permitirá fazer `shell_exec('git pull origin master 2>&1');`

Quando executo o script <?php chdir('/var/www/html'); echo shell_exec('git pull origin master 2>&1'); ?>, recebo a mensagem de erro:

error: cannot open .git/FETCH_HEAD: Permission denied

Aqui está o que eu fiz:

ssh [email protected]
pwd # shows that I'm already at /var/www as my home directory
ls .ssh/ # shows that I have id_rsa and id_rsa.pub, and id_rsa.pub is given to github
cd html
git pull origin master # everything downloads perfectly
echo "<?php chdir('/var/www/html'); echo shell_exec('git pull origin master 2>&1'); " > pull.php

Agora, quando vou, http://example.com/pull.phprecebo o erro cannot open .git/FETCH_HEAD: Permission denied.

Para confirmar minhas permissões, fiz login como root para fazer um arquivo chown -R apache:apache /var/www. Eu também tenho isso no meu/etc/passwd

apache:x:48:48:Apache:/var/www:/bin/bash

O que estou fazendo de errado?

Responder1

SELinux não permite que o servidor web grave em diretórios aleatórios. Você precisa definir explicitamente quais diretórios o SELinux deve permitir que sejam graváveis, definindo seu contexto padrão httpd_sys_rw_content_te, em seguida, definindo o contexto de quaisquer arquivos existentes. Por exemplo:

semanage fcontext -a -t httpd_sys_rw_content_t "/var/www(/.*)?"
restorecon -rv /var/www

É quase certo que você não deve tornar todo o site gravável pelo servidor web, nem configurar uma página web que chame diretamente git. Ambos negam completamente quaisquer benefícios de segurança que você teria obtido com o SELinux, e o último tem seu próprio conjunto de problemas potenciais.

informação relacionada