%3B%60%EC%9D%84%20%EC%88%98%ED%96%89%ED%95%A0%20%EC%88%98%20%EC%97%86%EC%8A%B5%EB%8B%88%EB%8B%A4..png)
스크립트를 실행하면 <?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에서 얻을 수 있는 보안 이점을 완전히 무효화하며 후자에는 자체적인 잠재적인 문제가 있습니다.