Effettuare il Login su macchine Linux con Azure AD

Nella gestione di infrastrutture in cui sono presenti numerose macchine è indispensabile avere un servizio di autenticazione centralizzato, in particolar modo quando gli utenti che devono effettuare i login cambiano frequentemente.

Non è buona norma, infatti, distribuire agli utenti le password del “superuser” dei sistemi, in primo luogo perché un eventuale furto di credenziali costituirebbe un grave problema di sicurezza, e poi perché ogni volta che uno di questi utenti deve essere disabilitato siamo costretti a modificare la password del superuser e ridistribuirla solo alle persone autorizzate.

Il buonsenso, e soprattutto le normative in materia di privacy, impongono l’utilizzo di credenziali personalizzate per l’accesso ai sistemi, così una gestione locale per ogni macchina dell’autenticazione può diventare scomoda, perché un eventuale cambio password deve essere eseguito su tutti i sistemi.

Sulle macchine Windows il problema è risolto implementando Active Directory e già da tempo è possibile sincronizzare gli utenti AD locali con quelli definiti su Azure; è altresì possibile utilizzare il servizio Azure AD per l’autenticazione di client e server gestendo le utenze direttamente dal portale Azure, facendo a meno di un controller di dominio locale. Da pochissimo tempo il login utilizzando Azure AD è disponibile anche sulle macchine Linux, dove fino a poco tempo fa era utilizzato per lo più il servizio LDAP in rete locale.

Attraverso Azure AD è possibile quindi aggiungere e rimuovere facilmente utenti assegnando loro i privilegi per effettuare il login su macchine Linux in Azure, controllare accessi e privilegi in maniera centralizzata, e sottoscrivendo AD Premium è possibile utilizzare le funzionalità Just-in-time per la configurazione dinamica delle regole di firewall.

Il login sulle macchine Linux è reso possibile da un’estensione, chiamata AADLoginForLinux, quindi per utilizzare questa funzionalità sarà sufficiente creare una macchina includendo l’estensione oppure aggiungerla via command line alle macchine esistenti.

Per l’implementazione dell’estensione su una nuova macchina è sufficiente abilitare “Accedi con Azure Active Directory” nella fase 1 della creazione della VM. La funzionalità è in preview e questa opzione non è ancora presente su tutti i template; è comunque possibile installare successivamente l’estensione da command line.

Per l’installazione da command line utilizziamo Azure Cloud Shell, l’interfaccia a riga di comando avviabile direttamente da browser dall’interno del portale Azure; invito tutti coloro che non l’hanno mai utilizzata a provarne le funzionalità, poiché quella che può sembrare una semplice shell è in effetti una macchina virtuale con il proprio storage al cui interno è possibile salvare script personalizzati e molto altro. Azure Cloud Shell è sempre associata ad una risorsa disco quindi al primo utilizzo dobbiamo indicare all’interno di quale gruppo di risorse creare tutto il necessario per il suo funzionamento.

Al momento è possibile installare l’estensione sulle distribuzioni indicate nella tabella seguente, quindi assicuriamoci di trovarci in una configurazione supportata e procediamo.

Distribuzione Versione
CentOS CentOS 6.9 e CentOS 7.4
RedHat Enterprise Linux RHEL 7
Ubuntu Server Ubuntu 14.04 LTS, Ubuntu Server 16.04 e Ubuntu Server 17.10

Apriamo Azure Cloud Shell dall’icona in alto a destra e scegliamo il tipo di ambiente su cui lavorare. E’ possibile utilizzare Bash oppure PowerShell, e per questo esempio utilizzeremo la prima opzione.

Eseguamo il comando az vm estension set indicando il nostro gruppo risorse ed il nome della VM, nel nostro caso rispettivamente GruppoRisorse1 ed Ubuntu

az vm extension set –publisher Microsoft.Azure.ActiveDirectory.LinuxSSH –name AADLoginForLinux –resource-group GruppoRisorse1 –vm-name Ubuntu

Ora la macchina può accettare login di utenti presenti su Azure AD, ma prima è necessario abilitare gli utenti al login sulla macchina, scegliendo se possono farlo con privilegi amministrativi o limitati.

Per fare questo apriamo Controllo di accesso (IAM), l’interfaccia per la gestione del controllo di accesso, dopo aver selezionato la VM dal pannello delle risorse.

Facciamo Click su Aggiungi e selezioniamo l’utente aggiungendolo al gruppo Virtual Machine Administrator (o User) Login.

La stessa operazione è eseguibile da Cloud Shell con i seguenti comandi:

vm=$(az vm show –resource-group GruppoRisorse1 –name Ubuntu–query id -o tsv)

az role assignment create role “Virtual Machine Administrator Login”assignee gnanoia@gnanoia.onmicrosoft.comscope $vm

LogIn alla VM

Proviamo quindi ad effettuare il login sulla macchina utilizzando un client SSH; procuratevi l’indirizzo IP della VM ed utilizzate il vostro client preferito. Io sto utilizzando il client integrato in Windows Subsystem for Linux in Windows 10

ssh -l gnanoia@gnanoia.onmicrosoft.com 137.117.242.42


Il server vi chiederà di aprire con un browser la pagina https://microsoft.com/devicelogin immettendo un OTP.


Specifichiamo quindi sul browser le credenziali dell’utente AAD ed otterremo una pagina di conferma.


Torniamo quindi sul nostro client SSH e premiamo invio come richiesto.


Siamo ora loggati sulla macchina come utente Azure Active Directory e possiamo dire di aver fatto un altro passo verso la messa in sicurezza dei nostri sistemi.

Conclusioni

E’ interessante notare come abbiamo eseguito tutto dall'”esterno” della macchina virtuale, installando i componenti necessari ed assegnando i privilegi agli utenti senza mai effettuare il login sulla macchina; questo è ovviamente un grande vantaggio se la necessità è quella di gestire un numero elevato di macchine, riuscendo ad ottenere in poco tempo elevati standard di sicurezza, mantenendo snello il sistema di gestione.