Dela via


Aktivera Active Directory-autentisering via SMB för Linux-klienter som har åtkomst till Azure Files

Mer information om alternativ och överväganden som stöds finns i Översikt över identitetsbaserade autentiseringsalternativ för Azure Files för SMB-åtkomst.

Azure Files stöder identitetsbaserad autentisering via SMB (Server Message Block) för virtuella Linux-datorer (VM) med hjälp av Kerberos-autentiseringsprotokollet via följande metoder:

  • Lokala Windows Active Directory-domän Services (AD DS)
  • Microsoft Entra Domain Services

För att kunna använda AD DS måste du synkronisera din AD DS till Microsoft Entra-ID med hjälp av Microsoft Entra Connect.

Kommentar

I den här artikeln används Ubuntu för exempelstegen. Liknande konfigurationer fungerar för RHEL- och SLES-datorer, så att du kan montera Azure-filresurser med hjälp av Active Directory.

Gäller för

Typ av filresurs SMB NFS
Standardfilresurser (GPv2), LRS/ZRS Ja, den här artikeln gäller för standard-SMB Azure-filresurser LRS/ZRS. Nej, den här artikeln gäller inte för NFS Azure-filresurser.
Standardfilresurser (GPv2), GRS/GZRS Ja, den här artikeln gäller för standard-SMB Azure-filresurser GRS/GZRS. Nej, den här artikeln gäller inte för NFS Azure-filresurser.
Premiumfilresurser (FileStorage), LRS/ZRS Ja, den här artikeln gäller för Premium SMB Azure-filresurser. Nej, den här artikeln gäller inte för Premium NFS Azure-filresurser.

Linux SMB-klientbegränsningar

Du kan inte använda identitetsbaserad autentisering för att montera Azure-filresurser på Linux-klienter vid start med hjälp av fstab poster eftersom klienten inte kan hämta Kerberos-biljetten tillräckligt tidigt för att montera vid starttiden. Du kan dock använda en fstab post och ange alternativet noauto . Detta monterar inte resursen vid starttillfället, men det gör att en användare enkelt kan montera filresursen när de har loggat in med ett enkelt monteringskommando utan alla parametrar. Du kan också använda autofs för att montera resursen vid åtkomst.

Förutsättningar

Innan du aktiverar AD-autentisering via SMB för Azure-filresurser kontrollerar du att du har slutfört följande krav.

  • En virtuell Linux-dator som kör Ubuntu 18.04+, eller en motsvarande virtuell RHEL- eller SLES-dator. Om den körs på Azure måste den virtuella datorn ha minst ett nätverksgränssnitt på det virtuella nätverket som innehåller Microsoft Entra Domain Services. Om du använder en lokal virtuell dator måste din AD DS synkroniseras med Microsoft Entra-ID.
  • Rotanvändare eller användarautentiseringsuppgifter till ett lokalt användarkonto som har fullständiga sudo-rättigheter (för den här guiden localadmin).
  • Den virtuella Linux-datorn får inte ha anslutit någon AD-domän. Om den redan är en del av en domän måste den först lämna domänen innan den kan ansluta till den här domänen.
  • En Microsoft Entra-klientorganisation har konfigurerats fullt ut och domänanvändaren har redan konfigurerats.

Det är inte absolut nödvändigt att installera samba-paketet, men det ger dig några användbara verktyg och tar in andra paket automatiskt, till exempel samba-common och smbclient. Kör följande kommandon för att installera det. Om du uppmanas att ange indatavärden under installationen lämnar du dem tomma.

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

Verktyget wbinfo är en del av samba-sviten. Det kan vara användbart för autentisering och felsökning, till exempel för att kontrollera om domänkontrollanten kan nås, kontrollera vilken domän en dator är ansluten till och hitta information om användare.

Kontrollera att Linux-värden håller tiden synkroniserad med domänservern. Se dokumentationen för din Linux-distribution. För vissa distributioner kan du göra detta med systemd-timesyncd. Redigera /etc/systemd/timesyncd.conf med din favorittextredigerare för att inkludera följande:

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

Starta sedan om tjänsten:

sudo systemctl restart systemd-timesyncd.service

Aktivera AD Kerberos-autentisering

Följ de här stegen för att aktivera AD Kerberos-autentisering. Den här Samba-dokumentationen kan vara användbar som referens.

Kontrollera att domänservern kan nås och identifieras

  1. Kontrollera att de ANGIVNA DNS-servrarna innehåller domänserverns IP-adresser.
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. Om kommandot fungerade hoppar du över följande steg och fortsätter till nästa avsnitt.

  2. Om det inte fungerade kontrollerar du att domänserverns IP-adresser pingar.

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. Om pingen inte fungerar går du tillbaka till kraven och ser till att den virtuella datorn finns på ett virtuellt nätverk som har åtkomst till Microsoft Entra-klientorganisationen.

  2. Om IP-adresserna pingar men DNS-servrarna inte identifieras automatiskt kan du lägga till DNS-servrarna manuellt. Redigera /etc/netplan/50-cloud-init.yaml med din favorittextredigerare.

