Share via


Active Directory-verificatie via SMB inschakelen voor Linux-clients die toegang hebben tot Azure Files

Zie Overzicht van verificatieopties op basis van identiteiten op basis van Azure Files voor SMB-toegang voor meer informatie over ondersteunde opties en overwegingen.

Azure Files ondersteunt verificatie op basis van identiteit via Server Message Block (SMB) voor virtuele Linux-machines (VM's) met behulp van het Kerberos-verificatieprotocol via de volgende methoden:

  • On-premises Windows Active Directory-domein Services (AD DS)
  • Microsoft Entra Domain Services.

Als u AD DS wilt gebruiken, moet u uw AD DS synchroniseren met Microsoft Entra-id met behulp van Microsoft Entra Verbinding maken.

Notitie

In dit artikel wordt Ubuntu gebruikt voor de voorbeeldstappen. Vergelijkbare configuraties werken voor RHEL- en SLES-machines, zodat u Azure-bestandsshares kunt koppelen met Behulp van Active Directory.

Van toepassing op

Bestands sharetype SMB NFS
Standaardbestandsshares (GPv2), LRS/ZRS Ja, dit artikel is van toepassing op standaard SMB Azure-bestandsshares LRS/ZRS. Nee, dit artikel is niet van toepassing op NFS Azure-bestandsshares.
Standaardbestandsshares (GPv2), GRS/GZRS Ja, dit artikel is van toepassing op standaard-SMB Azure-bestandsshares GRS/GZRS. Dit artikel is niet van toepassing op NFS Azure-bestandsshares.
Premium bestandsshares (FileStorage), LRS/ZRS Ja, dit artikel is van toepassing op Premium SMB Azure-bestandsshares. Nee, dit artikel is niet van toepassing op Premium NFS Azure-bestandsshares.

Beperkingen voor Linux SMB-clients

U kunt verificatie op basis van identiteit niet gebruiken om Azure-bestandsshares te koppelen aan Linux-clients tijdens het opstarten met vermeldingen fstab , omdat de client het Kerberos-ticket niet vroeg genoeg kan ophalen om te koppelen tijdens het opstarten. U kunt echter een fstab vermelding gebruiken en de noauto optie opgeven. Hierdoor wordt de share niet gekoppeld tijdens het opstarten, maar kan een gebruiker de bestandsshare gemakkelijk koppelen nadat ze zich hebben aangemeld met behulp van een eenvoudige koppelingsopdracht zonder alle parameters. U kunt de share ook autofs koppelen bij toegang.

Vereisten

Voordat u AD-verificatie inschakelt via SMB voor Azure-bestandsshares, moet u ervoor zorgen dat u aan de volgende vereisten voldoet.

  • Een Virtuele Linux-machine (Ubuntu 18.04+ of een equivalente RHEL- of SLES-VM) die wordt uitgevoerd in Azure. De VIRTUELE machine moet ten minste één netwerkinterface hebben op het VNET met de Microsoft Entra Domain Services of een on-premises Linux-VM waarop AD DS is gesynchroniseerd met Microsoft Entra ID.
  • Hoofdgebruikers- of gebruikersreferenties voor een lokaal gebruikersaccount met volledige sudo-rechten (voor deze handleiding, localadmin).
  • De Virtuele Linux-machine mag geen lid zijn geworden van een AD-domein. Als het al deel uitmaakt van een domein, moet het eerst dat domein verlaten voordat het lid kan worden van dit domein.
  • Een Microsoft Entra-tenant is volledig geconfigureerd, met domeingebruiker die al is ingesteld.

Het installeren van het samba-pakket is niet strikt noodzakelijk, maar het biedt u enkele handige hulpprogramma's en brengt automatisch andere pakketten, zoals samba-common en smbclient. Voer de volgende opdrachten uit om deze te installeren. Als u tijdens de installatie om invoerwaarden wordt gevraagd, laat u deze leeg.

sudo apt update -y
sudo apt install samba winbind libpam-winbind libnss-winbind krb5-config krb5-user keyutils cifs-utils

Het wbinfo hulpprogramma maakt deel uit van de samba suite. Het kan handig zijn voor verificatie- en foutopsporingsdoeleinden, zoals controleren of de domeincontroller bereikbaar is, controleert aan welk domein een computer is gekoppeld en informatie over gebruikers zoeken.

Zorg ervoor dat de Linux-host de tijd gesynchroniseerd houdt met de domeinserver. Raadpleeg de documentatie voor uw Linux-distributie. Voor sommige distributies kunt u dit doen met behulp van systemd-timesyncd. Bewerk /etc/systemd/timesyncd.conf met uw favoriete teksteditor om het volgende op te nemen:

[Time]
NTP=onpremaadint.com
FallbackNTP=ntp.ubuntu.com

Start vervolgens de service opnieuw op:

sudo systemctl restart systemd-timesyncd.service

AD Kerberos-verificatie inschakelen

Volg deze stappen om AD Kerberos-verificatie in te schakelen. Deze Samba-documentatie kan nuttig zijn als referentie.

Zorg ervoor dat de domeinserver bereikbaar en detecteerbaar is

  1. Zorg ervoor dat de opgegeven DNS-servers de IP-adressen van de domeinserver bevatten.
systemd-resolve --status
Global 
          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.com 
  1. Als de opdracht heeft gewerkt, slaat u de volgende stappen over en gaat u verder met de volgende sectie.

  2. Als dit niet werkt, controleert u of de IP-adressen van de domeinserver pingen.

ping 10.0.2.5
PING 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 ms
  1. Als de ping niet werkt, gaat u terug naar de vereisten en controleert u of uw VIRTUELE machine zich in een VNET bevindt dat toegang heeft tot de Microsoft Entra-tenant.

  2. Als de IP-adressen pingen, maar de DNS-servers niet automatisch worden gedetecteerd, kunt u de DNS-servers handmatig toevoegen. Bewerken /etc/netplan/50-cloud-init.yaml met uw favoriete teksteditor.

# 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: 2

Pas vervolgens de wijzigingen toe:

sudo netplan --debug apply 
  1. Winbind gaat ervan uit dat de DHCP-server de DNS-records van het domein up-to-date houdt. Dit geldt echter niet voor Azure DHCP. Als u de client wilt instellen om DDNS-updates te maken, gebruikt u deze handleiding om een netwerkscript te maken. Hier volgt een voorbeeldscript waar zich bevindt /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 

Verbinding maken naar Microsoft Entra Domain Services en zorg ervoor dat de services kunnen worden gedetecteerd

  1. Zorg ervoor dat u de domeinserver kunt pingen op basis van de domeinnaam.
ping contosodomain.contoso.com
PING contosodomain.contoso.com (10.0.2.4) 56(84) bytes of data.
64 bytes from pwe-oqarc11l568.internal.cloudapp.net (10.0.2.4): icmp_seq=1 ttl=128 time=1.41 ms
64 bytes from pwe-oqarc11l568.internal.cloudapp.net (10.0.2.4): icmp_seq=2 ttl=128 time=1.02 ms
64 bytes from pwe-oqarc11l568.internal.cloudapp.net (10.0.2.4): icmp_seq=3 ttl=128 time=0.740 ms
64 bytes from pwe-oqarc11l568.internal.cloudapp.net (10.0.2.4): icmp_seq=4 ttl=128 time=0.925 ms 

^C 

--- contosodomain.contoso.com ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3016ms
rtt min/avg/max/mdev = 0.740/1.026/1.419/0.248 ms 
  1. Zorg ervoor dat u de Microsoft Entra-services op het netwerk kunt detecteren.
nslookup
> set type=SRV
> _ldap._tcp.contosodomain.contoso.com.
Server:         127.0.0.53
Address:        127.0.0.53#53

Non-authoritative answer: 

_ldap._tcp.contosodomain.contoso.com service = 0 100 389 pwe-oqarc11l568.contosodomain.contoso.com.
_ldap._tcp.contosodomain.contoso.com service = 0 100 389 hxt4yo--jb9q529.contosodomain.contoso.com. 

Hostnaam en Fully Qualified Domain Name (FQDN) instellen

  1. Werk met behulp van de teksteditor het /etc/hosts bestand bij met de uiteindelijke FQDN (na deelname aan het domein) en de alias voor de host. Het IP-adres maakt momenteel niet uit omdat deze regel voornamelijk wordt gebruikt om korte hostnaam te vertalen naar FQDN. Zie Samba instellen als domeinlid voor meer informatie.
127.0.0.1       contosovm.contosodomain.contoso.com contosovm
#cmd=sudo vim /etc/hosts   
#then enter this value instead of localhost "ubuntvm.contosodomain.contoso.com UbuntuVM" 
  1. Nu moet uw hostnaam worden omgezet. U kunt het IP-adres negeren dat voor nu wordt omgezet. De korte hostnaam moet worden omgezet in de FQDN.
getent hosts contosovm
127.0.0.1       contosovm.contosodomain.contoso.com contosovm
dnsdomainname
contosodomain.contoso.com
hostname -f
contosovm.contosodomain.contoso.com 

Notitie

Voor sommige distributies moet u de hostnamectl opdracht uitvoeren om hostnaam -f te kunnen bijwerken:

hostnamectl set-hostname contosovm.contosodomain.contoso.com

Krb5.conf instellen

  1. Configureer /etc/krb5.conf dit zodat het Kerberos-sleuteldistributiecentrum (KDC) met de domeinserver kan worden gecontacteerd voor verificatie. Zie de mit Kerberos-documentatie voor meer informatie. Hier volgt een voorbeeldbestand /etc/krb5.conf .
[libdefaults]
        default_realm = CONTOSODOMAIN.CONTOSO.COM
        dns_lookup_realm = false
        dns_lookup_kdc = true

smb.conf instellen

  1. Identificeer het pad naar smb.conf.
sudo smbd -b | grep "CONFIGFILE"
   CONFIGFILE: /etc/samba/smb.conf
  1. Wijzig de SMB-configuratie om te fungeren als een domeinlid. Zie Samba instellen als domeinlid voor meer informatie. Hier volgt een voorbeeldbestand smb.conf .

Notitie

Dit voorbeeld is voor Microsoft Entra Domain Services, waarvoor u het beste kunt instellen backend = rid bij het configureren van idmap. On-premises AD DS-gebruikers kiezen mogelijk liever een andere idmap-back-end.

[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 
  1. Dwing winbind af om het gewijzigde configuratiebestand opnieuw te laden.
sudo smbcontrol all reload-config

Aan domein toevoegen

  1. Gebruik de net ads join opdracht om de host toe te voegen aan het domein Microsoft Entra Domain Services. Als de opdracht een fout genereert, raadpleegt u Problemen met samba-domeinleden oplossen om het probleem op te lossen.
sudo net ads join -U contososmbadmin    # user  - garead

Enter contososmbadmin's password:
Using short domain name -- CONTOSODOMAIN
Joined 'CONTOSOVM' to dns domain 'contosodomain.contoso.com' 
  1. Zorg ervoor dat de DNS-record bestaat voor deze host op de domeinserver.
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

Als gebruikers zich actief aanmelden bij clientcomputers of VM's en toegang krijgen tot de Azure-bestandsshares, moet u nsswitch.conf instellen en PAM configureren voor winbind. Als de toegang wordt beperkt tot toepassingen die worden vertegenwoordigd door een gebruikersaccount of computeraccount waarvoor Kerberos-verificatie nodig is voor toegang tot de bestandsshare, kunt u deze stappen overslaan.

nsswitch.conf instellen

  1. Nu de host is toegevoegd aan het domein, moet u winbindbibliotheken plaatsen op de plaatsen waar u kunt zoeken wanneer u gebruikers en groepen zoekt. Doe dit door de passwd- en groepsvermeldingen bij te werken in nsswitch.conf. Gebruik de teksteditor om de volgende items te bewerken /etc/nsswitch.conf en toe te voegen:
passwd:         compat systemd winbind
group:          compat systemd winbind
  1. Schakel de winbind-service in om automatisch te starten bij het opnieuw opstarten.
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
  1. Start vervolgens de service opnieuw op.
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 
  1. Zorg ervoor dat de domeingebruikers en -groepen worden gedetecteerd.
getent passwd contososmbadmin
contososmbadmin:*:12604:10513::/home/contososmbadmin:/bin/bash
getent group 'domain users'
domain users:x:10513: 

Als het bovenstaande niet werkt, controleert u of de domeincontroller bereikbaar is met behulp van het hulpprogramma wbinfo:

wbinfo --ping-dc

PAM configureren voor winbind

  1. U moet winbind in de verificatiestack plaatsen, zodat domeingebruikers worden geverifieerd via winbind door PAM (Pluggable Authentication Module) te configureren voor winbind. De tweede opdracht zorgt ervoor dat de homedir wordt gemaakt voor een domeingebruiker bij de eerste aanmelding bij dit systeem.
sudo pam-auth-update --enable winbind
sudo pam-auth-update --enable mkhomedir 
  1. Zorg ervoor dat de configuratie van de PAM-verificatie de volgende argumenten bevat:/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 
  1. U moet zich nu als domeingebruiker kunnen aanmelden bij dit systeem, via ssh, su of een ander verificatiemiddel.
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) 

Configuratie controleren

Als u wilt controleren of de clientcomputer lid is van het domein, zoekt u de FQDN van de client op de domeincontroller en zoekt u de DNS-vermelding die voor deze specifieke client wordt vermeld. In veel gevallen <dnsserver> is dit hetzelfde als de domeinnaam waaraan de client is toegevoegd.

nslookup <clientname> <dnsserver>

Gebruik vervolgens de klist opdracht om de tickets in de Kerberos-cache weer te geven. Er moet een vermelding zijn die begint met krbtgt die er ongeveer als volgt uitziet:

krbtgt/CONTOSODOMAIN.CONTOSO.COM@CONTOSODOMAIN.CONTOSO.COM

Als u PAM niet hebt geconfigureerd voor winbind, klist wordt de ticketvermelding mogelijk niet weergegeven. In dit geval kunt u de gebruiker handmatig verifiëren om de tickets op te halen:

wbinfo -K contososmbadmin

U kunt de opdracht ook uitvoeren als onderdeel van een script:

wbinfo -K 'contososmbadmin%SUPERSECRETPASSWORD'

De bestandsshare koppelen

Nadat u AD (of Microsoft Entra ID) Kerberos-verificatie hebt ingeschakeld en lid bent van een domein, kunt u de bestandsshare koppelen.

Zie De Azure-bestandsshare op aanvraag koppelen met koppeling voor gedetailleerde instructies.

Gebruik de volgende extra koppelingsoptie met alle toegangsbeheermodellen om Kerberos-beveiliging in te schakelen: sec=krb5

Notitie

Deze functie ondersteunt alleen een door de server afgedwongen toegangsbeheermodel met behulp van NT-ACL's zonder modus bits. Linux-hulpprogramma's waarmee NT-ACL's worden bijgewerkt, zijn minimaal, dus werk ACL's bij via Windows. Door clients afgedwongen modellen voor toegangsbeheer (modefromsid,idsfromsid) en door clients vertaald toegangsbeheer (cifsacl) worden momenteel niet ondersteund.

Andere koppelingsopties

Koppeling tussen één gebruiker en meerdere gebruikers

In een use-case voor koppelen met één gebruiker wordt het koppelpunt geopend door één gebruiker van het AD-domein en wordt het niet gedeeld met andere gebruikers van het domein. Elke bestandstoegang vindt plaats in de context van de gebruiker waarvan de krb5-referenties zijn gebruikt om de bestandsshare te koppelen. Elke gebruiker op het lokale systeem die toegang heeft tot het koppelpunt, imiteert die gebruiker.

In een use-case voor koppelen met meerdere gebruikers is er nog steeds één koppelpunt, maar meerdere AD-gebruikers hebben toegang tot hetzelfde koppelpunt. In scenario's waarin meerdere gebruikers op dezelfde client toegang krijgen tot dezelfde share en het systeem is geconfigureerd voor Kerberos en gekoppeld sec=krb5, kunt u overwegen de multiuser koppelingsoptie te gebruiken.

Bestandsmachtigingen

Bestandsmachtigingen zijn belangrijk, met name als zowel Linux- als Windows-clients toegang hebben tot de bestandsshare. Als u bestandsmachtigingen wilt converteren naar DACL's voor bestanden, gebruikt u een standaardkoppelingsoptie zoals file_mode=<>,dir_mode=<>. Bestandsmachtigingen die zijn opgegeven als file_mode en dir_mode worden alleen afgedwongen binnen de client. De server dwingt toegangsbeheer af op basis van de beveiligingsdescriptor van het bestand of de map.

Eigendom van bestand

Bestandseigendom is van belang, met name als zowel Linux- als Windows-clients toegang hebben tot de bestandsshare. Kies een van de volgende koppelingsopties om de UID/GID van het bestand te converteren naar de EIGENAAR/groeps-SID op bestands-DACL:

  • Een standaardwaarde gebruiken, zoals uid=<>,gid=<>
  • UID/GID-toewijzing configureren via RFC2307 en Active Directory (nss_winbind of nss_sssd)

Coherency van bestandskenmerkcache

Prestaties zijn belangrijk, zelfs als bestandskenmerken niet altijd nauwkeurig zijn. De standaardwaarde voor actimeo is 1 (seconde), wat betekent dat de bestandskenmerken opnieuw van de server worden opgehaald als de kenmerken in de cache meer dan 1 seconde oud zijn. Het verhogen van de waarde tot 60 betekent dat kenmerken ten minste 1 minuut in de cache worden opgeslagen. Voor de meeste gebruiksscenario's raden we u aan om voor deze optie een waarde van 30 te gebruiken (actimeo=30).

Voor nieuwere kernels kunt u de actimeo-functies nauwkeuriger instellen. U kunt acdirmax gebruiken voor het opnieuwvalideren van mapvermeldingen en acregmax voor het opslaan van metagegevens van bestanden, bijvoorbeeld acdirmax=60,acregmax=5.

Volgende stap

Zie voor meer informatie over het koppelen van een SMB-bestandsshare in Linux: