Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Si applica a: ✔️ condivisioni file SMB
File di Azure supporta l'autenticazione basata sull'identità tramite Server Message Block (SMB) per macchine virtuali Linux (VM) utilizzando il protocollo di autenticazione Kerberos con Active Directory Domain Services (AD DS) on-premise. Per utilizzare questa procedura, devi sincronizzare il tuo ambiente AD DS con Microsoft Entra ID utilizzando Microsoft Entra Connect Sync.
Per altre informazioni sulle opzioni e sulle considerazioni supportate, vedere Panoramica delle opzioni di autenticazione File di Azure basate sull'identità per l'accesso SMB.
Nota
Questo articolo usa Ubuntu per i passaggi di esempio. Configurazioni simili funzionano per i client RHEL e SLES, permettendo di montare file share Azure usando AD DS on-premise.
Limitazioni del client SMB linux
Non puoi usare l'autenticazione basata sull'identità per montare le condivisioni file di Azure sui client Linux all'avvio mediante voci fstab. Questa limitazione esiste perché il client non riesce a ottenere il ticket Kerberos abbastanza presto per montarlo al momento dell'avvio. È possibile usare una fstab voce e specificare l'opzione noauto per consentire a un utente di montare la condivisione file dopo l'accesso usando un semplice comando di montaggio senza tutti i parametri. È anche possibile usare autofs per montare la condivisione al momento dell'accesso.
Prerequisiti
Prima di configurare un client Linux per utilizzare l'autenticazione AD DS on-premises su SMB per le condivisioni file Azure, completa i seguenti prerequisiti:
- Una macchina virtuale Linux che esegue Ubuntu 18.04 o versione successiva o una macchina virtuale RHEL o SLES equivalente. La VM deve avere connettività di rete con i tuoi controller di dominio AD DS on-premises e utilizzare server DNS in grado di risolvere il dominio AD DS.
- Un ambiente AD DS on-premises sincronizzato con Microsoft Entra ID utilizzando Microsoft Entra Connect Sync.
- Una condivisione file SMB Azure in un account di archiviazione configurato per l'autenticazione AD DS on-premise.
- Utente radice o credenziali utente per un account utente locale con diritti sudo completi (per questa guida, il 'localadmin').
- La VM Linux non è già collegata a un altro dominio AD DS. Se lo è, lascia quel dominio prima di unire la VM a questo dominio.
- Un account utente AD DS con permesso di collegare i computer al dominio.
L'installazione del pacchetto samba non è strettamente necessaria, ma offre alcuni strumenti utili e inserisce automaticamente altri pacchetti, ad esempio samba-common e smbclient. Eseguire i comandi seguenti per installarlo. Se vengono richiesti valori di input durante l'installazione, lasciarli vuoti.
sudo apt update -y
sudo apt install samba winbind libpam-winbind libnss-winbind krb5-config krb5-user keyutils cifs-utils
Lo wbinfo strumento fa parte della suite samba ed è utile per scopi di autenticazione e debug, ad esempio per verificare se il controller di dominio è raggiungibile, controllare il dominio a cui è aggiunto un computer e trovare informazioni sugli utenti.
Assicurati che l'host Linux mantenga l'orario sincronizzato con i controller di dominio AD DS. Consulta la documentazione della tua distribuzione Linux. Per alcune distribuzioni, puoi farlo usando systemd-timesyncd. Modifica /etc/systemd/timesyncd.conf per includere la seguente configurazione. Sostituisci ntp.server con lo stesso nome host o indirizzo IP del server Network Time Protocol (NTP) che utilizza il tuo ambiente AD DS.
[Time]
NTP=ntp.server
FallbackNTP=ntp.ubuntu.com
Riavviare quindi il servizio:
sudo systemctl restart systemd-timesyncd.service
Abilita l'autenticazione AD DS Kerberos
Segui questi passaggi per abilitare l'autenticazione Kerberos con AD DS on-premise. Per maggiori informazioni sulla configurazione di Samba, vedi Configurazione di Samba come Membro di Dominio.
Assicurati che i controller di dominio AD DS siano raggiungibili e scoperti
Assicurati che i server DNS configurati siano in grado di risolvere il tuo dominio AD DS e i controller di dominio.
systemd-resolve --statusGlobal DNSSEC NTA: 10.in-addr.arpa 16.172.in-addr.arpa 168.192.in-addr.arpa 17.172.in-addr.arpa 18.172.in-addr.arpa 19.172.in-addr.arpa 20.172.in-addr.arpa 21.172.in-addr.arpa 22.172.in-addr.arpa 23.172.in-addr.arpa 24.172.in-addr.arpa 25.172.in-addr.arpa 26.172.in-addr.arpa 27.172.in-addr.arpa 28.172.in-addr.arpa 29.172.in-addr.arpa 30.172.in-addr.arpa 31.172.in-addr.arpa corp d.f.ip6.arpa home internal intranet lan local private test Link 2 (eth0) Current Scopes: DNS LLMNR setting: yes MulticastDNS setting: no DNSSEC setting: no DNSSEC supported: no DNS Servers: 10.0.2.5 10.0.2.4 10.0.0.41 DNS Domain: domain1.contoso.comSe i server DNS contengono gli indirizzi IP del domain controller, procedi a Configurare nome host e FQDN. Se il comando non produce l'output previsto, consulta Risolvere i problemi di individuazione del controller di dominio di AD DS.
Risolvere i problemi di individuazione del controller di dominio AD DS
Assicurati di poter pingare gli indirizzi IP del domain controller AD DS.
ping 10.0.2.5PING 10.0.2.5 (10.0.2.5) 56(84) bytes of data. 64 bytes from 10.0.2.5: icmp_seq=1 ttl=128 time=0.898 ms 64 bytes from 10.0.2.5: icmp_seq=2 ttl=128 time=0.946 ms ^C --- 10.0.2.5 ping statistics --- 2 packets transmitted, 2 received, 0% packet loss, time 1002ms rtt min/avg/max/mdev = 0.898/0.922/0.946/0.024 msSe il ping non funziona, rivedi i prerequisiti e assicurati che la tua VM abbia connettività di rete con i controller di dominio AD DS.
Se gli indirizzi IP rispondono al ping, ma i server DNS non vengono individuati automaticamente, è possibile aggiungere manualmente i server DNS. Modificare
/etc/netplan/50-cloud-init.yamlusando l'editor di testo preferito.# This file is generated from information provided by the datasource. Changes # to it will not persist across an instance reboot. To disable cloud-init's # network configuration capabilities, write a file # /etc/cloud/cloud.cfg.d/99-disable-network-config.cfg with the following: # network: {config: disabled} network: ethernets: eth0: dhcp4: true dhcp4-overrides: route-metric: 100 dhcp6: false match: macaddress: 00:22:48:03:6b:c5 set-name: eth0 nameservers: addresses: [10.0.2.5, 10.0.2.4] version: 2Applicare quindi le modifiche:
sudo netplan --debug applyWinbind presuppone che il server DHCP mantenga aggiornati i record DNS del dominio. Tuttavia, questo presupposto non è vero per Azure DHCP. Per configurare il client per eseguire gli aggiornamenti DDNS, usare questa guida per creare uno script di rete. Ecco uno script di esempio che risiede in
/etc/dhcp/dhclient-exit-hooks.d/ddns-update.#!/bin/sh # only execute on the primary nic if [ "$interface" != "eth0" ] then return fi # When you have a new IP, perform nsupdate if [ "$reason" = BOUND ] || [ "$reason" = RENEW ] || [ "$reason" = REBIND ] || [ "$reason" = REBOOT ] then host=`hostname -f` nsupdatecmds=/var/tmp/nsupdatecmds echo "update delete $host a" > $nsupdatecmds echo "update add $host 3600 a $new_ip_address" >> $nsupdatecmds echo "send" >> $nsupdatecmds nsupdate $nsupdatecmds fi
Dopo aver risolto il problema, procedi a configurare un nome host e un dominio completamente qualificato.
Configurare il nome host e il nome di dominio completo (FQDN)
Usando l'editor di testo, aggiornare il /etc/hosts file con il nome di dominio completo finale (dopo l'aggiunta al dominio) e l'alias per l'host. L'indirizzo IP non è importante perché questa riga viene usata principalmente per convertire il nome host breve in FQDN. Per altre informazioni, vedere Configurazione di Samba come membro di dominio.
127.0.0.1 contosovm.contosodomain.contoso.com contosovm
#cmd=sudo vim /etc/hosts
#then enter this value instead of localhost "ubuntuvm.contosodomain.contoso.com UbuntuVM"
Ora, verifica che il tuo hostname venga risolto correttamente eseguendo i tre comandi seguenti.
Usa getent hosts per confermare che il nome host breve si risolva nell'FQDN. Puoi ignorare l'indirizzo IP restituito.
getent hosts contosovm
127.0.0.1 contosovm.contosodomain.contoso.com contosovm
Usare dnsdomainname per confermare che il nome di dominio sia configurato correttamente.
dnsdomainname
contosodomain.contoso.com
Usalo hostname -f per confermare che l'intero FQDN sia risolto.
hostname -f
contosovm.contosodomain.contoso.com
Nota
Alcune distribuzioni Linux richiedono di eseguire il comando hostnamectl per aggiornare hostname -f:
hostnamectl set-hostname contosovm.contosodomain.contoso.com
Configurare krb5.conf
Configura /etc/krb5.conf in modo che il centro di distribuzione delle chiavi Kerberos (KDC) su un controller di dominio AD DS possa essere contattato per l'autenticazione. Per altre informazioni, vedere la documentazione di MIT Kerberos. Ecco un file di esempio /etc/krb5.conf .
[libdefaults]
default_realm = CONTOSODOMAIN.CONTOSO.COM
dns_lookup_realm = false
dns_lookup_kdc = true
Configurare smb.conf
Identificare il percorso a smb.conf.
sudo smbd -b | grep "CONFIGFILE"
CONFIGFILE: /etc/samba/smb.conf
Cambia la configurazione SMB per agire come membro del dominio AD DS. L'esempio seguente utilizza il rid backend idmap.
Rivedi la scelta di un backend idmap e seleziona quello che soddisfa i requisiti del tuo ambiente AD DS.
[global]
workgroup = CONTOSODOMAIN
security = ADS
realm = CONTOSODOMAIN.CONTOSO.COM
winbind refresh tickets = Yes
vfs objects = acl_xattr
map acl inherit = Yes
store dos attributes = Yes
dedicated keytab file = /etc/krb5.keytab
kerberos method = secrets and keytab
winbind use default domain = Yes
load printers = No
printing = bsd
printcap name = /dev/null
disable spoolss = Yes
log file = /var/log/samba/log.%m
log level = 1
idmap config * : backend = tdb
idmap config * : range = 3000-7999
idmap config CONTOSODOMAIN : backend = rid
idmap config CONTOSODOMAIN : range = 10000-999999
template shell = /bin/bash
template homedir = /home/%U
Forzare winbind a ricaricare il file di configurazione modificato.
sudo smbcontrol all reload-config
Unisciti al dominio AD DS
Usare il net ads join comando per aggiungere l'host al dominio. Se il comando restituisce un errore, vedere Risoluzione dei problemi relativi ai membri del dominio samba per risolvere il problema.
sudo net ads join -U contososmbadmin
Enter contososmbadmin's password:
Using short domain name -- CONTOSODOMAIN
Joined 'CONTOSOVM' to dns domain 'contosodomain.contoso.com'
Assicurati che il record DNS per questo host esista nel DNS DS AD.
nslookup contosovm.contosodomain.contoso.com 10.0.2.5
Server: 10.0.2.5
Address: 10.0.2.5#53
Name: contosovm.contosodomain.contoso.com
Address: 10.0.0.8
Configurare nsswitch.conf
Se si prevede agli utenti di accedere attivamente ai computer client e di accedere alle condivisioni file Azure, è necessario configurare nsswitch.conf. Se l'accesso pianificato è limitato alle applicazioni rappresentate da un account utente o da un account computer che richiede l'autenticazione Kerberos per accedere alla condivisione file, è possibile ignorare questo passaggio.
Dopo aver aggiunto l'host al dominio, aggiungere le librerie winbind ai percorsi di ricerca di utenti e gruppi. Usare l'editor di testo per modificare /etc/nsswitch.conf e aggiungere le voci seguenti:
passwd: compat systemd winbind
group: compat systemd winbind
Abilitare il servizio winbind per l'avvio automatico al riavvio.
sudo systemctl enable winbind
Synchronizing state of winbind.service with SysV service script with /lib/systemd/systemd-sysv-install.
Executing: /lib/systemd/systemd-sysv-install enable winbind
Riavviare il servizio.
sudo systemctl restart winbind
sudo systemctl status winbind
winbind.service - Samba Winbind Daemon
Loaded: loaded (/lib/systemd/system/winbind.service; enabled; vendor preset: enabled)
Active: active (running) since Fri 2020-04-24 09:34:31 UTC; 10s ago
Docs: man:winbindd(8)
man:samba(7)
man:smb.conf(5)
Main PID: 27349 (winbindd)
Status: "winbindd: ready to serve connections..."
Tasks: 2 (limit: 4915)
CGroup: /system.slice/winbind.service
├─27349 /usr/sbin/winbindd --foreground --no-process-group
└─27351 /usr/sbin/winbindd --foreground --no-process-group
Apr 24 09:34:31 contosovm systemd[1]: Starting Samba Winbind Daemon...
Apr 24 09:34:31 contosovm winbindd[27349]: [2020/04/24 09:34:31.724211, 0] ../source3/winbindd/winbindd_cache.c:3170(initialize_winbindd_cache)
Apr 24 09:34:31 contosovm winbindd[27349]: initialize_winbindd_cache: clearing cache and re-creating with version number 2
Apr 24 09:34:31 contosovm winbindd[27349]: [2020/04/24 09:34:31.725486, 0] ../lib/util/become_daemon.c:124(daemon_ready)
Apr 24 09:34:31 contosovm systemd[1]: Started Samba Winbind Daemon.
Apr 24 09:34:31 contosovm winbindd[27349]: STATUS=daemon 'winbindd' finished starting up and ready to serve connections
Assicurarsi che gli utenti e i gruppi di dominio vengano individuati.
getent passwd contososmbadmin
contososmbadmin:*:12604:10513::/home/contososmbadmin:/bin/bash
getent group 'domain users'
domain users:x:10513:
Se i passaggi precedenti non funzionano, verifica se un controller di dominio AD DS è raggiungibile usando lo wbinfo strumento:
wbinfo --ping-dc
Configurare PAM per winbind
Se si prevede agli utenti di accedere attivamente ai computer client e di accedere alle condivisioni file Azure, è necessario configurare PAM per winbind. Se l'accesso pianificato è limitato alle applicazioni rappresentate da un account utente o da un account computer che richiede l'autenticazione Kerberos per accedere alla condivisione file, è possibile ignorare questo passaggio.
Posizionare winbind nello stack di autenticazione in modo che gli utenti del dominio eseguano l'autenticazione tramite winbind configurando PAM (Pluggable Authentication Module) per winbind. Il secondo comando garantisce che il sistema crei la home directory per un utente di dominio al primo accesso.
sudo pam-auth-update --enable winbind
sudo pam-auth-update --enable mkhomedir
Verifica che la configurazione di autenticazione PAM abbia gli argomenti corretti pam_winbind.so in /etc/pam.d/common-auth:
grep pam_winbind.so /etc/pam.d/common-auth
auth [success=1 default=ignore] pam_winbind.so krb5_auth krb5_ccache_type=FILE cached_login try_first_pass
Se il comando non restituisce alcun output, rieseguire sudo pam-auth-update --enable winbind per assicurarsi che winbind venga aggiunto allo stack di autenticazione PAM.
È ora possibile accedere a questo sistema come utente di dominio, tramite ssh, su o qualsiasi altro mezzo di autenticazione.
su - contososmbadmin
Password:
Creating directory '/home/contososmbadmin'.
contososmbadmin@contosovm:~$ pwd
/home/contososmbadmin
contososmbadmin@contosovm:~$ id
uid=12604(contososmbadmin) gid=10513(domain users) groups=10513(domain users),10520(group policy creator owners),10572(denied rodc password replication group),11102(dnsadmins),11104(aad dc administrators),11164(group-readwrite),11165(fileshareallaccess),12604(contososmbadmin)
Verifica l'autenticazione AD DS su Linux
Per verificare che la macchina client sia collegata al dominio AD DS, cerca il FQDN del client usando un server DNS AD DS e conferma che la voce DNS esiste per il client. In molti casi, <dnsserver> è lo stesso del nome di dominio AD DS a cui il client è collegato.
nslookup <clientname> <dnsserver>
Poi, esegui klist per visualizzare i ticket nella cache Kerberos:
klist
L'output dovrebbe includere una voce che inizia con krbtgt e che assomigli a:
krbtgt/CONTOSODOMAIN.CONTOSO.COM@CONTOSODOMAIN.CONTOSO.COM
Se non hai configurato PAM per winbind, potrebbe non visualizzare la voce del ticket. In questo caso, è possibile autenticare manualmente l'utente per ottenere i ticket:
wbinfo -K contososmbadmin
È anche possibile eseguire il comando come parte di uno script:
wbinfo -K 'contososmbadmin%SUPERSECRETPASSWORD'
Montare la condivisione di file
Dopo aver abilitato l'autenticazione Kerberos e aver aggiunto la macchina virtuale Linux a un dominio, è possibile montare la condivisione file.
Usare l'opzione di montaggio seguente con tutti i modelli di controllo di accesso per abilitare la sicurezza Kerberos: sec=krb5. Omettere il nome utente e la password quando si usa sec=krb5. Per esempio:
sudo mount -t cifs $SMB_PATH $MNT_PATH -o sec=krb5,cruid=$UID,serverino,nosharesock,actimeo=30,mfsymlinks
Nota
Questa funzionalità supporta solo un modello di controllo di accesso imposto dal server che usa ACL NT senza bit di modalità. Gli strumenti Linux che aggiornano gli ACL NT sono minimi, quindi aggiornare gli elenchi di controllo di accesso tramite Windows. I modelli di controllo di accesso imposto dal client (modefromsid,idsfromsid) e di controllo di accesso tradotto dal client (cifsacl) non sono attualmente supportati.
Opzioni aggiuntive di montaggio SMB su File di Azure per Linux
Differenze tra il montaggio per utente singolo e il montaggio multi-utente
In uno scenario di montaggio per utente singolo, un solo utente del dominio AD DS accede al punto di montaggio e non lo condivide con altri utenti del dominio. Ogni accesso ai file viene eseguito nel contesto dell'utente le cui credenziali krb5 vengono usate per montare la condivisione file. Qualsiasi utente nel sistema locale che accede al punto di montaggio rappresenta tale utente.
In un caso d'uso di montaggio multiutente, è comunque presente un singolo punto di montaggio, ma più utenti AD DS possono accedere allo stesso punto di montaggio. Negli scenari in cui più utenti nello stesso client accedono alla stessa condivisione e il sistema è configurato per Kerberos e montato con sec=krb5, è consigliabile usare l'opzione multiuser di montaggio.
Autorizzazioni dei file
Le autorizzazioni per i file sono importanti, soprattutto se sia Linux che Windows client accedono alla condivisione file. Per convertire i permessi dei file in DACL sui file, utilizzare un'opzione di montaggio predefinita, ad esempio file_mode=<>,dir_mode=<>. Il client applica solo le autorizzazioni di file specificate come file_mode e dir_mode. Il server applica il controllo di accesso in base al descrittore di sicurezza del file o della directory.
Proprietà del file
La proprietà dei file è importante, soprattutto se sia Linux che Windows client accedono alla condivisione file. Scegliere una delle seguenti opzioni di montaggio per convertire l'UID/GID di proprietà del file in SID del proprietario/del gruppo sul file DACL.
- Usare un valore predefinito, ad esempio uid=<>,gid=<>
- Configura la mappatura UID/GID tramite RFC2307 e AD DS usando nss_winbind o nss_sssd.
Coescenza della cache degli attributi dei file
Le prestazioni sono importanti, anche se gli attributi del file non sono sempre accurati. Il valore predefinito per actimeo è 1 (secondo), il che significa che gli attributi del file vengono recuperati di nuovo dal server se gli attributi memorizzati nella cache sono più di 1 secondo precedente. L'aumento del valore a 60 indica che gli attributi vengono memorizzati nella cache per almeno un minuto. Per la maggior parte dei casi d'uso, usare il valore 30 per questa opzione (actimeo=30).
Per i kernel più recenti, è consigliabile impostare le funzionalità actimeo in modo più granulare. È possibile usare acdirmax per la riconvalida della voce di directory e acregmax per la memorizzazione nella cache dei metadati del file, ad esempio acdirmax=60,acregmax=5.
Passaggio successivo
Per informazioni su come montare una condivisione file SMB in Linux, vedere: