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 Connect.
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 | ||
Standaardbestandsshares (GPv2), GRS/GZRS | ||
Premium bestandsshares (FileStorage), LRS/ZRS |
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 Linux-VM met Ubuntu 18.04+ of een equivalente RHEL- of SLES-VM. Als deze wordt uitgevoerd in Azure, moet de VM ten minste één netwerkinterface hebben op het VNET met Microsoft Entra Domain Services. Als u een on-premises VM gebruikt, moet uw AD DS worden 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
- 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
Als de opdracht heeft gewerkt, slaat u de volgende stappen over en gaat u verder met de volgende sectie.
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
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.
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
- 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
Maak verbinding met Microsoft Entra Domain Services en zorg ervoor dat de services detecteerbaar zijn
- 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
- 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
- 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"
- 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
- 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
- Identificeer het pad naar
smb.conf
.
sudo smbd -b | grep "CONFIGFILE"
CONFIGFILE: /etc/samba/smb.conf
- 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
- Dwing winbind af om het gewijzigde configuratiebestand opnieuw te laden.
sudo smbcontrol all reload-config
Aan domein toevoegen
- 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'
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
Gebruikersnaam en wachtwoord moeten worden weggelaten wanneer sec=krb5 in gebruik is.
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: