L'NLA (Network Level Authentication) è un flag aggiuntivo e attivo di default nelle recenti installazioni di Windows per garantire maggiore sicurezza nelle connessioni RDP. Supponiamo di avere dei computer nel proprio dominio (MYDOMAIN.ADDS) con RDP attivo solo con autenticazione NLA , come nello screenshot qui riportato: In tali casi, cercare di collegarsi via rdp da linux con i parametri standard porterebbe al fallimento della connessione, perché servono alcune configurazioni aggiuntive e preliminari.
Occorre innanzitutto installare il software necessario per lo scambio di ticket kerberos:
Per debian/ubuntu:
user@linbox~$ sudo apt install krb5-user
Per Fedora:
user@linbox~$ sudo dnf install krb5-workstation
Su sistemi debian like parte una configurazione guidata in fase di installazione del pacchetto krb5-user che chiede i dati relativi al dominio windows da configurare (nome del dominio e FQDN dei domain controller, che nell'esempio qui sotto sono dc01 e dc02); in ogni caso alla fine il file /etc/krb5.conf
deve contenere le seguenti voci:
[..] [libdefaults] default_realm = MYDOMAIN.ADDS [..] [realms] ATENEO.UNIVR.IT = { kdc = dc01.mydomain.adds kdc = dc03.mydomain.adds admin_server = dc01.mydomain.adds [..]
Da terminale, come utente non privilegiato, dare il seguente comando
user@linbox~$ kinit mydomainuser Password for mydomainuser@MYDOMAIN.ADDS: user@linbox~$
A questo punto usare normalmente il comando rdesktop. Se la macchina remota accetta connessioni sia con NLA sia senza, verrà privilegiata la connessione sicura NLA.
XfreeRDP
Su Fedora e su altri sistemi viene privilegiato il pacchetto xfreerdp al posto di rdesktop; anche questo software può collegarsi a sistemi rdp con NLA attivo, basta utilizzare i seguenti flag:
xfreerdp /v:remotewindows.mydomain.adds /u:mydomainuser /w:1280 /h:1024 +clipboard
Ticket kerberos
La durata del ticket kerberos creato con il comando kinit
è limitata e comunque non sopravvive al riavvio; per conoscere i ticket presenti nella propria sessione usare il comando klist
:
user@linbox~$ klist Ticket cache: FILE:/tmp/krb5cc_1000 Default principal: mydomainuser@MYDOMAIN.ADDS Valid starting Expires Service principal 20/03/2019 10:48:37 20/03/2019 20:48:37 krbtgt/MYDOMAIN.ADDS@MYDOMAIN.ADDS renew until 21/03/2019 10:48:32
Automatizzare il tutto
Volendo, è possibile eseguire uno script all'accesso al proprio desktop linux perché venga automaticamente scambiato un ticket kerberos che sarà poi utile per collegarsi via RDP.
Prima di tutto è necessario un file di credenziali (da salvare nella propria Home directory, ad esempio con il nome .cred_mydomain
), contenente i seguenti campi:
user=mydomainuser pass=mypassword dom=MYDOMAIN.ADDS
Ecco quindi lo script da inserire nel proprio avvio automatico:
#!/bin/bash #Chiedo un ticket kerberos al dominio mydomain.adds per l'utente myuserdomain PASS=$(cat ~/.cred_mydomain |grep pass=|sed s/"pass="//) echo -n "$PASS"| kinit 01codiceGIA