1

나는 (이 기능이 잘 작동) 배포 교환 그룹을 만들고이 기능을 가지고 :액세스 내가 가장 때 교환 쉘 거부

내 응용 프로그램은 가장을 사용하여 실행해야
private void createDistributionGroup() 
{ 
     System.Security.SecureString pass = new System.Security.SecureString(); 
     foreach (char c in password) 
      pass.AppendChar(c); 
     PSCredential cred = new PSCredential(username, pass); 

     WSManConnectionInfo connection = new WSManConnectionInfo(new Uri("http://[my_exchange].[my_domain].com/PowerShell/"), "Microsoft.Exchange", cred); 
     connection.AuthenticationMechanism = AuthenticationMechanism.Default; 

     Runspace runspace = RunspaceFactory.CreateRunspace(connection); 
     PowerShell ps = PowerShell.Create(); 

     try 
     { 
      runspace.Open(); 
      ps.Runspace = runspace; 
      ps.AddCommand("New-DistributionGroup").AddParameter("Name", "GRP_DIF_" + textBox1.Text)); 
      ps.Invoke(); 
     } 
     finally 
     { 
      runspace.Dispose(); 
      runspace = null; 
      ps.Dispose(); 
      ps = null; 
     } 
    } 

, 나는에 가장 the msdn example를 사용하여 서비스 계정 (MSDN 예제가 잘 작동하고 성공으로 가장합니다).

Access Denied : About remote troubleshooting

나는 즉시

를 사용하여 로컬 PowerShell에서 원격 PowerShell 세션을 열어 테스트 한 : 나는 createDistributionGroup() 기능을 실행하려고 할 때 가장을 할 수 있기 때문에

연결, 작동 가장을 구현하기 전에 오류가 발생합니다

$credential = Get-Credential 
$Session = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri http://[my_exchange].[my_domain].com/PowerShell/ -Authentication Default -Credential $credential 
Import-PSSession $Session 

그리고 세션이 성공적으로 열렸다 ...

  • 서비스 계정 권한 (도메인 관리자도 거부 됨 ...)을 변경했습니다. 영향 없음 :
  • Exchange 서버 (로컬 관리자 그룹 등)에 특별 액세스 권한을 부여합니다. 적용되지 않음 :
  • 스페셜 IIS 사용 권한 (프론트 엔드, 백엔드 등) : 효과 없음

계정을 가장했을 때 액세스가 거부되고 액세스 권한을 부여하는 이유는 무엇입니까?

답변

1

원격 인증을 위해 가장이 작동하지 않습니다. 이 시점에서 로컬 프로세스는 원래 클라이언트라는 원격 프로세스를 증명할 수 없습니다 (실제로 그렇지 않습니다).

Get-Credential에 제공된 자격 증명으로 연결하면 실제 암호가 사용 가능하므로 인증이 이루어집니다.

그래서 이것은 kerberos double-hop 문제입니다. 사람들이 일반적으로 겪는 문제는 아닙니다.

가장을 사용해야하는 경우 원격 컴퓨터에서 다시 인증 할 수있는 방법이 필요합니다.

하나의 가능한 방법은 가장 좋은 방법은 아니지만 가장하는 계정에서 액세스해야하는 암호화 된 파일에 자격 증명을 저장하는 것입니다. 사실이 가장 작동합니다 100 % 확신하지만 해볼만 한 가치가 될 수 있습니다 (사용자가 가장 된 것으로이 실행)

먼저, 암호화 된 자격 증명을 저장 :

$cred = Get-Credential 
$cred | Export-Clixml -Path "C:\Creds\appcred_${env:USERNAME}_${env:COMPUTERNAME}.xml" 

에서 도용 후 응용 프로그램 코드 :

$cred = Import-Clixml -Path "C:\Creds\appcred_${env:USERNAME}_${env:COMPUTERNAME}.xml" 
$Session = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri http://[my_exchange].[my_domain].com/PowerShell/ -Authentication Default -Credential $cred 

이 시퀀스는 일반적으로 작동합니다. XML의 credetial 암호는 사용자 및 컴퓨터와 관련된 키가있는 Windows Data Protection API (DPAPI)를 사용하여 암호화되므로 같은 컴퓨터에서 동일한 사용자 만 암호를 해독 할 수 있습니다.

내가 말했듯이 이것이 가장으로 작동하는지 여부는 알 수 없습니다.

이렇게하면 AD에서 계정 암호를 변경하면 파일을 수동으로 업데이트해야합니다.

+0

마지막으로이 함수를 가장하지는 않습니다. 가장 간단한 방법은 가장 후에이 함수를 호출하는 것입니다. 당신의 설명에 감사드립니다! –

관련 문제