Eccoci nella sesta parte dedicata alla transizione da Windows a Linux. In questo articolo vedremo come interfacciare una distribuzione Linux con un sistema server Active Directory. Non di rado nelle aziende di medie o grandi dimensioni viene utilizzata una configurazione simile, basata su Windows Server. Ci si ritrova quindi obbligati ad utilizzare tale framework che rappresenta un punto di riferimento per quanto concerne la gestione di domini di computer.
Per poter accedere alle risorse presenti in una rete configurata in questo modo è necessario implementare un setting particolare che consenta anche di adottare le medesime regole di autenticazione impostate dal sysadmin. Fortunatamente alcune distribuzioni Linux, come ad esempio Debian, Ubuntu e Linux Mint, forniscono il supporto ad Active Directory.
Questa guida prevede che l'Active Directory Domain sia stato adeguatamente impostato e configurato. Non ci dilungheremo su tali dettagli per concentrarci sulla configurazione del client per la connessione ad Active Directory con un sistema Linux.
Impostazione del client SSSD e connessione all'Active Directory Domain
Per connetterci ad Active Directory è possibile sfruttare due applicativi, ovvero: il demone SSSD (System Security Services Daemon), utilizzato per l'autenticazione, e PAM (Pluggable Authentication Modules), usato per accedere all'home directory.
Partiamo installando i pacchetti di SSSD, apriamo bash e digitiamo:
sudo apt install sssd-ad sssd-tools realmd adcli krb5 krb5-user krb5-config
Ultimato il download e la configurazione automatica tramite il package manager APT si può procedere all'accesso all'Active Directory Domain tramite il tool realm
:
sudo realm -v discover ad1.urldesempio.com
Con questo comando abbiamo indicato all'utility di verificare se il dominio in questione è raggiungibile tramite DNS (Domain Name System). Si dovrebbe ottenere un output simile:
* Resolving: _ldap._tcp.ad1.urldesempio.com
* Performing LDAP DSE lookup on: 10.51.0.5
* Successfully discovered: ad1.urldesempio.com
ad1.urldesempio.com
type: kerberos
realm-name: AD1.urldesempio.com
domain-name: ad1.urldesempio.com
configured: no
server-software: active-directory
client-software: sssd
required-package: sssd-tools
required-package: sssd
required-package: libnss-sss
required-package: libpam-sss
required-package: adcli
required-package: samba-common-bin
Nel dettaglio ci interessa la terza riga, quella che comunica che il programma ha trovato l'Active Directory Domain. Inoltre realm
esegue una serie di test e verifiche e suggerisce anche pacchetti e programmi da utilizzare per gestire al meglio la connessione ad Active Directory con il client SSSD.
A questo punto siamo pronti per connetterci all'Active Directory Domain:
sudo realm join ad1.urldesempio.com
Se lo preferiamo possiamo anche indicare a realm
di indicarci passo passo le operazioni che sta eseguendo:
sudo realm join -v ad1.urldesempio.com
Il programma in questo caso ci mostra una schermata simile:
* Resolving: _ldap._tcp.ad1.urldesempio.com
* Performing LDAP DSE lookup on: 10.51.0.5
* Successfully discovered: ad1.urldesempio.com
Inoltre, dopo aver immesso la password, verranno mostrati una serie di parametri come i seguenti:
* Unconditionally checking packages
* Resolving required packages
* LANG=C /usr/sbin/adcli join --verbose --domain ad1.urldesempio.com --domain-realm AD1.urldesempio.com --domain-controller 11.61.0.5 --login-type user --login-user Administrator --stdin-password
* Using domain name: ad1.urldesempio.com
* Calculated computer account name from fqdn: AD-CLIENT
* Using domain realm: ad1.urldesempio.com
* Sending NetLogon ping to domain controller: 11.61.0.5
* Received NetLogon info from: SERVER1.ad1.urldesempio.com
* Looked up domain SID: S-1-5-21-2660147319-831819607-3409034899
* Using fully qualified name: ad-client.ad1.urldesempio.com
* Using domain name: ad1.eurldesempio.com
* Using computer account name: AD-CLIENT
* Using domain realm: ad1.urldesempio.com
* Calculated computer account name from fqdn: AD-CLIENT
* Generated 120 character computer password
* Using keytab: FILE:/etc/krb5.keytab
* Found computer account for AD-CLIENT$ at: CN=AD-CLIENT,CN=Computers,DC=ad1,DC=example,DC=com
* Sending NetLogon ping to domain controller: 11.61.0.5
Di base realm
usa l'utente amministratore del dominio per la richiesta di accesso. Nel caso in cui sia necessario utilizzare un altro account possiamo adottare l'opzione -user
:
sudo realm join -v ad1.urldesempio.com --user NomeUtente
Se invece il server è configurato per l'utilizzo di un token OTP (One Time Password) basta inserire questa dicitura:
sudo realm join -v ad1.urldesempio.com --one-time-password
Oltretutto realm
crea una configurazione di SSSD di base, aggiunge i diversi moduli PAM ed NSS e avvia i demoni necessari al funzionamento della connessione ad Active Directory.
Se si desidera personalizzare i setting è possibile modificare i vari settaggi dal file di configurazione presente nella directory /etc/sssd
:
sudo nano /etc/sssd/sssd.conf
Ecco un file d'esempio:
[sssd]
domains = ad1.urldesempio.com
config_file_version = 2
services = nss, pam
[domain/ad1.urldesempio.com]
default_shell = /bin/bash
krb5_store_password_if_offline = True
cache_credentials = True
krb5_realm = AD1.urldesempio.com
realmd_tags = manages-system joined-with-adcli
id_provider = ad
fallback_homedir = /home/%u@%d
ad_domain = ad1.urldesempio.com
use_fully_qualified_names = True
ldap_id_mapping = True
access_provider = ad
I parametri più interessanti che potrebbero essere oggetto di una configurazione particolare sono cache_credentials
, che consente di eseguire il login anche se il server non è raggiungibile, e home directory
, che di base è impostata su /home/utente@dominio
. Ovviamente questa cartella può essere cambiata in base alle diverse esigenze.
Configurazione di PAM
Il software che garantisce l'accesso tramite file manager alla home directory di Active Directory è PAM. Più nello specifico il modulo pam_makhomedir
. Per abilitarlo basta lanciare tale comando da bash:
sudo pam-auth-update --enable mkhomedir
A questo punto eseguiamo un controllo dello status di connessione ad Active Directory:
getent passwd utente@ad1.urldesempio.com
Mentre con il comando seguente verifichiamo il gruppo di appartenenza dell'utente:
groups utente@ad1.urldesempio.com
Ora è finalmente arrivato il momento di connetterci tramite CLI:
sudo login
In alternativa possiamo eseguire l'accesso tramite OpenSSH:
ssh utente@ad1.urldesempio.com@IPdelserver
Kerberos Ticket
Installando il pacchetto krb5-user
dopo il login dell'utente viene generato in automatico il kerberos ticket necessario per l'autenticazione. Per poterlo visualizzare scriviamo nel terminale il comando:
klist
Come outpupt dovremmo ricevere un messaggio simile:
Ticket cache: FILE:/tmp/krfafawfcc_1725801414106_9Uxggz
Default principal: utente@AD1.urldesempio.com
Valid starting Expires Service principal
04/16/22 21:32:12 04/17/22 07:32:12 krbtgt/AD1.urldesempio.com@AD1.urldesempio.com
renew until 04/17/22 21:32:12
Per testare il ticket usiamo il client Samba con la kerberos authentication in modo da ottenere una lista dei domain controller:
smbclient -k -L server1.ad1.urldesempio.com
Come risposta al comando precedente si dovrebbe ottenere una lista simile alla seguente:
Sharename Type Comment
--------- ---- -------
ADMIN$ Disk Remote Admin
C$ Disk Default share
IPC$ IPC Remote IPC
NETLOGON Disk Logon server share
SYSVOL Disk Logon server share