Howto: Distribuire fișier RDP prin GPO în Samba AD

Scop: Utilizatorii dintr-un grup specific vor găsi pe Desktop o conexiune RDP preconfigurată la primul logon.

Cerințe

  • Samba AD Domain Controller
  • Stație Windows cu RSAT (pentru GPMC)
  • Grup de securitate cu utilizatorii țintă

Pasul 1: Creează fișierul .rdp

Metoda recomandată: Windows GUI

  1. Pe o stație Windows, deschide Remote Desktop Connection (mstsc)
  2. Introdu adresa serverului și click Show Options
  3. Configurează setările dorite în tab-urile:
    • General: Computer, User name
    • Display: Rezoluție, culori
    • Local Resources: Audio, clipboard, imprimante, drive-uri
    • Experience: Conexiune, efecte vizuale
  4. Click Save As... și salvează fișierul server.rdp
  5. Copiază fișierul pe DC în NETLOGON (vezi Pasul 2)

De ce metoda GUI?

Aspect Manual (text) Windows GUI
Sintaxă garantat corectă ❌ risc de typo ✅ validat
Parametri avansați ✅ toți ❌ doar GUI
Format corect (UTF-16) ❌ trebuie atenție ✅ automat

Despre semnătura digitală

Clarificare importantă: Windows 10/11 NU semnează automat fișierele RDP create din mstscSave As.

Semnătura digitală este destinată pentru:

  • RemoteApp (aplicații publicate prin RD Web Access)
  • Distribuire enterprise cu certificat de semnare cod
# Aceste linii apar DOAR în fișiere semnate enterprise
signscope:s:Full Address
sign:s:AQAAANCMnd8BFdERjH...

Warning-ul "publisher not identified"

Fișierele RDP nesemnate (majoritatea!) vor afișa acest warning la prima deschidere:

⚠️ "The publisher of this remote connection can't be identified"

Asta e normal și acceptabil pentru rețele interne:

  • Utilizatorul poate bifa "Don't ask me again for connections to this computer"
  • Warning-ul apare o singură dată per utilizator
  • Conexiunea funcționează normal

Semnare manuală (opțional, doar enterprise)

Dacă ai certificat de semnare cod (code signing):

rdpsign /sha256 <certificate-thumbprint> "server.rdp"

Pentru majoritatea mediilor (inclusiv Samba AD) semnarea NU este necesară.

Recomandare practică

  1. ✅ Creează din Windows GUI - sintaxă validă, format corect
  2. Testează conexiunea înainte de deploy
  3. ✅ Copiază în NETLOGON
  4. ℹ️ Warning-ul la prima deschidere e normal - utilizatorii îl pot dezactiva

Compatibilitate între versiuni Windows

Fișierele .rdp sunt compatibile între toate versiunile Windows. Formatul (text simplu cu cheie:tip:valoare) nu s-a schimbat de ~20 ani.

Creat pe Funcționează pe Conectare la
Windows 8.1 ✅ Windows 11 ✅ Server 2025
Windows 7 ✅ Windows 11 ✅ Server 2025
Windows 11 ✅ Windows 8.1 ✅ Server 2012+
Windows 10 ✅ Orice versiune ✅ Orice server

Ce poate diferi:

  • Parametri noi - versiunile vechi îi ignoră pe cei necunoscuți (fără erori)
  • Semnătura digitală - poate fi invalidă pe alt PC (warning, dar funcționează)

Recomandare: Creează fișierul pe cea mai nouă versiune Windows disponibilă - include parametri moderni (UDP, bandwidth auto-detect) de care beneficiază clienții noi, iar clienții vechi ignoră ce nu înțeleg.


Metoda alternativă: Creare manuală

Dacă preferi control total sau ai nevoie de parametri avansați, creează fișierul manual:

full address:s:server.example.local
domain:s:DOMAIN
prompt for credentials:i:1
screen mode id:i:2
desktopwidth:i:1920
desktopheight:i:1080
session bpp:i:32
compression:i:1
keyboardhook:i:2
displayconnectionbar:i:1
disable wallpaper:i:0
disable full window drag:i:0
allow desktop composition:i:1
allow font smoothing:i:1
disable menu anims:i:0
disable themes:i:0
disable cursor setting:i:0
bitmapcachepersistenable:i:1
audiomode:i:0
redirectprinters:i:0
redirectcomports:i:0
redirectsmartcards:i:0
redirectclipboard:i:1
redirectposdevices:i:0
redirectdirectx:i:1
autoreconnection enabled:i:1
networkautodetect:i:1
bandwidthautodetect:i:1
connection type:i:7

Notă: Nu se specifică username:s: - Windows va folosi automat userul de domeniu logat.

Parametri importanți

Parametru Valoare Descriere
full address:s: server.example.local Adresa serverului RDP
domain:s: DOMAIN Domeniul pentru autentificare
prompt for credentials:i: 1 1=cere parola, 0=SSO
screen mode id:i: 2 1=fereastră, 2=fullscreen

De ce să specifici domeniul?

Poți specifica domeniul în două moduri:

  • domain:s:MISAVAN - parametru separat
  • username:s:MISAVAN\ - inclus în username (cu backslash la final)

Avantaje:

  • Domeniul apare pre-completat în dialogul de autentificare
  • Utilizatorul introduce doar username-ul (fără a scrie MISAVAN\)
  • Reduce erorile de tastare
  • Necesar pentru funcționarea corectă a "Remember me"
Fără domeniu specificat:          Cu domeniu specificat:
┌─────────────────────────┐       ┌─────────────────────────┐
│ Username: █             │       │ Username: MISAVAN\█     │
│ Password: ****          │       │ Password: ****          │
│ ☐ Remember me           │       │ ☐ Remember me           │
└─────────────────────────┘       └─────────────────────────┘
   ↑ trebuie să scrie                ↑ scrie doar "ion.popescu"
   "MISAVAN\ion.popescu"               devine "MISAVAN\ion.popescu"

Notă: Pentru funcționalitatea "Remember me" (salvare parolă), serverul trebuie să aibă NLA activat. Vezi howto-rdp-nla.md pentru detalii despre NLA și troubleshooting.


Pasul 2: Copiază fișierul în NETLOGON

Pe Domain Controller:

# Creează directorul pentru fișiere RDP
mkdir -p /var/lib/samba/sysvol/DOMAIN.LOCAL/scripts/rdp

# Copiază sau creează fișierul
cp server.rdp /var/lib/samba/sysvol/DOMAIN.LOCAL/scripts/rdp/

# Setează permisiunile
chmod 644 /var/lib/samba/sysvol/DOMAIN.LOCAL/scripts/rdp/server.rdp

# Verifică
ls -la /var/lib/samba/sysvol/DOMAIN.LOCAL/scripts/rdp/

Pasul 3: Creează grupul de securitate

# Creează grupul
samba-tool group add "RDP-Server-Users" --description="Utilizatori cu acces RDP la Server"

# Adaugă utilizatori
samba-tool group addmembers "RDP-Server-Users" user1,user2,user3

# Verifică membrii
samba-tool group listmembers "RDP-Server-Users"

Pasul 4: Creează GPO-ul

  1. Deschide Group Policy Management (gpmc.msc)
  2. Navighează la: ForestDomainsdomain.localGroup Policy Objects
  3. Click dreapta → New
    • Nume: RDP Shortcuts

Pasul 5: Configurează GPO-ul

  1. Click dreapta pe RDP ShortcutsEdit
  2. Navighează la:
    User Configuration
      → Preferences
        → Windows Settings
          → Files
  3. Click dreapta → NewFile

Pasul 6: Configurează copierea fișierului

Tab General

Câmp Valoare
Action Create
Source file(s) \\domain.local\NETLOGON\rdp\server.rdp
Destination file %DesktopDir%\Server.rdp

Explicație detaliată Action

Create

Aspect Comportament
Când rulează La fiecare aplicare GPO (logon, gpupdate)
Dacă fișierul NU există Îl creează
Dacă fișierul EXISTĂ Nu face nimic (nu suprascrie)
Dacă utilizatorul modifică fișierul Modificările rămân (nu se suprascriu)
Dacă utilizatorul șterge fișierul Se recreează la următorul logon
Când să folosești Shortcut-uri inițiale pe care utilizatorul le poate personaliza

