Povolení ověřování Active Directory přes protokol SMB pro klienty s Linuxem, kteří přistupují ke službě Azure Files

Další informace o podporovaných možnostech a důležitých informacích najdete v tématu Přehled možností ověřování založeného na identitě služby Azure Files pro přístup k protokolu SMB.

Azure Files podporuje ověřování založené na identitě přes protokol SMB (Server Message Block) pro virtuální počítače s Linuxem pomocí ověřovacího protokolu Kerberos pomocí následujících metod:

  • Místní služba Windows Doména služby Active Directory Services (AD DS)
  • Microsoft Entra Domain Services

Abyste mohli používat službu AD DS, musíte službu AD DS synchronizovat s ID Microsoft Entra pomocí služby Microsoft Entra Připojení.

Poznámka:

Tento článek používá Ubuntu pro ukázkové kroky. Podobné konfigurace budou fungovat pro počítače RHEL a SLES, což vám umožní připojit sdílené složky Azure pomocí Active Directory.

Platí pro

Typ sdílené složky SMB NFS
Sdílené složky úrovně Standard (GPv2), LRS/ZRS Ano, tento článek se týká standardních sdílených složek SMB Azure LRS/ZRS. Ne, tento článek se nevztahuje na sdílené složky Azure NFS.
Sdílené složky úrovně Standard (GPv2), GRS/GZRS Ano, tento článek se týká standardních sdílených složek SMB Azure GRS/GZRS. Tento článek se nevztahuje na sdílené složky Azure NFS.
Sdílené složky úrovně Premium (FileStorage), LRS/ZRS Ano, tento článek se týká prémiových sdílených složek SMB Azure. Ne, tento článek se nevztahuje na prémiové sdílené složky Azure NFS.

Omezení klienta SMB pro Linux

Ověřování založené na identitě nemůžete použít k připojení sdílených složek Azure v klientech s Linuxem při spuštění pomocí fstab položek, protože klient nemůže získat lístek Kerberos dostatečně brzy, aby se mohl připojit při spuštění. Můžete však použít fstab položku a zadat noauto možnost. Sdílenou složku se při spuštění nepřipojí, ale umožní uživateli pohodlně připojit sdílenou složku po přihlášení pomocí jednoduchého příkazu pro připojení bez všech parametrů. Sdílenou složku můžete připojit autofs také při přístupu.

Požadavky

Než povolíte ověřování AD přes protokol SMB pro sdílené složky Azure, ujistěte se, že jste dokončili následující požadavky.

  • Virtuální počítač s Linuxem (Ubuntu 18.04+ nebo ekvivalentní virtuální počítač RHEL nebo SLES) běžící v Azure. Virtuální počítač musí mít alespoň jedno síťové rozhraní ve virtuální síti obsahující službu Microsoft Entra Domain Services nebo místní linuxový virtuální počítač se službou AD DS synchronizovanou s ID Microsoft Entra.
  • Root user or user credentials to a local user account that has full sudo rights (for this guide, localadmin).
  • Virtuální počítač s Linuxem nesmí mít připojenou žádnou doménu AD. Pokud už je součástí domény, musí nejprve tuto doménu opustit, aby se mohl připojit k této doméně.
  • Plně nakonfigurovaný tenant Microsoft Entra s již nastaveným uživatelem domény.

Instalace balíčku samba není nezbytně nutná, ale poskytuje několik užitečných nástrojů a přináší další balíčky automaticky, například samba-common a smbclient. Spusťte následující příkazy a nainstalujte ho. Pokud se během instalace zobrazí výzva k zadání vstupních hodnot, nechte je prázdné.

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

Nástroj wbinfo je součástí sady samba. Může být užitečné pro účely ověřování a ladění, jako je například kontrola, jestli je řadič domény dostupný, kontrola domény, ke které je počítač připojený, a vyhledání informací o uživatelích.

Ujistěte se, že hostitel s Linuxem udržuje čas synchronizovaný s doménovým serverem. Projděte si dokumentaci k distribuci Linuxu. U některých distribucí to můžete provést pomocí systemd-timesyncd. Upravte /etc/systemd/timesyncd.conf pomocí oblíbeného textového editoru následující:

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

Pak restartujte službu:

sudo systemctl restart systemd-timesyncd.service

Povolení ověřování AD Kerberos

Pokud chcete povolit ověřování ad Kerberos, postupujte podle těchto kroků. Tato dokumentace k Samba může být užitečná jako reference.

Ujistěte se, že je doménový server dostupný a zjistitelný.

  1. Ujistěte se, že zadané servery DNS obsahují IP adresy doménového serveru.
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. Pokud příkaz fungoval, přeskočte následující kroky a přejděte k další části.

  2. Pokud to nepomůže, ujistěte se, že IP adresy doménového serveru se testují příkazem ping.

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. Pokud příkaz ping nefunguje, vraťte se k požadovaným požadavkem a ujistěte se, že je váš virtuální počítač ve virtuální síti, která má přístup k tenantovi Microsoft Entra.

  2. Pokud ip adresy provádí příkaz ping, ale servery DNS se nezjistí automaticky, můžete servery DNS přidat ručně. Upravte /etc/netplan/50-cloud-init.yaml ho pomocí oblíbeného textového editoru.

# 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

Pak použijte změny:

sudo netplan --debug apply 
  1. Winbind předpokládá, že server DHCP uchovává záznamy DNS domény aktuální. To ale neplatí pro Azure DHCP. Chcete-li nastavit klienta tak, aby provedl aktualizace DDNS, použijte tuto příručku k vytvoření síťového skriptu. Tady je ukázkový skript, který se nachází na /etc/dhcp/dhclient-exit-hooks.d/ddns-updateadrese .
#!/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 

Připojení do služby Microsoft Entra Domain Services a ujistěte se, že jsou služby zjistitelné.

  1. Ujistěte se, že můžete otestovat příkaz ping na server domény podle názvu domény.
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. Ujistěte se, že v síti můžete zjistit služby Microsoft Entra.
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. 

Nastavení názvu hostitele a plně kvalifikovaného názvu domény (FQDN)

  1. Pomocí textového editoru /etc/hosts aktualizujte soubor s konečným plně kvalifikovaným názvem domény (po připojení k doméně) a aliasem hostitele. NA IP adrese teď nezáleží, protože tento řádek se bude používat hlavně k překladu krátkých názvů hostitelů do plně kvalifikovaného názvu domény. Další podrobnosti najdete v tématu Nastavení Samba jako člena domény.
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. Teď by se měl přeložit název hostitele. IP adresu, na kterou se teď překládá, můžete ignorovat. Krátký název hostitele by se měl přeložit na plně kvalifikovaný název domény.
getent hosts contosovm
127.0.0.1       contosovm.contosodomain.contoso.com contosovm
dnsdomainname
contosodomain.contoso.com
hostname -f
contosovm.contosodomain.contoso.com 

Poznámka:

Některá distribuce vyžadují, abyste spustili hostnamectl příkaz, aby se název hostitele -f aktualizoval:

hostnamectl set-hostname contosovm.contosodomain.contoso.com

Nastavení krb5.conf

  1. Nakonfigurujte /etc/krb5.conf tak, aby bylo možné kontaktovat distribuční centrum klíčů Kerberos (KDC) s doménovým serverem k ověření. Další informace najdete v dokumentaci k protokolu KERBEROS MIT. Tady je ukázkový /etc/krb5.conf soubor.
[libdefaults]
        default_realm = CONTOSODOMAIN.CONTOSO.COM
        dns_lookup_realm = false
        dns_lookup_kdc = true

Nastavení souboru smb.conf

  1. Určete cestu k smb.conf.
sudo smbd -b | grep "CONFIGFILE"
   CONFIGFILE: /etc/samba/smb.conf
  1. Změňte konfiguraci protokolu SMB tak, aby fungovala jako člen domény. Další informace naleznete v tématu Nastavení samba jako člen domény. Tady je ukázkový smb.conf soubor.

Poznámka:

Tento příklad je určený pro službu Microsoft Entra Domain Services, pro kterou doporučujeme nastavit backend = rid při konfiguraci mapy idmap. Místní uživatelé služby AD DS můžou raději zvolit jiný back-end mapy ID.

[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. Vynuťte, aby winbind znovu načítá změněný konfigurační soubor.
sudo smbcontrol all reload-config

Připojení k doméně

  1. net ads join Pomocí příkazu připojte hostitele k doméně služby Microsoft Entra Domain Services. Pokud příkaz vyvolá chybu, vyřešte problém v části Řešení potíží se členy domény samba.
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. Ujistěte se, že pro tohoto hostitele na serveru domény existuje záznam DNS.
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

Pokud se uživatelé budou aktivně přihlašovat k klientským počítačům nebo virtuálním počítačům a přistupovat ke sdíleným složkám Azure, musíte nastavit soubor nsswitch.conf a nakonfigurovat PAM pro winbind. Pokud bude přístup omezený na aplikace reprezentované uživatelským účtem nebo účtem počítače, které potřebují ověřování kerberos pro přístup ke sdílené složce, můžete tyto kroky přeskočit.

Nastavení souboru nsswitch.conf

  1. Teď, když je hostitel připojený k doméně, musíte umístit knihovny winbind na místa, kde hledat uživatele a skupiny. Provedete to aktualizací hesel a skupinových položek v nsswitch.confsouboru . Pomocí textového editoru můžete upravit /etc/nsswitch.conf a přidat následující položky:
passwd:         compat systemd winbind
group:          compat systemd winbind
  1. Povolte službu winbind, aby se automaticky spustila při restartování.
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. Potom službu restartujte.
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. Ujistěte se, že jsou zjištěni uživatelé a skupiny domény.
getent passwd contososmbadmin
contososmbadmin:*:12604:10513::/home/contososmbadmin:/bin/bash
getent group 'domain users'
domain users:x:10513: 

Pokud výše uvedené informace nefungují, pomocí nástroje wbinfo zkontrolujte, jestli je řadič domény dostupný:

wbinfo --ping-dc

Konfigurace PAM pro winbind

  1. Musíte umístit winbind do ověřovacího zásobníku, aby se uživatelé domény ověřili prostřednictvím winbind pomocí konfigurace PAM (Pluggable Authentication Module) pro winbind. Druhý příkaz zajistí, že se homedir vytvoří pro uživatele domény při prvním přihlášení k tomuto systému.
sudo pam-auth-update --enable winbind
sudo pam-auth-update --enable mkhomedir 
  1. Ujistěte se, že konfigurace ověřování PAM obsahuje následující argumenty:/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. Teď byste měli být schopni se k tomuto systému přihlásit jako uživatel domény, a to buď přes ssh, su, nebo jakýkoli jiný způsob ověřování.
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) 

Ověření konfigurace

Pokud chcete ověřit, že je klientský počítač připojený k doméně, vyhledejte plně kvalifikovaný název domény klienta na řadiči domény a najděte položku DNS uvedenou pro tohoto konkrétního klienta. V mnoha případech je stejný jako název domény, <dnsserver> ke kterému je klient připojený.

nslookup <clientname> <dnsserver>

Potom pomocí klist příkazu zobrazte lístky v mezipaměti Kerberos. Měla by existovat položka začínající krbtgt na tom, že vypadá nějak takto:

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

Pokud jste nenakonfigurovali PAM pro winbind, klist nemusí se zobrazit položka lístku. V takovém případě můžete uživatele ověřit ručně, abyste získali lístky:

wbinfo -K contososmbadmin

Příkaz můžete spustit také jako součást skriptu:

wbinfo -K 'contososmbadmin%SUPERSECRETPASSWORD'

Připojení sdílené složky

Po povolení ověřování protokolu Kerberos a připojení k doméně virtuálního počítače s Linuxem (nebo ID Microsoft Entra ID) můžete sdílenou složku připojit.

Podrobné pokyny k připojení najdete v tématu Připojení sdílené složky Azure na vyžádání.

Pokud chcete povolit zabezpečení protokolu Kerberos, použijte následující další možnost připojení se všemi modely řízení přístupu: sec=krb5

Poznámka:

Tato funkce podporuje pouze model řízení přístupu vynucený serverem pomocí seznamů ACL nt bez bitů režimu. Linuxové nástroje, které aktualizují seznamy ACL NT, jsou minimální, proto aktualizujte seznamy ACL prostřednictvím Windows. Modely řízení přístupu vynucované klientem (modefromsid,idsfromsid) a modely řízenícifsacl přístupu přeložené klientem se v současné době nepodporují.

Další možnosti připojení

Jednouživatel versus připojení více uživatelů

V případě použití připojení s jedním uživatelem je přípojný bod přístupný jedním uživatelem domény AD a nesdílí se s ostatními uživateli domény. Každý přístup k souborům probíhá v kontextu uživatele, jehož přihlašovací údaje krb5 byly použity k připojení sdílené složky. Každý uživatel v místním systému, který přistupuje k přípojovému bodu, zosobní tohoto uživatele.

V případě použití připojení s více uživateli je stále jeden přípojný bod, ale ke stejnému přípojovému bodu má přístup více uživatelů AD. Ve scénářích, kdy ke stejné sdílené složce přistupuje více uživatelů ve stejném klientovi a systém je nakonfigurovaný pro Kerberos a připojený sec=krb5, zvažte použití multiuser možnosti připojení.

Oprávnění k souborům

Na oprávněních k souborům záleží, zejména pokud budou mít klienti Linuxu a Windows přístup ke sdílené složce. Pokud chcete u souborů převést oprávnění k souborům na seznamy DAC, použijte výchozí možnost připojení, například file_mode=<>,dir_mode=<>. Oprávnění k souborům zadaná jako file_mode a dir_mode se vynucují pouze v rámci klienta. Server vynucuje řízení přístupu na základě popisovače zabezpečení souboru nebo adresáře.

Vlastnictví souboru

Vlastnictví souborů záleží, zejména pokud budou mít klienti Linuxu i Windows přístup ke sdílené složce. Zvolte jednu z následujících možností připojení pro převod vlastnictví souboru UID/GID na siD vlastníka/skupiny v seznamu DACL souboru:

  • Použít výchozí nastavení, například uid=<>,gid=<>
  • Konfigurace mapování UID/GID prostřednictvím RFC2307 a služby Active Directory (nss_winbind nebo nss_sssd)

Koherence mezipaměti atributů souboru

Výkon je důležitý, i když atributy souborů nejsou vždy přesné. Výchozí hodnota actimeo je 1 (sekunda), což znamená, že atributy souboru se znovu načítají ze serveru, pokud jsou atributy uložené v mezipaměti větší než 1 sekunda staré. Zvýšení hodnoty na 60 znamená, že atributy se ukládají do mezipaměti nejméně 1 minutu. Pro většinu případů použití doporučujeme pro tuto možnost použít hodnotu 30 (actimeo=30).

U novějších jader zvažte podrobnější nastavení funkcí actimeo . Pro ukládání položek adresáře do mezipaměti a acregmax můžete použít acdirmax pro ukládání metadat souborů do mezipaměti, například acdirmax=60,acregmax=5.

Další krok

Další informace o připojení sdílené složky SMB v Linuxu najdete tady: