FastCGI를 통해 PHP를 가장해야합니까?


16

FastCGI를 통해 IIS 7.5에 최신 버전의 PHP를 설치하고 있으며 모든 지침에 따르면 FastCGI는 설정하여 호출 클라이언트를 가장해야한다고 말합니다.

 fastcgi.impersonate = 1

내 웹 사이트에이 구성이있는 경우

  • 전용 응용 프로그램 풀
  • ApplicationPoolIdentity의 응용 프로그램 풀 ID
  • 익명 인증 만 (IUSR로)

내가 가장하고 싶은 이유는 무엇입니까?

ASP.NET 배경에서 IUSR이 읽기 전용 권한을 얻고 응용 프로그램 풀 ID가 쓰기 권한을 얻습니다. IUSR에 대한 쓰기 액세스 권한을 부여하면 일반적으로 WebDAV 취약점이 생길 수 있습니다. 따라서 PHP를 IUSR로 실행하는 것을 망설입니다.

나는이 질문을하는 많은 사람들을 찾을 수 없기 때문에 ( 1 | 2 ) 뭔가 빠진 것 같아요. 누군가 나를 위해 이것을 명확히 할 수 있습니까?

답변:


17

13 개월 후, 나는 내 자신의 질문을 다시하고 싶었다. 그 당시 저는 6 개 웹 사이트를 IIS 6에서 IIS 7.5로 이전하고 선호하는 방법으로 구성했습니다. 내가 말할 수있는 것은 웹 사이트가 작동하고 보안 문제가 없었으며 (이 사이트는 인기있는 사이트는 아닙니다) 내 의견으로는 설치가 learn.iis.net이 권장하는 것보다 더 안전하다는 것입니다.

후손을 위해 관련 설정은 다음과 같습니다. PHP INI에서 :

cgi.force_redirect = 0
cgi.fix_pathinfo=1
fastcgi.impersonate = 0

IIS에서 :

  • 응용 프로그램 풀> 자격 증명> ApplicationPoolIdentity
  • 웹 사이트> 인증> 익명 인증> 특정 사용자 : IUSR

NTFS 권한 및 적용 위치 :

  • IUSR- 그랜트 읽기, 쓰기 거부
    • IIS 웹 사이트의 루트 디렉토리 예를 들어 Zend Framework 프로젝트에서이 디렉토리는 / public 디렉토리입니다.
    • 응용 프로그램이 파일을 업로드하여 공용 디렉토리에 저장하는 경우이 권한을 임시 업로드 디렉토리에 적용해야합니다. move_uploaded_file업로드 디렉토리의 권한을 유지 하기 때문 입니다. 이것이 내가 찾은 권한 설정의 가장 큰 단점입니다.
  • ApplicationPoolIdentity ( IIS AppPool\<<YourApplicationPoolName>>)-읽기 및 목록 부여
    • PHP 응용 프로그램의 루트 예를 들어 Zend Framework 프로젝트에서는 전체 프로젝트가됩니다.
    • 응용 프로그램 폴더에없는 응용 프로그램에 포함 된 모든 외부 라이브러리 (Zend, Doctrine 등)
  • ApplicationPoolIdentity- 그랜트 수정
    • 응용 프로그램이 같은 기록 할 모든 위치 upload_tmp_dir, session.save_patherror_log.
    • 때로는 Doctrine의 프록시 자동 생성 과 같은 기능을 지원하기 위해 개발 환경에서 PHP 응용 프로그램의 루트에이 권한을 추가해야합니다 .
  • ApplicationPoolIdentity- 보조금 목록
    • 응용 프로그램이 가상 디렉터리에있는 경우이 권한을 웹 사이트의 루트에 추가해야합니다. 이를 통해 응용 프로그램은 부모 web.config를 읽을 수 있습니다. 예를 들어, 애플리케이션 루트가 http://example.com/MyPHPApp 인 경우 example.com 웹 디렉토리에서이 권한을 설정하십시오. 특히이 컨테이너 내에서만 "이 폴더 및 파일"에만 적용하면됩니다.