# 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

Tillämpa sedan ändringarna:

sudo netplan --debug apply 
  1. Winbind förutsätter att DHCP-servern håller domänens DNS-poster uppdaterade. Detta gäller dock inte för Azure DHCP. Använd den här guiden för att skapa ett nätverksskript för att konfigurera klienten för att göra DDNS-uppdateringar. Här är ett exempelskript som finns på /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 

Anslut till Microsoft Entra Domain Services och se till att tjänsterna kan identifieras

  1. Kontrollera att du kan pinga domänservern med domännamnet.
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. Se till att du kan identifiera Microsoft Entra-tjänsterna i nätverket.
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. 

Konfigurera värdnamn och fullständigt domännamn (FQDN)

  1. Med hjälp av textredigeraren uppdaterar /etc/hosts du filen med det slutliga fullständiga domännamnet (efter att du har anslutit till domänen) och aliaset för värden. IP-adressen spelar ingen roll för tillfället eftersom den här raden främst används för att översätta kort värdnamn till FQDN. Mer information finns i Konfigurera Samba som domänmedlem.
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 bör värdnamnet matcha. Du kan ignorera den IP-adress som den matchar för tillfället. Det korta värdnamnet bör matcha FQDN.
getent hosts contosovm
127.0.0.1       contosovm.contosodomain.contoso.com contosovm
dnsdomainname
contosodomain.contoso.com
hostname -f
contosovm.contosodomain.contoso.com 

Kommentar

Vissa distributioner kräver att du kör hostnamectl kommandot för att värdnamnet -f ska uppdateras:

hostnamectl set-hostname contosovm.contosodomain.contoso.com

Konfigurera krb5.conf

  1. Konfigurera /etc/krb5.conf så att Kerberos nyckeldistributionscenter (KDC) med domänservern kan kontaktas för autentisering. Mer information finns i MIT Kerberos-dokumentation. Här är en exempelfil /etc/krb5.conf .
[libdefaults]
        default_realm = CONTOSODOMAIN.CONTOSO.COM
        dns_lookup_realm = false
        dns_lookup_kdc = true

Konfigurera smb.conf

  1. Identifiera sökvägen till smb.conf.
sudo smbd -b | grep "CONFIGFILE"
   CONFIGFILE: /etc/samba/smb.conf
  1. Ändra SMB-konfigurationen så att den fungerar som domänmedlem. Mer information finns i Konfigurera samba som domänmedlem. Här är en exempelfil smb.conf .

Kommentar

Det här exemplet gäller Microsoft Entra Domain Services, som vi rekommenderar att du ställer in backend = rid när du konfigurerar idmap. Lokala AD DS-användare kanske föredrar att välja en annan idmap-serverdel.

[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. Tvinga winbind att läsa in den ändrade konfigurationsfilen igen.
sudo smbcontrol all reload-config

Anslut till domänen

  1. net ads join Använd kommandot för att ansluta värden till domänen Microsoft Entra Domain Services. Om kommandot utlöser ett fel läser du Felsöka samba-domänmedlemmar för att lösa problemet.
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. Kontrollera att DNS-posten finns för den här värden på domänservern.
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

Om användarna aktivt loggar in på klientdatorer eller virtuella datorer och kommer åt Azure-filresurserna måste du konfigurera nsswitch.conf och konfigurera PAM för winbind. Om åtkomsten begränsas till program som representeras av ett användarkonto eller datorkonto som behöver Kerberos-autentisering för att komma åt filresursen kan du hoppa över de här stegen.

Konfigurera nsswitch.conf

  1. Nu när värden är ansluten till domänen måste du placera winbind-bibliotek på de platser du ska leta efter när du letar efter användare och grupper. Gör detta genom att uppdatera posterna för passwd och grupper i nsswitch.conf. Använd textredigeraren för att redigera /etc/nsswitch.conf och lägga till följande poster:
passwd:         compat systemd winbind
group:          compat systemd winbind
  1. Aktivera winbind-tjänsten för att starta automatiskt vid omstart.
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. Starta sedan om tjänsten.
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. Kontrollera att domänanvändarna och grupperna identifieras.
getent passwd contososmbadmin
contososmbadmin:*:12604:10513::/home/contososmbadmin:/bin/bash
getent group 'domain users'
domain users:x:10513: 

Om ovanstående inte fungerar kontrollerar du om domänkontrollanten kan nås med hjälp av wbinfo-verktyget:

wbinfo --ping-dc

Konfigurera PAM för winbind

  1. Du måste placera winbind i autentiseringsstacken så att domänanvändare autentiseras via winbind genom att konfigurera PAM (Pluggable Authentication Module) för winbind. Det andra kommandot ser till att homedir skapas för en domänanvändare vid första inloggningen till det här systemet.
sudo pam-auth-update --enable winbind
sudo pam-auth-update --enable mkhomedir 
  1. Kontrollera att PAM-autentiseringskonfigurationen har följande argument i /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. Nu bör du kunna logga in på det här systemet som domänanvändare, antingen via ssh, su eller något annat autentiseringsmedel.
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) 

Verifiera konfiguration

Kontrollera att klientdatorn är ansluten till domänen genom att leta upp FQDN för klienten på domänkontrollanten och hitta DNS-posten som anges för den här klienten. I många fall <dnsserver> är samma som det domännamn som klienten är ansluten till.

nslookup <clientname> <dnsserver>

klist Använd sedan kommandot för att visa biljetterna i Kerberos-cachen. Det bör finnas en post som börjar med krbtgt som ser ut ungefär så här:

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

Om du inte har konfigurerat PAM för winbindklist kanske du inte visar biljettposten. I det här fallet kan du manuellt autentisera användaren för att hämta biljetterna:

wbinfo -K contososmbadmin

Du kan också köra kommandot som en del av ett skript:

wbinfo -K 'contososmbadmin%SUPERSECRETPASSWORD'

Montera filresursen

När du har aktiverat AD-autentisering (eller Microsoft Entra-ID) kerberos-autentisering och domänansluten virtuell Linux-dator kan du montera filresursen.

Detaljerade monteringsinstruktioner finns i Montera Azure-filresursen på begäran med montering.

Använd följande ytterligare monteringsalternativ med alla åtkomstkontrollmodeller för att aktivera Kerberos-säkerhet: sec=krb5. Användarnamn och lösenord måste utelämnas när sec=krb5 används.

Kommentar

Den här funktionen stöder endast en serverbaserad åtkomstkontrollmodell med hjälp av NT-ACL:er utan lägesbitar. Linux-verktyg som uppdaterar NT-ACL:er är minimala, så uppdatera ACL:er via Windows. Klientbaserade åtkomstkontrollmodeller (modefromsid,idsfromsid) och klientöversatta åtkomstkontrollmodeller (cifsacl) stöds inte för närvarande.

Andra monteringsalternativ

Montering med en användare jämfört med flera användare

I ett användningsfall för montering av en användare används monteringspunkten av en enskild användare av AD-domänen och delas inte med andra användare av domänen. Varje filåtkomst sker i kontexten för den användare vars krb5-autentiseringsuppgifter användes för att montera filresursen. Alla användare i det lokala systemet som kommer åt monteringspunkten personifierar den användaren.

I ett användningsfall för flera användare finns det fortfarande en enda monteringspunkt, men flera AD-användare kan komma åt samma monteringspunkt. I scenarier där flera användare på samma klient kommer åt samma resurs, och systemet är konfigurerat för Kerberos och monterat med sec=krb5, bör du överväga att använda monteringsalternativet multiuser .

Filbehörigheter

Filbehörigheter är viktiga, särskilt om både Linux- och Windows-klienter kommer åt filresursen. Om du vill konvertera filbehörigheter till DACLs för filer använder du ett standardmonteringsalternativ som file_mode=<>,dir_mode=<>. Filbehörigheter som anges som file_mode och dir_mode tillämpas endast i klienten. Servern tillämpar åtkomstkontroll baserat på filens eller katalogens säkerhetsbeskrivning.

Filägarskap

Filägarskap är viktigt, särskilt om både Linux- och Windows-klienter kommer åt filresursen. Välj något av följande monteringsalternativ för att konvertera filägarskaps-UID/GID till ägare/grupp-SID i fil-DACL:

  • Använd ett standardvärde som uid=<>,gid=<>
  • Konfigurera UID/GID-mappning via RFC2307 och Active Directory (nss_winbind eller nss_sssd)

Samtidighet för filattributcache

Prestanda är viktigt, även om filattribut inte alltid är korrekta. Standardvärdet för actimeo är 1 (andra), vilket innebär att filattributen hämtas igen från servern om de cachelagrade attributen är mer än 1 sekund gamla. Att öka värdet till 60 innebär att attribut cachelagras i minst 1 minut. För de flesta användningsfall rekommenderar vi att du använder värdet 30 för det här alternativet (actimeo=30).

För nyare kernels kan du överväga att ställa in actimeo-funktionerna mer detaljerat. Du kan använda acdirmax för cachelagring av katalogposter och acregmax för cachelagring av filmetadata, till exempel acdirmax=60,acregmax=5.

Gå vidare

Mer information om hur du monterar en SMB-filresurs på Linux finns i: