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
- Pe o stație Windows, deschide Remote Desktop Connection (
mstsc) - Introdu adresa serverului și click Show Options
- 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
- Click Save As... și salvează fișierul
server.rdp - 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 mstsc → Save 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ă
- ✅ Creează din Windows GUI - sintaxă validă, format corect
- ✅ Testează conexiunea înainte de deploy
- ✅ Copiază în NETLOGON
- ℹ️ 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 separatusername: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
- Deschide Group Policy Management (
gpmc.msc) - Navighează la:
Forest→Domains→domain.local→Group Policy Objects - Click dreapta →
New- Nume:
RDP Shortcuts
- Nume:
Pasul 5: Configurează GPO-ul
- Click dreapta pe
RDP Shortcuts→Edit - Navighează la:
User Configuration → Preferences → Windows Settings → Files - Click dreapta →
New→File
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
- Tab Common → bifează Item-level targeting
- Click Targeting...
New Item→Security Group- Selectează grupul
RDP-Server-Users - Click
OK
Pasul 8: Leagă GPO-ul la un OU
- În GPMC, click dreapta pe OU-ul dorit (sau domeniu)
Link an Existing GPO...- 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:
- Creează câte un fișier .rdp pentru fiecare server
- Adaugă mai multe intrări
Filesîn același GPO - 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
- Allow delegating default credentials
- Status:
Enabled - Servers:
TERMSRV/*.misavan.local(sau specific:TERMSRV/server.misavan.local)
- Status:
- Allow delegating default credentials with NTLM-only server authentication (opțional, pentru servere non-Kerberos)
- Status:
Enabled - Servers:
TERMSRV/*.misavan.local
- Status:
Verificare cerințe SSO
| Cerință | Verificare |
|---|---|
| Client în domeniu | systeminfo \| findstr Domain |
| User logat cu cont domeniu | whoami → MISAVAN\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.