모든 사람, IUSR, IIS_IUSRS, DefaultAppPool에 대한 쓰기 액세스가 작동하지 않습니다. 왜?


10

확인. 여기에서는 Windows Server 2008 R2의 IIS 7.5에서 Classic ASP 웹 사이트를 설정하려고합니다. 웹 사이트의 루트 아래에 dbc라는 폴더가 있으며 모든 페이지가 처리되는 동안 특정 정보를 읽고 쓰는 데 사용되는 파일이 있습니다.

문제는 IUSR 쓰기 권한 및 IIS_IUSRS 쓰기 권한 또는 DefaultAppPool 쓰기 권한을 부여하면 " 'E : .. \ websiteroot \ dbc \ filename.txt'경로에 대한 액세스가 거부되었습니다"라는 메시지가 나타납니다.

그러나 해당 dbc 폴더에 대해 모두 쓰기 권한을 부여하면 오류가 발생하지 않으며 모든 것이 완벽 해 보입니다.

추가 정보 : 웹 사이트가 클래식 파이프 라인 모드에서 실행되고 익명 인증이 활성화되어있을 수 있습니다 (아마도 유일한 인증이 활성화 된 것임). IUSR 계정과 응용 프로그램 풀 ID를 사용하여 익명 인증을 시도했습니다. 필자의 경우 ApplicationPoolIdentity는 웹 사이트 인증을위한 ID입니다. 파일 I / O에는 COM +를 사용합니다. Classic ASP Server.CreateObject를 사용하여 객체를 인스턴스화합니다. COM +는 네트워크 서비스로 실행됩니다.

생각? 모두에게 쓰기 권한을 부여하고 싶지 않습니다. 뭔가 빠졌습니까?

해결 : 여기 내가 한 일이 있습니다.

CipherDemo라는 내 웹 사이트는 IIS 7.5의 AppPoolIdentity에서 실행되고 있으며 이는 Identity IIS AppPool \ CipherDemo에 의해 찾을 수 있습니다. ICACLS를 사용하여 해당 폴더에 대한 RW 권한을 부여했습니다.

실제로 파일 I / O를 수행 한 COM +는 네트워크 서비스 ID로 실행되었습니다. 프로세스 모니터를 사용하여 액세스 거부 오류를 추적 할 때 네트워크 서비스에 해당 폴더에 대한 읽기 권한 만있는 것으로 나타났습니다.

ICACLS "foldername"/ grant : r "NT AUTHORITY \ NETWORKSERVICE":( OI) (CI) RXW / T를 사용하여 해당 폴더에 대한 쓰기 권한을 부여했습니다.

그리고 그것을 해결했습니다.

웹 사이트가 CipherDemo Identity로 실행되므로 COM +를 통해 파일에 액세스하는 데 사용되는 계정이 될 것입니다. 그러나 COM +가 여전히 자체 ID 경계에서 작동한다는 것을 알아내는 것은 당혹 스럽습니다.

답변:


5

IIS 7.5 (및 선택적으로 IIS 7)에서 모든 작업자는 응용 프로그램 풀 ID (사용자 "IIS AppPool * PoolName *")로 실행됩니다.

Everyone이 아닌 해당 사용자에게 액세스 권한을 부여하십시오. 이름을 선택 ID 대화 상자에 입력해야합니다. 찾기 기능에는 표시되지 않습니다.

iis.net 에는 매우 자세한 내용을 다루는 매우 유용한 페이지 가 있습니다.

참고 : IIS7 (Server 2008)에서 :

  • 고급 설정에서 앱 풀별로 앱 풀 ID를 설정합니다.
  • GUI 지원이 없으므로 권한을 설정하려면 명령 줄이 필요합니다 ( icacls.exe).

마지막으로 SQL 서버의 ID 선택 응용 프로그램 풀 ID 중 하나에 대해 알고하지 않습니다 사용 CREATE LOGIN하고 CREATE USER처음에,이 후 GUI가 부여 역할 등을 사용할 수있다


@Richard-그렇습니다. 빠른 응답에 감사드립니다. msdn 포럼은 요즘 매우 유용하지 않습니다. Comin back ... 나는 며칠 동안 IIS.net 웹 사이트와 serverfault 주변에서 버그를 범했습니다. IIS 7.5 / Win server 2008 R2에서 기본 응용 프로그램 풀 ID를 사용합니다. 그래서 'dbc'폴더에 대한 IIS APPPOOL \ DefaultAppPool Wite 권한을 부여했습니다. 또한 해당 폴더에 대한 IUSR 및 IIS_IUSRS 쓰기 권한을 부여했습니다. 모든 사람에게 쓰기 권한을 부여해도 여전히 작동하지 않습니다. 내가 놓친 것이 있다는 것을 알고 있습니다. 도와 드릴까요?
gmaran23

@ gmaran23 : 명백한 단계가 작동하지 않으면 프로세스 모니터 를 사용 하여 실패한 항목을 정확하게 확인합니다 (그리고 종종 열린 파일이 너무 많은 액세스를 요구하거나 ACL을 올바르게 설정하지 못했습니다. 그렇지 않으면 파일이 열려 있습니다).
Richard

@Richard-FileMode.Open, FileAccess.ReadWrite를 사용하여 c #에서 파일 리더로 읽기 / 쓰기 작업을 수행합니다. -그 부분이 좋다고 생각합니다. 다른 파일이 열려 있습니다. 가능성이 없기 때문에 이것을 배제 할 수있을 것 같습니다. ACL에 문제가 있습니다. 확인하고 여기에 게시하겠습니다. 또한 프로세스 모니터를 시도합니다. 도움을 주셔서 감사합니다 :)
gmaran23

@ gmaran23 : 작동하지 않으면 항상 테스트하는 것을 알고 있다고 가정하지 마십시오. 나는 무언가가 사실이거나 사실이 아니기 때문에 수년 동안 너무 많은 시간을 낭비했습니다.
Richard

1
@ gmaran23 : 도구를 사용하여 무슨 일이 일어나고 있는지 정확하게 확인하십시오. 문제를 체계적으로 추측하지 않고 있습니다. (1) 프로세스 탐색기를 사용하여 파일이 열려 있지 않은지 확인하십시오. (2) 프로세스 모니터를 사용하여 어떤 액세스가 요청되고 어떤 ID (및 올바른 파일이 있는지)로 확인하십시오. (3) 파일의 ACL에 대해 # 2의 결과를 다시 확인하십시오 (자세한 내용은 고급 보안 속성을여십시오). (4) 한 가지를 조정하고 고정 될 때까지 # 1로 이동하십시오. 몇 번의 반복 후에도 여전히 멈춰 있으면 Q를 세부 사항으로 확장하십시오 (특정).
Richard

5

NTFS GUI를 통해 직접 입력하여 계정을 추가 할 수 있습니다. 이름은 IIS APPPOOL\<<app pool name>>예를 들어 형식입니다 IIS APPPOOL\DefaultAppPool. (이 Microsoft 지원 기사 참조 )

대안 솔루션 : "네트워크 서비스"계정을 쓰기 권한을 부여하는 응용 프로그램 풀 사용자로 사용하고 있습니다.


맞아요, 그 팁은 좋지만 이미 그랬습니다. 응용 프로그램 풀에 기본 "ApplicationPoolIdentity"를 사용합니다. 그리고 'dbc'폴더에 대해 이미 IIS AppPool \ DefaultAppPool에 대한 쓰기 권한을 부여했습니다. 그러나 모든 사람에게 쓰기 권한을 부여 할 때까지는 여전히 작동하지 않습니다.
gmaran23

1

특정 사용자에게 폴더 쓰기 권한 만 부여하려면 사이트의 '익명 사용자 ID'를 '응용 프로그램 풀 ID'가 아닌 '특정 사용자'로 변경해야합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.