2014-11-11 9 views
5

La coda MSMQ viene creata dal motore DSC PowerShell. Posso vedere le code create. Poiché il motore DSC viene eseguito dall'account SYSTEM, anche il proprietario della coda viene impostato su SYSTEM. Quando provo a impostare MSMQ ACL dalla console PowerShell Ricevo constantemente seguente errore:Problemi durante la configurazione di ACL MSMQ utilizzando il cmdlet PowerShell

PS C:\Users\Administrator.DOMAIN> whoami; Get-MsmqQueue queue1 | Set-MsmqQueueACL -UserName "Everyone" -Allow FullControl 
DOMAIN\administrator 
Set-MsmqQueueACL : Failed to set security descriptor. Error code: 3222143013 
At line:1 char:50 
+ whoami; Get-MsmqQueue incredipay_atm_processor | Set-MsmqQueueACL -UserName "Eve ... 
+             ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
    + CategoryInfo   : InvalidResult: (FullControl:MessageQueueAccessRights) [Set-MsmqQueueACL], Win32Exception 
    + FullyQualifiedErrorId : Failed to set security descriptor. Error code: 3222143013,Microsoft.Msmq.PowerShell.Commands.SetMSMQQueueACLCommand 

anche io non riesco a impostare MSMQ ACL utilizzando risorse DSC personalizzato, che è fondamentalmente facendo la stessa cosa solo da account di sistema. Quindi la domanda è: esiste un modo per impostare le autorizzazioni MSMQ dal motore DSC PowerShell utilizzando il cmdlet Set-MSMQQueueACL. O almeno se sarò in grado di risolvere l'errore citato in precedenza citato, allora forse sarò in grado di risolvere anche il problema DSC. Sono in esecuzione Windows 2012 e WMF 4.0.

Grazie in anticipo.

risposta

1

sono riuscito a superare questo problema utilizzando seguente codice nel mio risorsa DSC personalizzato:

 $ScriptBlock={ 
     param(
      [String] $QueueName, 
      [String] $Username, 
      [String[]] $MessageQueueAccessRight, 
      [ValidateSet("Allow","Deny")] 
      [String] $MessageQueueAccessType 
     ) 
     $params = @{} 
     $queue = Get-MSMQQueue -Name $QueueName 
     $params.Add("InputObject",$queue) 
     $params.Add("Username",$Username) 
     switch ($MessageQueueAccessType) 
     { 
      "Allow" {$params.Add("Allow","$MessageQueueAccessRight"); Break;} 
      "Deny" {$params.Add("Deny","$MessageQueueAccessRight"); Break;} 
     } 
     Set-MsmqQueueACL @params 
    } 
    Foreach($MessageQueueAccessRight in $MessageQueueAccessRights) 
    { 
     Invoke-Command -ScriptBlock $ScriptBlock -ComputerName . -Credential $DomainAdministratorCredential -ArgumentList $QueueName,$Username,$MessageQueueAccessRight,$MessageQueueAccessType 
    } 

Naturalmente è necessario utilizzare lo stesso approccio quando coda MSMQ viene creato da DSC.Pertanto, la creazione della coda MSMQ dovrebbe essere effettuata dallo stesso account, il cui iniziale modifica gli ACL.

2

Ho fatto qualcosa di simile di recente e ho riscontrato lo stesso problema. Devi prima prendere possesso della coda (sono richiesti i diritti di amministratore) e quindi puoi modificare le autorizzazioni.

Provare questi passaggi manuali nello snap-in Gestione computer per verificare che risolva l'errore, quindi individuare la modalità di riproduzione tramite PowerShell.

  • Start -> Esegui -> compmgmt.msc
  • Espandi "Gestione computer (locale) -> Servizi e Applicazioni -> Message Queuing -> Code private"
  • clic destro -> Proprietà -> Sicurezza -> Avanzate -> proprietario -> Altri utenti o gruppi ...
  • inserire il nome utente (DOMINIO \ administrator)
  • Fare clic su OK, quindi nuovamente su OK
  • Si dovrebbe ora essere in grado di modificare la sicurezza tramite script

Ho finito per scrivere un codice PInvoke per assumere la proprietà della coda utilizzando C#, che ho compilato al volo con Add-Type in PowerShell. Non posso condividerlo purtroppo come è proprietaria, ma a questa domanda potrebbe dare alcune indicazioni:

How do I set the owner of a message queue?

P.S. codice di errore 3222143013 è 0xC00E0025, che si traduce in MQ_ERROR_ACCESS_DENIED (vedere http://msdn.microsoft.com/en-us/library/ms700106%28v=vs.85%29.aspx)

0

Per fare questo in DSC, è possibile eseguire il comando utilizzando credenziali diverse per avere il vostro risorsa DSC personalizzato prendere un parametro [PSCredential].

Per eseguire questa operazione in sicurezza è necessario apportare alcune modifiche significative all'infrastruttura DSC. Vedere la mia risposta a questa domanda: https://serverfault.com/questions/632390/protecting-credentials-in-desired-state-configuration-using-certificates/#632836

Se si vuole solo mettere alla prova prima di effettuare tali modifiche, si può dire DSC per consentire la memorizzazione delle credenziali in chiaro utilizzando PSDscAllowPlainTextPassword = $true vostri dati di configurazione (see here for details).

+0

In questo momento sto passando il parametro [PSCredential] alla mia risorsa personalizzata. Sto provando a fare la rappresentazione e poi eseguo i comandi necessari, ma sfortunatamente molte risorse usano ancora SISTEMA mentre vengono eseguiti i comandi dell'utente, nonostante stia cercando di cambiare il contesto di processo con l'account amministratore di dominio. Questo è probabilmente il motivo per cui MSMQ crea code con SYSTEM come proprietario di una coda. –

+0

Modifica la tua domanda per mostrare il codice; dovrebbe aiutarci a rispondere – briantist

+0

La cosa strana è quando provo a impostare ACL per la coda MSMQ (già creata da DSC con SYSTEM come proprietario e accesso completo al controllo) dal contesto di SISTEMA Sto ricevendo un errore (accesso negato) nonostante SYSTEM abbia FullControl accesso alla coda. –

0

Ho anche creato una risorsa DSC personalizzata per configurare/modificare le code MSMQ all'interno della mia Web farm. Poiché DSC viene eseguito come SYSTEM, è necessario assicurarsi che l'account SYSTEM abbia accesso per creare/modificare MSMQ sul nodo.

C'è un modo per fare funzionare DSC come account. In questo caso, devi assicurarti di passare quell'account quando tenti di creare/modificare il tuo MsmqQueue.

Capisco che sto rispondendo a un thread precedente. Ma qualcun altro nel prossimo futuro potrebbe affrontare lo stesso problema e imbattersi in questo thread.

Buona & Buona fortuna!

Problemi correlati