php에서는 `shell_exec('git pull Origin master 2>&1');`을 수행할 수 없습니다.

php에서는 `shell_exec('git pull Origin master 2>&1');`을 수행할 수 없습니다.

스크립트를 실행하면 <?php chdir('/var/www/html'); echo shell_exec('git pull origin master 2>&1'); ?>다음과 같은 오류 메시지가 나타납니다.

error: cannot open .git/FETCH_HEAD: Permission denied

내가 한 일은 다음과 같습니다.

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

이제 내가 갈 때 http://example.com/pull.php오류가 발생합니다 cannot open .git/FETCH_HEAD: Permission denied.

내 권한을 확인하기 위해 루트로 로그인하여 chown -R apache:apache /var/www. 내 안에도 이거 있어요/etc/passwd

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

내가 도대체 ​​뭘 잘못하고있는 겁니까?

답변1

SELinux는 웹 서버가 임의의 디렉토리에 쓰는 것을 허용하지 않습니다. 기본 컨텍스트를 설정 httpd_sys_rw_content_t한 다음 기존 파일의 컨텍스트를 설정 하여 SELinux에서 쓰기 가능하도록 허용해야 하는 디렉터리를 명시적으로 정의해야 합니다 . 예를 들어:

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

하지만 웹 서버가 전체 사이트를 쓸 수 있도록 설정하거나 를 직접 호출하는 웹 페이지를 설정해서는 안 됩니다 git. 이 두 가지 모두 SELinux에서 얻을 수 있는 보안 이점을 완전히 무효화하며 후자에는 자체적인 잠재적인 문제가 있습니다.

관련 정보