Update

Aspect Comportament
Când rulează La fiecare aplicare GPO (logon, gpupdate)
Dacă fișierul NU există Îl creează
Dacă fișierul EXISTĂ și sursa e neschimbată Nu face nimic
Dacă fișierul EXISTĂ și sursa s-a schimbat Actualizează fișierul
Dacă utilizatorul modifică fișierul Se suprascrie când sursa se schimbă
Dacă utilizatorul șterge fișierul Se recreează la următorul logon
Când să folosești Fișiere de configurare care trebuie sincronizate cu serverul

Replace

Aspect Comportament
Când rulează La fiecare aplicare GPO (logon, gpupdate)
Dacă fișierul NU există Îl creează
Dacă fișierul EXISTĂ Îl șterge și recreează
Dacă utilizatorul modifică fișierul Modificările se pierd la fiecare logon
Dacă utilizatorul șterge fișierul Se recreează la următorul logon
Când să folosești Fișiere care trebuie să fie mereu identice cu sursa

Delete

Aspect Comportament
Când rulează La fiecare aplicare GPO (logon, gpupdate)
Dacă fișierul NU există Nu face nimic
Dacă fișierul EXISTĂ Îl șterge
Când să folosești Curățare fișiere vechi, dezinstalare

Comparație rapidă

Sursa se schimbă?     Create    Update    Replace
─────────────────────────────────────────────────
Fișier inexistent     Creează   Creează   Creează
Fișier existent       -         Update    Replace
Modificat de user     Păstrează Update*   Replace

* Update suprascrie doar când sursa e diferită

Recomandări practice

Scenariu Action recomandat
Shortcut RDP inițial (utilizatorul poate personaliza) Create
Shortcut RDP forțat (mereu la fel) Replace
Fișier de configurare sincronizat Update
Template document (utilizatorul editează) Create
Script obligatoriu (versiuni noi frecvent) Update sau Replace
Eliminare shortcut vechi Delete

Pasul 7: Configurează Item-level Targeting

  1. Tab Common → bifează Item-level targeting
  2. Click Targeting...
  3. New ItemSecurity Group
  4. Selectează grupul RDP-Server-Users
  5. Click OK

Pasul 8: Leagă GPO-ul la un OU

  1. În GPMC, click dreapta pe OU-ul dorit (sau domeniu)
  2. Link an Existing GPO...
  3. Selectează RDP Shortcuts

Pasul 9: Testează

Pe o stație Windows, cu un utilizator din grup:

gpupdate /force

După logoff/logon, verifică desktop-ul.


Troubleshooting

Fișierul nu apare

REM Verifică GPO-uri aplicate
gpresult /R

REM Verifică apartenența la grup
whoami /groups | findstr "RDP-Server"

REM Verifică accesul la sursă
dir "\\domain.local\NETLOGON\rdp\server.rdp"

Event Log

Event Viewer → Applications and Services Logs
  → Microsoft → Windows → GroupPolicy → Operational

Variabile GPP pentru destinație

Variabilă Descriere
%DesktopDir% Desktop-ul utilizatorului curent
%StartMenuDir% Start Menu al utilizatorului
%CommonDesktopDir% Desktop comun (toți utilizatorii)
%ProgramsDir% Programs din Start Menu
%UserProfile% Profilul utilizatorului (C:\Users\username)

Mai multe conexiuni RDP

Pentru mai multe servere:

  1. Creează câte un fișier .rdp pentru fiecare server
  2. Adaugă mai multe intrări Files în același GPO
  3. Folosește Item-level Targeting diferit pentru fiecare (dacă e necesar)

Opțiuni avansate fișier .rdp

Redirecționare resurse

redirectprinters:i:1          # Imprimante
redirectcomports:i:1          # Porturi COM
redirectsmartcards:i:1        # Smart cards
redirectclipboard:i:1         # Clipboard
redirectdrives:i:1            # Drive-uri locale

Gateway RDP