이것이 learn.iis.net 지침이 이상적이지 않다고 결정하는 다른 사람들에게 도움이되기를 바랍니다.


고마워요! 자동화 할 배치 스크립트를 추가했습니다. 내 설치에 잘 작동합니다.
Sire

Impersanation을 활성화하고 인증> 익명 액세스> 편집을 응용 프로그램 풀 ID로 설정해야합니다. 그런 다음 IIS APPPOOL \ <응용 프로그램 풀 이름>을 사용하여 파일 시스템 권한 설정하십시오.
Monstieur

@Kurian 네, 그 접근 방식은 더 간단하고 learn.iis.net 지침에 따릅니다. 다른 이점이 있습니까? 위에서 설명한 시스템은 응용 프로그램의 권한과 웹 사용자의 권한을 분리하기 때문에 선택했습니다.
WimpyProgrammer

여러 응용 프로그램이 서로의 데이터에 액세스하지 못하게합니다. 한 응용 프로그램이 해킹 된 경우 ApplicationPoolIdentity가 없으면 해당 서버의 다른 응용 프로그램을 해킹하는 데 사용할 수 있습니다. 둘째, 권한에 관한 한 ASP.NET과 동일하게 FastCGI를 처리 할 수 ​​있습니다.
Monstieur

나는 첫 번째 부분에 동의합니다. ApplicationPoolIdentity는 샌드 박싱 응용 프로그램에 적합하므로 위에서도 사용합니다. 두 번째로 ASP.NET 사이트를 다르게 관리한다고 생각합니다. ASP.NET 사이트를 설정할 때 익명 사용자의 경우 IUSR을 사용하고 응용 프로그램 풀의 경우 ApplicationPoolIdentity를 사용하며 권한은 위에서 설명한 것과 매우 유사합니다.
WimpyProgrammer 2009 년

1

참조 : http://www.php.net/manual/en/install.windows.iis6.php

가장 및 파일 시스템 액세스

IIS를 사용할 때 PHP에서 FastCGI 가장을 활성화하는 것이 좋습니다. 이것은 php.ini 파일의 fastcgi.impersonate 지시문에 의해 제어됩니다. 가장이 활성화되면 PHP는 IIS 인증에 의해 결정된 사용자 계정 대신 모든 파일 시스템 작업을 수행합니다.

문서 당, 그것은 단지 모든 동일한 권한을 사용하여 클라이언트를 대신하여 fastcgi가 작동하도록 허용합니다 (귀하의 경우 IUSR 계정처럼 보입니다). 즉, 일반적으로 클라이언트 (또는 익명) 자신의 자격 증명에 허용 된 모든 작업을 수행합니다. 그 이상도 이하도 아닌. 이 세트가 없다면, 나쁜 fastcgi가 무너질 것이라고 생각합니다.


그의 상황에서는 게스트 계정 또는 무언가를 기반으로 액세스하고 있습니다.
Matt

답변 Matt와 Bob에 감사드립니다! 나는 아무도 찌르지 않을 것이라고 생각하기 시작했다.
WimpyProgrammer

2
가장없이 PHP를 실행하면 응용 프로그램 풀 ID로 실행됩니다. 그러면 익명 사용자에게 읽기 전용 권한을 부여하고 앱 ID에 대한 쓰기 권한을 부여 할 수 있습니다. 따라서 PHP는 가장이 없으면 무력하지 않습니다. 명확히 할 수있는 테스트를 만들었습니다. IUSR (anon) : 읽기 허용, 쓰기 거부 앱 ID : 읽기 / 쓰기 권한이 부여되었습니다. 가장을 끈 상태에서도 코드를 통해 파일을 작성할 수 있습니다. 가장을 설정하면 할 수 없습니다. 그러나 IUSR이 쓰기 권한을 갖기를 원하지 않습니다. 다른 포럼에서 몇 가지 질문을하고 더 많이 알게되면 여기로 돌아갈 것입니다.
WimpyProgrammer 2016 년
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.