Remote Desktop Services – Funzionalità di Shadowing delle Sessioni ed implementazione di Assistenza Remota

La funzionalità di Shadowing delle sessioni remote è presente da diverso tempo in RDS, sebbene abbia vissuto fasi alterne nel tempo, come è possibile leggere in questo Post di Ermanno Goletto. Per chi non la conoscesse, si tratta della possibilità di accedere, in modalità visualizzazione o controllo, ad una sessione RDP attiva su un session Host.

In una infrastruttura RDS è possibile sfruttare questa funzione per fornire assistenza e supporto agli utenti, interagendo con le loro attività.

Di default è attiva ed è utilizzabile direttamente da Server Manager nel contesto di gestione della Farm RDS, è sufficiente individuare la Collection, ed identificare la sessione a cui connettersi

Server Manager\Remote Desktop Services\Collections\Desktop1

Identificata la sessione, con il dato DX selezionare Shadow

Figura 1 selzione della sessione connessa

Si apre a questo punto una maschera in cui viene richiesto di specificare la modalità di connessione, ossia se in sola visualizzazione o in controllo e quindi in piena interazione con l’utente, è anche possibile specificare se richiedere all’utente il consenso alla connessione.

Figura 2 modalità di connessione

A questo punto proseguendo con OK all’utente connesso viene proposto un messaggio che lo informa della richiesta di accesso

Figura 3 prompt di conferma della richiesta di accesso

Non appena ottenuta la conferma la sessione può essere controllata o visualizzata da remoto

Questo comportamento, come detto prima, è di default e l’accesso è possibile in quanto il permesso di Shadowing sulle connessioni RDP è concesso agli utenti Amministratori.

Gestione dei permessi di Shadowing

Nel caso sia necessario garantire questa funzionalità ad utenti non amministratori è necessario che il permesso venga esplicitato per i vari utenti, direttamente sulla connessione RDP dei singoli Session Host

Per una gestione più semplice è preferibile creare un gruppo all’interno di AD ed assegnare il permesso di Shadowing a questo gruppo, successivamente verranno definiti come membri i vari utenti che dovranno operare in modalità Shadow sulle sessioni RDS

La modifica dei permessi di default avviene con un comando che opera direttamente tramite WMI sulle proprietà della connessione RDP dei Session Host. Tramite GPO invece è possibile modificare la modalità di accesso alle sessioni RDS.

Impostazioni tramite Wmic (WMI)

Supponendo di aver creato sul dominio ICTPOWER il gruppo UtentiRdsShadowing il comando per assegnarne i permessi è il seguente

wmic /namespace:\\root\CIMV2\TerminalServices PATH Win32_TSPermissionsSetting WHERE (TerminalName=”RDP-Tcp”) CALL AddAccount “ictpower\UtentiRdsShadowing”,2

più in dettaglio vediamo che viene identificato il nome della connessione RDP con TerminalName RDP-Tcp e con AddAccount viene definito il gruppo ictpower\UtentiRdsShadowing il parametro al termine del comando prevede 3 valori:

  • 0 = WINSTATION_GUEST_ACCESS
  • 1 = WINSTATION_USER_ACCESS
  • 2 = WINSTATION_ALL_ACCESS

Per verificare le impostazioni correnti è possibile utilizzare il comando

wmic /namespace:\\root\CIMV2\TerminalServices PATH Win32_TSPermissionsSetting

il cui output sarà simile a questo

Caption DenyAdminPermissionForCustomization Description InstallDate Name PolicySourceDenyAdminPermissionForCustomization Status StringSecurityDescriptor TerminalName

O:SYG:SYD:(A;;CC;;;IU)(A;;0xf03bf;;;SY)(A;;CCSWLOSDRCWDWO;;;LS)(A;;CCLO;;;NS)(A;;0xf03bf;;;BA)(A;;CCWPCR;;;RD)S:NO_ACCESS_CONTROL Console

O:SYG:SYD:(A;;0xf03bf;;;S-1-5-21-263436683-1377918197-1349984968-1110)(A;;CC;;;IU)(A;;0xf03bf;;;SY)(A;;CCSWLOSDRCWDWO;;;LS)(A;;CCLO;;;NS)(A;;0xf03bf;;;BA)(A;;CCWPCR;;;RD)S:(AU;FA;CCWPCR;;;WD) RDP-Tcp

In grassetto nell’ultima riga è riportato il SID del gruppo ictpower\UtentiRdsShadowing, per poter risalire al nome del gruppo dato il SID il comando è sufficiente utilizzare il Cmd-Let

 

Se fosse necessario ricondurre le impostazioni ad un valore di default è possibile utilizzare il comando seguente

dopo la variazione dei permessi di accesso tramite il comando VMIC è necessario riavviare il servizio RDS con il comando

Impostazioni tramite Group Policy (GPO)

Le impostazioni per mezzo delle GPO definiscono la modalità con cui gli utenti che richiedono di effettuare lo shadow potranno accedere alla Sessione

La Group Policy è configurabile in Computer/Policies/Windows Components/Remote Desktop Services/Remote Desktop Session Host/Connection

Figura 4 impostazione delle modalità di shadowing

Si può definire l’accesso in controllo completo con o senza autorizzazione utente, l’accesso in sola modalità visualizzazione con o senza autorizzazione esplicita dell’utente ed una ulteriore impostazione che nega qualunque tipo di accesso allo shadow delle sessioni, chiaramente questa configurazione è indipendente dai permessi di accesso impostati con WMIC che devono comunque essere dichiarati.

La Group Policy vista in figura 4 è configurabile a livello Macchina e quindi per qualunque utente che ha una connessione sul Session Host, nel caso fosse necessario definire regole diverse di controllo delle sessioni RDS in base agli utenti collegati, è possibile attivare una Group Policy nel contesto utente e come tale applicata solamente a determinati account.

La Group Policy è configurabile in User/Policies/Windows Components/Remote Desktop Services/Remote Desktop Session Host/Connection

Figura 5 impostazioni modalità di shadowing nel contesto utente

La GPO deve essere assegnata alla OU dove risiede l’utente che deve essere controllato e non all’utente che effettua il controllo sulla sessione RDS, per il resto le impostazioni sono identiche a quelle viste per il contesto macchina.

Utilizzo di Script in Powershell e del client RDS per la gestione delle attività di Shadowing

Fino a questo punto abbiamo visto le impostazioni dell’ambiente RDS e la modalità di accesso allo Shadowing avviene a partire dal Server Manager e dalle funzioni disponibili nella sua interfaccia.

Essendo a conoscenza dell’Id della sessione RDS su un determinato Session Host, è possibile eseguire il client RDP in modo che effettui il mirroring della sessione voluta.

Supponendo di eseguire l’accesso alla sessione 10 sul server RDSH01 in modalità di controllo, dovremo eseguire il comando MSTSC con le impostazioni seguenti:

Nel caso in cui non sia necessario eseguire il controllo ma solo la visualizzazione della sessione è sufficiente omettere l’opzione /control

L’individuazione dell’id della sessione non è propriamente immediato, soprattutto nel caso in cui l’accesso alla Farm RDS avviene con un unico utente comune a più connessioni, l’elenco all’interno del Server Manager presenta in questo caso molteplici connessioni tutte originate dal medesimo utente.

E’ necessario quindi individuare l’ID della sessione direttamente dall’interno della stessa eseguendo il command-let Get-Process

Ottenuto il valore numerico relativo alla sessione, è possibile effettuarne il mirroring come visto sopra.

Scenario di utilizzo delle funzioni di Shadow

in ambienti distribuiti, con operatori che svolgono la funzione di assistenza nei confronti degli utenti della farm RDS è importante permettere che da un lato l’operatore che richiede supporto possa indicare in modo preciso le informazioni sulla propria connessione, e dall’altro il personale addetto al supporto possa accedere in visualizzazione o controllo della sessione senza possibilità di errori.

Qui di seguito sono riportati due script in PowerShell che permettono in modo semplice l’individuazione delle informazioni sulla sessione connessa alla Farm RDS, e la creazione guidata di una sessione di accesso in mirror o controllo della sessione stessa, chiaramente il primo script dovrà essere eseguito all’interno della sessione, ed il secondo script dovrà essere eseguito da una qualunque postazione di rete con le credenziali di un utente che dispone dei permessi di accesso in Shadow come visto in precedenza.

Per fare si che ogni utente che accede alla farm RDS abbia disponibile sul desktop il collegamento allo script di identificazione della sessione è possibile usare le Group Policy.

Identificazione della sessione RDS

 

Una volta eseguito questo script costruisce una MsgBox con riassunte le informazioni utili ad identificare la sessione

Figura 6 informazioni di sessione

Lo script sarà avviato direttamente da un file .cmd opportunamente strutturato e nel caso si voglia utilizzare una GPO per la pubblicazione del link sul desktop, questa dovrà riferirsi al file di avvio

start /min C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe C:\supporto\IdentificaSessione.ps1

Gestione guidata del di Mirror della sessione RDS

Individuata la sessione all’interno della Farm RDS è possibile utilizzare questo script per creare l’accesso in Shadow alla sessione stessa, lo script è più complesso nella sua costruzione ma non fa altro che creare una check-box per ogni Session-Host presente, consentire l’immissione del valore dell’ID sessione ed un ulteriore check-box relativo alla funzione di controllo o semplice visualizzazione della sessione, ottenute queste impostazioni viene strutturato ed eseguito il comando MSTSC come visto sopra.

 

Figura 7

La figura qui sopra riporta il form che viene creato per mezzo di questo script, premendo ok in questo caso si effettua il mirror della sessione numero 5 sul Session Host RDSH01

Considerazioni

Le soluzioni proposte in questo articolo prendono spunto da un caso reale dove si è reso necessario permettere ad un gruppo di utenti di accedere in modalità di consultazione o controllo al fine di fornire assistenza agli utilizzatori su un certo numero di applicativi distribuiti da una Farm RDS, la scelta di implementazione della soluzione ha previsto l’impiego di pochi utenti di accesso comuni a numerosi utenti singoli, e demandando la successiva autenticazione a livello applicativo. Questa modalità ha evidenziato le problematiche esposte sopra relative all’identificazione delle singole Sessioni.