2013-11-22 2 views
1

IIS 사용자에게 폴더 사용 권한을 부여해야합니다.
는 사실은 내가 ...이 ...C#에서 IIS 사용자의 폴더 사용 권한을 부여하는 방법?

public static void AddDirectorySecurity(string FileName, string Account, FileSystemRights Rights,AccessControlType ControlType) 
{ 
    DirectoryInfo dInfo = new DirectoryInfo(FileName); 
    DirectorySecurity dSecurity = dInfo.GetAccessControl(); 
    dSecurity.AddAccessRule(
     new System.Security.AccessControl.FileSystemAccessRule(objUser, Rights, ControlType)); 
    dInfo.SetAccessControl(dSecurity); 
} 

이 같은이 위의 메소드를 호출처럼

void givepermission() 
{ 
    DirectoryInfo a = new DirectoryInfo(Server.MapPath("~/resources")); 
    AddDirectorySecurity(Server.MapPath("~/"), "IUSR", FileSystemRights.FullControl,AccessControlType.Allow); 
} 

그러나 로컬의 작업을 코드를 썼다. 서버가 작동하지 않을 때.

대신 IUSR의 내가 대신 .. IIS_IUSRS

를 계정 이름을 다음과 같은 시도했지만 그 또한 작동하지 않는 ...


IIS_IUSRS
IIS_WPG
네트워크 서비스
모두
등. 나는 또한이 같은 시도 ...

System.Environment.MachineName + "\\IIS_IUSRS" 

IIS_IUSRS_System.Environment.MachineName 

System.Environment.UserDomainName + "\\IIS_IUSRS" 

etc.. 

하지만이 또한 작동하지 않는, 그러나

참고 "일부 또는 모든 신원 참조 변환 할 수 없습니다" 을 던지고 : 내가하고 싶지 않아 권한을 수동으로 설정하십시오.

제발 좀 도와주세요. Application Pool Identities 기사에 기반

+1

는 사용자가 응용 프로그램에서 실행 등의 권한을 설정할 수있는 권한이있다 계정 있습니까? –

+0

이 IIS 7.5입니까? –

답변

4

:

IIS는 의 Windows Server 2008 서비스 팩 2 (SP2) 및 Windows Vista의 새로운 보안 기능을 소개합니다. 응용 프로그램 풀 신원이라고합니다. 응용 프로그램 풀 ID를 사용하면 도메인 또는 로컬 계정을 만들고 관리하지 않고도 고유 계정으로 응용 프로그램 풀을 실행할 수 있습니다. 응용 프로그램 풀 계정 의 이름은 응용 프로그램 풀의 이름과 일치합니다.

Here의 무슨의 좋은 설명 :

윈도우 7에서 IIS 응용 프로그램 풀 격리가 다른 수준으로 아직 촬영했다. IIS7 (Windows Server 2008)에 도입 된 새로운 변경 사항은 응용 프로그램 풀을 AppPoolIdentiy로 실행하는 새로운 옵션입니다. 그러나 IIS7의 응용 프로그램 풀 ID의 기본값은 - NetworkService입니다. IIS7.5에서 AppPoolIdentiy는 기본값이됩니다. 따라서 이전에 응용 프로그램 풀 ID의 권한이 "NT Service \ NetworkService" 으로 설정 될 것으로 예상되는 스크립트는 이제 각 새 응용 프로그램 풀에 대해 만든 사용자 계정 인 "IIS AppPool \"에 대한 사용 권한 (ACL)을 설정해야합니다.

따라서,을 DefaultAppPool에 대한 권한을 설정, 스크립트가 필요에 대한 ACL을 설정하는 것입니다 "AppPool을 \을 DefaultAppPool을 IIS".

+1

UR 답장을 보내 주셔서 감사합니다 ..하지만 나는 심지어 IIS AppPool \ DefaultAppPool을 사용했습니다 ...하지만 여전히 작동하지 않습니다 .. – msgopalkrish

0
public static void FolderPermission(String accountName, String folderPath) 
    { 
     try 
     { 

      FileSystemRights Rights; 

      //What rights are we setting? Here accountName is == "IIS_IUSRS" 

      Rights = FileSystemRights.FullControl; 
      bool modified; 
      var none = new InheritanceFlags(); 
      none = InheritanceFlags.None; 

      //set on dir itself 
      var accessRule = new FileSystemAccessRule(accountName, Rights, none, PropagationFlags.NoPropagateInherit, AccessControlType.Allow); 
      var dInfo = new DirectoryInfo(folderPath); 
      var dSecurity = dInfo.GetAccessControl(); 
      dSecurity.ModifyAccessRule(AccessControlModification.Set, accessRule, out modified); 

      //Always allow objects to inherit on a directory 
      var iFlags = new InheritanceFlags(); 
      iFlags = InheritanceFlags.ContainerInherit | InheritanceFlags.ObjectInherit; 

      //Add Access rule for the inheritance 
      var accessRule2 = new FileSystemAccessRule(accountName, Rights, iFlags, PropagationFlags.InheritOnly, AccessControlType.Allow); 
      dSecurity.ModifyAccessRule(AccessControlModification.Add, accessRule2, out modified); 

      dInfo.SetAccessControl(dSecurity); 
     } 
     catch (Exception ex) 
     { 
      MessageBox.Show("Error"); 
     } 
    } 
관련 문제