gatewayhostname:s:gateway.example.local
gatewayusagemethod:i:1
gatewayprofileusagemethod:i:1
gatewaybrokeringtype:i:0

Single Sign-On (SSO)

Ce este SSO vs Save Password?

Aspect Save Password SSO (Single Sign-On)
Cum funcționează Salvează parola în Credential Manager Folosește tichetul Kerberos existent
Prompt la conectare Nu (dacă parola e salvată) Nu
Necesită introducere parolă Da, prima dată Niciodată
Cerințe Nimic special GPO pe client + domeniu
Securitate Parolă stocată local Doar token Kerberos (mai sigur)
Disponibil în GUI ✅ Da ❌ Nu direct

Save Password = utilizatorul introduce parola o dată, Windows o memorează.

SSO = Windows folosește automat credențialele Kerberos ale utilizatorului logat, fără nicio parolă.

Parametri RDP pentru SSO

prompt for credentials:i:0
enablecredsspsupport:i:1
authentication level:i:2

Atenție: Doar acești parametri NU sunt suficienți! SSO necesită și configurare GPO pe clienți.

GPO pentru SSO pe stațiile client

Creează un GPO nou (ex: RDP SSO Settings) și configurează:

Computer Configuration → Administrative Templates → System → Credentials Delegation

  1. Allow delegating default credentials
    • Status: Enabled
    • Servers: TERMSRV/*.misavan.local (sau specific: TERMSRV/server.misavan.local)
  2. Allow delegating default credentials with NTLM-only server authentication (opțional, pentru servere non-Kerberos)
    • Status: Enabled
    • Servers: TERMSRV/*.misavan.local

Verificare cerințe SSO

Cerință Verificare
Client în domeniu systeminfo \| findstr Domain
User logat cu cont domeniu whoamiMISAVAN\username
Server RDP în domeniu Da
NLA activat pe server System Properties → Remote → "Allow connections only from..."
GPO aplicat gpresult /R → verifică "RDP SSO Settings"
Kerberos funcțional klist → trebuie să vezi tichete

Troubleshooting SSO

REM Verifică tichete Kerberos
klist

REM Verifică GPO-uri aplicate
gpresult /R

REM Verifică delegarea credențialelor (PowerShell)
Get-ItemProperty "HKLM:\SOFTWARE\Policies\Microsoft\Windows\CredentialsDelegation"

REM Test conexiune cu verbose
mstsc /v:server.misavan.local

Erori comune:

  • "Your credentials did not work" → GPO delegare nu e aplicat
  • "An authentication error occurred" → NLA sau CredSSP dezactivat
  • Prompt apare oricum → verifică prompt for credentials:i:0 în fișier

Recomandare: SSO sau nu?

✅ Folosește SSO când:

  • Utilizatorii se conectează frecvent la același server
  • Vrei experiență seamless (zero prompts)
  • Ai infrastructură Kerberos funcțională
  • Securitatea e prioritară (fără parole stocate local)

❌ NU folosi SSO când:

  • Utilizatorii se conectează rar
  • Ai utilizatori care lucrează pe mai multe conturi
  • Stațiile nu sunt întotdeauna în domeniu (laptopuri remote)
  • Vrei ca utilizatorul să confirme explicit conexiunea

🎯 Recomandarea mea pentru mediul tău (Samba AD):

Opțiunea 1 - Simplu (fără SSO):

prompt for credentials:i:1
  • ✅ Funcționează imediat
  • ✅ Fără configurare adițională
  • ✅ Utilizatorul confirmă cu parola
  • ❌ Trebuie să introducă parola de fiecare dată

Opțiunea 2 - SSO complet:

prompt for credentials:i:0
enablecredsspsupport:i:1
authentication level:i:2

Plus GPO pentru Credentials Delegation pe clienți.

  • ✅ Experiență seamless
  • ✅ Mai sigur (fără parole salvate)
  • ❌ Necesită GPO adițional
  • ❌ Nu funcționează off-domain

Pentru început, recomand Opțiunea 1 - e mai simplu de implementat și troubleshoot. După ce totul funcționează, poți adăuga SSO gradual.