경로에 대한 액세스가 거부되었습니다


165

이 질문이 여기에서 여러 번 요청되었지만 내 문제에 대한 해결책을 찾을 수 없습니다. .net c #의 폴더에 이미지를 저장하려고하지만이 예외가 발생합니다.

Access to the path 'C:\inetpub\wwwroot\mysite\images\savehere' is denied.The error occured at mscorlib because    at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)
at System.IO.FileStream.Init(String path, FileMode mode, FileAccess access, Int32 rights, Boolean useRights, FileShare share, Int32 bufferSize, FileOptions options, SECURITY_ATTRIBUTES secAttrs, String msgPath, Boolean bFromProxy, Boolean useLongPath)
at System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access, FileShare share, Int32 bufferSize, FileOptions options, String msgPath, Boolean bFromProxy)
at System.IO.FileStream..ctor(String path, FileMode mode)

이 폴더 (저장소) network serviceiis_iusrs에 대한 모든 권한을 부여 했으며 모든 권한을 부여 everyone했지만 여전히이 예외가 발생했습니다. 탐색기와 IIS 관리자를 통해 액세스를 시도했지만 여전히 운이 없습니다.

Windows Server 2008 R2 및 IIS 7.5에서 수행하고 있습니다. 누가 액세스 권한을 부여해야합니까?

감사


응용 프로그램과 관련된 경로를 사용해 보셨습니까? Windows 서버에 대해서는 잘 모르지만`C :`루트 경로에 대한 액세스를 허용하지 않을 수 있습니다.
Michael K

1
향후 독자 : 파일에 대한 권한을 확인하십시오.
Ruskin

답변:


94

웹 사이트의 응용 프로그램 풀에서 웹 사이트에서 실행중인 ID (기본적으로이)가 무엇인지 Application Pool Identity확인하고 올바른 권한을 부여해야합니다.


알았어, 고마워, 나는 5 개의 수영장이 있고, 그들은 모두 정체성을 가지고 있습니다 ApplicationPoolIdentity. 어떻게 그것에 권한을 부여합니까?
Burjua

22
@Burjua- IIS APPPOOL\DefaultAppPool사용자를 찾으십시오 . 공식 IIS 사이트에서이 문서를 참조하십시오 : learn.iis.net/page.aspx/624/application-pool-identities
오디드

1
좋아,이 기사에 쓰여진 것처럼 나는 그것을 추가 DefaultAppPool하고 full control권한을 부여했지만 여전히 같은 오류가 발생합니다
Burjua

2
나는 너무 늦었다는 것을 안다. 그러나 나는 같은 문제에 직면하고 있습니다. OP는 그가 everyone모든 권한을 부여했다고 분명히 언급했다 . everyone모든 권한 을 부여해도 액세스 권한을 부여해야 DefaultAppPool합니까? 혼란 스럽습니다.
qurban

3
@ stom-물론 모범 사례는 아닙니다. 웹 사이트를 모든 종류의 취약점에 노출시키고 있습니다. Images웹 사이트를 실행하는 사용자 / 아이덴티티 의 디렉토리에 대한 읽기 / 쓰기 권한 이 필요합니다 (호스트 제공 업체에 문의해야 함).
Oded

223

'C : \ inetpub \ wwwroot \ mysite \ images \ savehere'경로에 대한 액세스가 거부되었습니다.

메시지를주의 깊게 읽으십시오. 디렉토리와 이름이 같은 파일에 저장하려고합니다. 작동하지 않습니다. 하나의 새 파일로 파일로 채워진 디렉토리를 덮어 쓸 수 없습니다. "경로에 대한 액세스가 거부되었습니다"라는 진단 불가능한 데이터 손실이 발생할 수 있습니다.

예외 메시지는 이상적이지 않지만 OS에서 직접 제공되며 스톤으로 캐스팅됩니다. 프레임 워크는 종종 더 나은 메시지를 생성하기 위해 추가 검사를 추가하지만 이는 네트워크에서 값 비싼 테스트입니다. 성능도 기능입니다.

'C : \ inetpub \ wwwroot \ mysite \ images \ savehere \ mumble.jpg'와 같은 이름을 사용해야합니다. 경로 이름을 안정적으로 생성하려면 Path.Combine () 을 고려하십시오 .


19
@Hans Passant 약간 가혹한 진술에 감사드립니다. 그것은 내가 같은 오류를 만들었다는 것을 깨닫게 내 코드를 살펴 보았다.
LosManos

나를 위해, 문제는 파일이 존재하고 사용자가 그것을 대체 할 수 있다는 것입니다
VinnyG

하! 나는 똑같은 일을했다.
jakejgordon

이 스레드는 "나도!"로부터 보호하기 위해 잠 가야합니다. 답변. 나도 그래! 필자의 경우 HttpPostedFileBase 객체의 SaveAs 메서드에 경로 외에도 이름이 필요하다는 점에 짜증이 났음을 추가해야합니다. 이름은 객체의 다른 속성입니다. 물론 나는 당신이 이런 식으로 다른 이름을 줄 수 있다고 생각합니다.
랄프

1
(IIS 또는 아무것도 웹 관련과는 아무) 단위 테스트에서 파일을 작성하는 동안이 오류를 얻고, 오류 메시지는 너무 막연. "\ path \ to \ file을 파일로 열 수 없습니다"라는 줄에 어떤 내용이 표시되지 않는 이유는 무엇입니까?
MarioDS

22

서버에서 파일 (실제로는 템플릿의 사본 인 파일)을 만들려고 할 때 동일한 문제가 발생했습니다.

완전한 오류 메시지는 다음과 같습니다.

{ERROR} 08/07/2012 22:15:58 - System.UnauthorizedAccessException: Access to the path 'C:\inetpub\wwwroot\SAvE\Templates\Cover.pdf' is denied.

TemplatesIIS 앱 폴더 안에 새 폴더를 추가했습니다 . 필자의 경우 매우 중요한 것은 해당 폴더의 IUSR 사용자에게 쓰기 (Gravar) 권한을 부여해야한다는 것입니다. 당신은 또한 제공해야 할 수 있습니다 Network ServiceASP.NET v$.#같은 쓰기 권한.

여기에 이미지 설명을 입력하십시오

이 작업을 수행하면 모든 것이 예상대로 작동합니다.


12

나는 정확히 같은 문제가 있었다.

해결책은 액세스하려고했던 파일이 읽기 전용 인 템플릿 파일에서 복사 되었기 때문에 읽기 전용이었습니다.

<페이스 팜 />


Altova AltovaXML 애플리케이션 클래스 (DCOM)가이를 수행하고 있습니다. 문제가 발생했습니다.
Mike D

즉, 다음 줄과 비슷한 것을 사용해야합니다. 즉 XSLT는 읽기 전용이 아니어야합니다. 'FileStream ms = 새 FileStream (경로, FileMode.Open, FileAccess.ReadWrite);'
Mike D

1
여기에 <facepalm />도 있습니다. 아 .. 고마워요, 읽기만 내 문제였습니다.
Cătălin Rădoi

7

파일 이름을 설정하지 않고 파일을 저장하려고 할 때이 문제가 발생했습니다.

이전 코드

File.WriteAllBytes(@"E:\Folder", Convert.FromBase64String(Base64String));

작업 코드

File.WriteAllBytes(@"E:\Folder\"+ fileName, Convert.FromBase64String(Base64String));

6

내 문제는 읽기 권한 만 요청해야한다는 것입니다.

FileStream fs = new FileStream(name, FileMode.Open, FileAccess.Read);

1
빙고-이것도 나 조금! 게시물 주셔서 감사합니다!
paulsm4

4

웹 응용 프로그램의 응용 프로그램 풀 ID로 문제를 해결하려면 네트워크 서비스를 ID로 사용하여 새 응용 프로그램 풀을 만들고 웹 응용 프로그램에서 사용자가 만든 새 응용 프로그램 풀을 사용하도록하고 오류가 지속되는지 확인하십시오.


4

다음 팁 이 스레드의 원래 질문에 대한 대답은 아니지만 방금했던 것과 같은 어리석은 실수를 한 후에이 웹 페이지를 방문하는 다른 사용자에게 도움이 될 수 있습니다 ...

" 숨겨진 공유 " 가 포함 된 네트워크 주소에 파일을 업로드하기 위해 ASP.Net FileUpload 컨트롤을 가져 오려고했습니다 .

\ MyNetworkServer \ c $ \ SomeDirectory 또는 기타

나는 그것을 이해하지 못했다. Visual Studio에서 디버그 모드로 웹 페이지를 실행하면 정상적으로 작동합니다. 그러나 프로젝트가 배포되고 응용 프로그램 풀 사용자를 통해 실행되면이 네트워크 디렉토리를 찾지 못했습니다.

IIS 사이트를 실행중인 사용자를 확인하고이 사용자에게 " MyNetworkServer "서버 등 의이 디렉토리에 대한 전체 권한을 부여 했지만 아무 것도 작동하지 않았습니다.

그 이유는 물론 관리자 만이이 숨겨진 드라이브 공유를 "볼"수 있기 때문입니다.

내 솔루션은 단순히 "정상적인"공유를 만드는 것이 었습니다.

\ MyNetworkServer \ SomeDirectory 또는 기타

"경로에 대한 액세스 ...가 거부되었습니다"오류가 제거되었습니다. FileUpload가 명령을 성공적으로 실행할 수있었습니다

fileUpload.SaveAs(networkFilename);

이것이 내가했던 것과 같은 실수를하는 다른 사용자에게 도움이되기를 바랍니다!

큰 파일 (4Mb 이상)을 업로드하는 경우 IIS7에서는 web.config 파일을 곳 에서 수정해야합니다 . 이 링크를 클릭하여 수행해야 할 작업을 읽으십시오. ASP.Net에서 큰 파일 업로드


4

IIS_IUSERS 모든 권한을 폴더에 추가하십시오. 폴더 속성의 보안 탭에서이 옵션을 찾을 수 있습니다. 이 이미지에서이 옵션과 사용자를 찾으십시오


나쁜 조언. 신중하게 고려하지 않고 IIS_USERS에 "모든 권한"을 임의로 부여하는 것은 "간호사-전기 톱"이라고 말하는 것과 같은 도덕적입니다.)
paulsm4

4

이 설정으로 해결했습니다.

IIS> 응용 프로그램 풀> [내 사이트]> 고급 설정 ...> 아이디> 내장 속성> LocalSystem


2
웹 사이트 LocalAdmin 권한을 부여합니다. 이것은 보안 문제입니다.
Rich-Lang

1
LocalSystem 계정으로 웹 사이트를 실행하지 마십시오. 이제까지. 기간.
Mihail Shishkov

@MihailShishkov 왜?
모하마드 호세인 간 자르

2
@MohammadHosseinGanjyar LocalSystem은 시스템에 대한 관리자 권한이 있습니다. 해당 계정으로 웹 사이트를 실행하면 기본적으로 전체 시스템 및 서버가있는 전체 로컬 네트워크에 대한 키를 제공합니다. 즉, 침입자가 웹 사이트를 악용하는 방법을 찾으면 웹 사이트와 전체 시스템이 망가집니다. 이것이 바로 특권 / 권리와 계정이 존재하는 이유입니다. 경험상 소프트웨어는 더 큰 권한으로 실행되어서는 안되며 작업을 수행해야합니다. 예를 들어 블로그 사이트는 D : drive를 포맷 할 권리가 없습니다
Mihail Shishkov

2

내 문제는 다음과 같습니다.

FileStream ms = new FileStream(path, FileMode.Open, FileAccess.ReadWrite);

그러나 경로를 사용하는 대신 File.FullName을 사용해야합니다. 다른 사람에게 도움이 될지 모르겠습니다.이 오류에 대한 내 경험을 전달하십시오!


2
  1. 내장 계정에서 사용자 정의 계정으로 설정을 변경하고 다른 서버의 사용자 이름과 비밀번호를 입력하십시오.

  2. 설정을 클래식 모드 대신 통합 된 상태로 유지하십시오.


1

어쩌면 당신을 도울 수 없습니다.

string tempDirectoryPath = @"C:\Users\HOPE\Desktop\Test Folder";
string zipFilePath = @"C:\Users\HOPE\Desktop\7za920.zip";
Directory.CreateDirectory(tempDirectoryPath);
ZipFile.ExtractToDirectory(zipFilePath, tempDirectoryPath);

0

디렉토리 저장 을 가상 디렉토리로 설정하고 제어판에서 읽기 / 쓰기 권한을 부여하십시오.


실행 inetmgr.exe를이 폴더가 다음으로 이동 savehere 에서 내 사이트 가 DefaultApp가 위치한 왼쪽에있을 것입니다 (웹 응용 프로그램 IIS에서 / 웹 사이트), 내가 u는 내가 말하고있어 희망
거친 대머리

0

내가 쓰려고했던 파일과 같은 이름의 디렉토리가 있었으므로 사람들도 그 디렉토리를 찾을 수 있습니다.


0

로컬 워크 스테이션에서 개발하는 동안이 문제가 발생했습니다.

몇 번의 iisreset호출이 실패한 후 컴퓨터 를 재부팅 하여이 상황을 해결했습니다 .

돌이켜 보면 열린 파일 핸들로 인해 문제가 발생했을 수 있습니다.


0

필자의 경우 IIS 웹 사이트에 .NET 인증 규칙을 추가해야했습니다.

익명 사용자를 허용하는 규칙을 추가했습니다.

.NET 인증 규칙


0

나는 같은 문제가 있었지만 파일을 다른 위치에 저장 한 다음 파일을 복사하고 원하는 위치에 붙여 넣어서 수정했습니다. 기존 파일을 대체하는 옵션을 사용했으며 그 방법을 사용했습니다. 나는 이것이 가장 효율적인 방법은 아니지만 작동하고 15 초 미만이라는 것을 알고 있습니다.


0

특히 로컬에서 실행되는 코드와 관련하여 많은 문제가 있었지만 IIS에서 실행해야 할 때이 오류가 발생했습니다. 내 코드에 검사를 추가하고 응용 프로그램이 첫 번째 실행에서 폴더를 만들도록 허용하면 폴더 인증을 망칠 필요없이 문제가 해결되었습니다.

폴더를 사용하는 메소드를 호출하기 전에 이와 같은 것

bool exists = System.IO.Directory.Exists("mypath");

        if (!exists)
            System.IO.Directory.CreateDirectory("mypath");

0

하위 도메인 에서 파일을 업로드 할 때이 오류가 발생하고에서 올바르게 작동 localhost하면 다음 단계를 따르십시오.

해결책:

플레 스크 패널

  • Plesk Panel에 로그인하십시오. 오류가 발생한 하위 도메인을 선택하십시오.
  • 호스팅 설정을 클릭하십시오 .
  • 추가 쓰기 / 수정 권한을 선택 하고 적용하십시오.

CPanel

  • CPanel에서 사용 가능한 옵션에 대해 잘 모르겠습니다. 그러나 디렉토리에 권한을 부여하면 (CPanel에서는 777, 755와 같은 10 진수이어야 함) 오류가 해결됩니다.

자세한 내용은 여기를 참조하십시오

오류 이유 :

  • FileUpload.SaveAs(Server.MapPath("~/uploads/" + *YOUR_FILENAME*))파일을 업로드 경로로 이동하는 코드가 있다고 가정 하겠습니다.
  • Server.MapPath디렉토리의 실제 경로 (실제 경로)를 제공합니다. 그러나 하위 도메인에 실제 경로에 대한 액세스 권한이 없을 수 있습니다.

  • 따라서 하위 도메인에 쓰기 / 수정 권한에 액세스 할 수있는 권한을 부여하면 문제가 해결됩니다.


0

프로젝트의 웹 속성이 IIS Express로 전환되지 않았는지 확인하고 IIS 로컬로 다시 변경하십시오.


0

대상 System.IO.Delete(string file)이 존재하는 파일 인지 확인하십시오 . 코드에 실수가있을 수 있습니다. 메서드에 올바른 파일 이름을 전달하지 않거나 대상이 폴더입니다. 이 경우 "경로에 대한 액세스 거부 오류"가 표시됩니다.


-1

나는 완전한 권한을 가진 가상 디렉토리를 만들고 거기에 ffmpeg 소스 및 비디오 파일을 추가 했으므로 결국 누구나 사용할 수 있으므로 의미가 있습니다.

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