2013-06-09 3 views
3

php-fpm으로/srv/http의 chroot에 nginx 서버를 만들었습니다. 두 서비스 모두 http 사용자를 사용하며 정상적으로 작동합니다.nginx (chroot 아래)에서 PHP-FPM을 실행하면 아무 것도 반환하지 않습니다.

echo shell_exec('/usr/bin/ls'); 

웹 페이지 또는 오류에는 출력이 전혀 나타나지 않을 때 문제가 발생합니다. 나는 또한 시도했다

error_log(shell_exec('/usr/bin/ls'); 

그리고 아직도 아무것도.

것들 내가 시도 또는 알고했습니다

  1. 안전 모드 해제
  2. 간부 활성화
  3. 사용자입니다 HTTP (사용은 phpinfo())
  4. display_errors를 =
  5. 는 error_reporting = E_ALL
  6. sudo/usr/bin/chroot --userspec = http : http/srv/http ls가 정상적으로 작동합니다.
  7. 파일을 생성하고 file_puts_content와는 fopen/FREAD
  8. 시도 shell_exec, 간부, 시스템을 사용하여 읽기 및 통과 할 수 - 아무것도
  9. 이 명령의 끝에 아무것도
  10. I 2> & 1을 추가하는 시도 일했다
  11. 는, 바이너리 및 /는 SRV/HTTP/www가에서 모든 것을 (웹 페이지가있는 곳) 실행 파일이 있고 읽기 권한
  12. 있는 doc_root는 WWW에게
라이브러리 모든 이상 필요 복사 모든 실행 파일 및 라이브러리했습니다 ' 0

필자가 아는 한, 모든 것은 chroot에서 작동하지만 php-fpm을 통한 쉘 명령은 예외입니다. 누구든지 내가 잘못 가고 어떻게 고쳐야하는지 알 수 있습니까?

답변

0

chroot이 일부 디렉토리에 있으면이 디렉토리는 모든 PHP 스크립트의 루트가됩니다. 즉, PHP에서 /usr/bin/ls을 실행하면 /srv/http/usr/bin/ls을 대신 실행하려고 시도합니다.

실행 파일을 해당 디렉터리로 복사 할 수 있지만 보안 관련 사항을 알고 있어야합니다. 중요한 시스템 실행 파일을 chrooted 디렉토리에 복사하면 기본적으로 chroot의 긍정적 인 효과를 무시합니다.

+0

나는 이미 이것을했다. 나는/srv/http/usr/bin/ls에/usr/bin/ls를 복사했다 (그리고 ldd/srv/http/usr/bin/ls에 필요한 라이브러리를 본 후에) .so 파일을/srv/http/usr/lib. 그리고 그것은 여전히 ​​효과가 없었습니다. 그리고 chroot 내에서 실행할 수있는 # 6을보십시오. 그래서 필요한 파일이 있습니다. – projectdelphai

1

이것은 바보처럼 들리 겠지만 /bin/sh (/bin/bash 아님)을 chroot으로 복사해야합니다. 나도

echo shell_exec('/usr/bin/ls'); 

에 대한 어떠한 출력을 얻을 How do I change the shell for php's exec()

+0

또한'ldd sh'를 사용하여 필요한 라이브러리를 찾으십시오. –

0

: 예를 들어

이 질문을 참조하십시오. 아마도 ls은 파일이 아니고 내장 명령이기 때문일 것입니다.실행 :

echo shell_exec('ls'); 

출력 :

CSS 데모 내 루트 디렉토리에있는 파일의 목록입니다 이미지 JS path.php robots.txt에 routing.php 테스트

의 favicon.ico 사이트 용.