Compartir vía


Habilitar la autenticación de Active Directory sobre SMB para clientes Linux que acceden a Azure Files

Para más información sobre las opciones y consideraciones admitidas, consulte Información general sobre opciones de autenticación basada en identidades de Azure Files para el acceso SMB.

Azure Files admite la autenticación basada en identidades a través del Bloque de mensajes del servidor (SMB) para máquinas virtuales (VMs) Linux con el protocolo de autenticación Kerberos mediante los métodos siguientes:

  • Windows Active Directory Domain Services (AD DS) local
  • Servicios de dominio de Microsoft Entra

Para poder usar AD DS, debe sincronizar el AD DS a Microsoft Entra ID mediante Microsoft Entra Connect.

Nota:

En este artículo se usa Ubuntu para los pasos de ejemplo. Las configuraciones similares funcionarán para las máquinas RHEL y SLES, lo que le permite montar recursos compartidos de archivos de Azure mediante Active Directory.

Se aplica a

Tipo de recurso compartido de archivos SMB NFS
Recursos compartidos de archivos Estándar (GPv2), LRS/ZRS Sí, este artículo se aplica a los recursos compartidos de archivos de Azure SMB estándar LRS/ZRS. No, este artículo no se aplica a los recursos compartidos de archivos de Azure NFS.
Recursos compartidos de archivos Estándar (GPv2), GRS/GZRS Sí, este artículo se aplica a los recursos compartidos de archivos de Azure SMB estándar GRS/GZRS. No, este artículo no se aplica a los recursos compartidos de archivos de Azure NFS.
Recursos compartidos de archivos Premium (FileStorage), LRS/ZRS Sí, este artículo se aplica a los recursos compartidos de archivos de Azure SMB premium. No, este artículo no se aplica a los recursos compartidos de archivos premium de Azure NFS.

Limitaciones del cliente SMB de Linux

No puede usar la autenticación basada en identidades para montar recursos compartidos de Azure File en clientes Linux en tiempo de arranque mediante entradas fstab porque el cliente no puede obtener el vale Kerberos lo suficientemente pronto como para montarse en tiempo de arranque. Sin embargo, puede usar una fstab entrada y especificar la opción noauto. Esto no montará el recurso compartido en tiempo de arranque, pero permitirá a un usuario montar convenientemente el recurso compartido de archivos después de iniciar sesión con un comando de montaje simple sin todos los parámetros. También puede usar autofs para montar el recurso compartido tras el acceso.

Prerrequisitos

Antes de habilitar la autenticación de AD sobre SMB para los recursos compartidos de archivos de Azure, asegúrese de que cumple los siguientes requisitos previos.

  • Una máquina virtual Linux que ejecute Ubuntu 18.04+, o una máquina virtual RHEL o SLES equivalente. Si se ejecuta en Azure, la máquina virtual debe tener al menos una interfaz de red en la red virtual que contiene Microsoft Entra Domain Services. Si usa una máquina virtual local, su AD DS debe estar sincronizado con Microsoft Entra ID.
  • Credenciales de usuario raíz o usuario en una cuenta de usuario local que tiene derechos de sudo completos (para esta guía, localadmin).
  • La máquina virtual Linux no debe haber unido ningún dominio de AD. Si ya forma parte de un dominio, primero debe dejar ese dominio para poder unirse a este dominio.
  • Un inquilino de Microsoft Entra totalmente configurado, con el usuario de dominio ya configurado.

La instalación del paquete samba no es estrictamente necesaria, pero proporciona algunas herramientas útiles y trae otros paquetes automáticamente, como samba-common y smbclient. Ejecute los siguientes comandos para instalarlo. Si se le pide algún valor de entrada durante la instalación, déjelos en blanco.

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

La herramienta wbinfo forma parte del conjunto samba. Puede ser útil para fines de autenticación y depuración, como comprobar si se puede acceder al controlador de dominio, comprobar a qué dominio está unido una máquina y buscar información sobre los usuarios.

Asegúrese de que el host de Linux mantiene el tiempo sincronizado con el servidor de dominio. Consulte la documentación de la distribución de Linux. Para algunas distribuciones, puede hacerlo mediante systemd-timesyncd. Edite /etc/systemd/timesyncd.conf con su editor de texto favorito para incluir lo siguiente:

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

A continuación, reinicie el servicio:

sudo systemctl restart systemd-timesyncd.service

Habilitar la autenticación Kerberos de AD

Siga estos pasos para habilitar la autenticación Kerberos de AD. Esta documentación de Samba puede resultar útil como referencia.

Asegúrese de que el servidor de dominio sea accesible y detectable

  1. Asegúrese de que los servidores DNS proporcionados contienen las direcciones IP del servidor de dominio.
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. Si el comando funcionó, omita los pasos siguientes y continúe con la sección siguiente.

  2. Si no funciona, asegúrese de que las direcciones IP del servidor de dominio están haciendo 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. Si el ping no funciona, vuelva a los requisitos previos y asegúrese de que la máquina virtual está en una red virtual que tiene acceso al inquilino de Microsoft Entra.

  2. Si las direcciones IP están haciendo ping pero los servidores DNS no se detectan automáticamente, puede agregar los servidores DNS manualmente. Edite /etc/netplan/50-cloud-init.yaml en el editor de texto que prefiera.

# 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

A continuación, aplique los cambios:

sudo netplan --debug apply 
  1. Winbind supone que el servidor DHCP mantiene actualizados los registros DNS del dominio. Sin embargo, esto no es cierto para DHCP de Azure. Para configurar el cliente para realizar actualizaciones de DDNS, use esta guía para crear un script de red. Este es un script de ejemplo que reside en /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 

Conectarse a Microsoft Entra Domain Services y asegúrese de que los servicios se pueden detectar

  1. Asegúrese de que puede hacer ping al servidor de dominio por el nombre de dominio.
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. Asegúrese de que puede detectar los servicios de Microsoft Entra en la red.
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. 

Configurar el nombre de host y el nombre de dominio completo (FQDN)

  1. Con el editor de texto, actualice el /etc/hosts archivo con el FQDN final (después de unir el dominio) y el alias del host. La dirección IP no importa por ahora, ya que esta línea se usará principalmente para traducir el nombre de host corto a FQDN. Para obtener más información, consulte Configuración de Samba como miembro de dominio.
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. Ahora, el nombre de host debe resolverse. Puede omitir la dirección IP a la que resuelve por ahora. El nombre de host corto debe resolverse en el FQDN.
getent hosts contosovm
127.0.0.1       contosovm.contosodomain.contoso.com contosovm
dnsdomainname
contosodomain.contoso.com
hostname -f
contosovm.contosodomain.contoso.com 

Nota

Algunas distribuciones requieren que ejecute el hostnamectl comando para que se actualice el nombre de host -f:

hostnamectl set-hostname contosovm.contosodomain.contoso.com

Configuración de krb5.conf

  1. Configure /etc/krb5.conf para que el centro de distribución de claves (KDC) de Kerberos con el servidor de dominio pueda ser contactado para la autenticación. Para obtener más información, consulte Documentación de Kerberos MIT. Aquí tiene un archivo /etc/krb5.conf de muestra.
[libdefaults]
        default_realm = CONTOSODOMAIN.CONTOSO.COM
        dns_lookup_realm = false
        dns_lookup_kdc = true

Configuración de smb.conf

  1. Identifique la ruta de acceso a smb.conf.
sudo smbd -b | grep "CONFIGFILE"
   CONFIGFILE: /etc/samba/smb.conf
  1. Cambie la configuración de SMB para que actúe como miembro de dominio. Para obtener más información, consulte Configuración de Samba como miembro de dominio. Aquí tiene un archivo smb.conf de muestra.

Nota:

Este ejemplo es para Microsoft Entra Domain Services, para el que se recomienda establecer backend = rid al configurar idmap. Es posible que los usuarios de AD DS locales prefieran elegir un back-end idmap diferente.

[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. Forzar winbind para volver a cargar el archivo de configuración cambiado.
sudo smbcontrol all reload-config

Unir al dominio

  1. Use el comando net ads join para unir el host al dominio de Microsoft Entra Domain Services. Si el comando produce un error, consulte Solución de problemas de miembros del dominio samba para resolver el problema.
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. Asegúrese de que el registro DNS existe para este host en el servidor de dominio.
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

Si los usuarios inician sesión activamente en máquinas cliente o máquinas virtuales y acceden a los recursos compartidos de archivos de Azure, debe configurar nsswitch.conf y configurar PAM para winbind. Si el acceso se limitará a las aplicaciones representadas por una cuenta de usuario o una cuenta de equipo que necesiten autenticación Kerberos para acceder al recurso compartido de archivos, puede omitir estos pasos.

Configuración de nsswitch.conf

  1. Ahora que el host está unido al dominio, debe colocar bibliotecas winbind en los lugares para buscar al buscar usuarios y grupos. Para ello, actualice las entradas de grupo y passwd en nsswitch.conf. Use el editor de texto para editar /etc/nsswitch.conf y agregar las siguientes entradas:
passwd:         compat systemd winbind
group:          compat systemd winbind
  1. Habilite el servicio winbind para que se inicie automáticamente al reiniciarse.
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. A continuación, reinicie el servicio.
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. Asegúrese de que se detectan los usuarios y grupos del dominio.
getent passwd contososmbadmin
contososmbadmin:*:12604:10513::/home/contososmbadmin:/bin/bash
getent group 'domain users'
domain users:x:10513: 

Si lo anterior no funciona, compruebe si el controlador de dominio es accesible mediante la herramienta wbinfo:

wbinfo --ping-dc

Configuración de PAM para winbind

  1. Debe colocar winbind en la pila de autenticación para que los usuarios del dominio se autentiquen a través de winbind mediante la configuración de PAM (módulo de autenticación conectable) para winbind. El segundo comando garantiza que el homedir se crea para un usuario de dominio al iniciar sesión en este sistema.
sudo pam-auth-update --enable winbind
sudo pam-auth-update --enable mkhomedir 
  1. Asegúrese de que la configuración de autenticación de PAM tenga los argumentos siguientes en /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. Ahora debería poder iniciar sesión en este sistema como usuario del dominio, ya sea a través de ssh, su o cualquier otro medio de autenticació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) 

Comprobación de la configuración

Para comprobar que la máquina cliente está unida al dominio, busque el FQDN del cliente en el controlador de dominio y busque la entrada DNS indicada para este cliente determinado. En muchos casos, <dnsserver> es el mismo que el nombre de dominio al que está unido el cliente.

nslookup <clientname> <dnsserver>

A continuación, use el comando klist para ver los vales en la memoria caché de Kerberos. Debe haber una entrada que comience con krbtgt y tenga un aspecto similar al siguiente:

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

Si no configuró PAM para winbind, klist es posible que no muestre la entrada del vale. En este caso, puede autenticar manualmente al usuario para obtener los vales:

wbinfo -K contososmbadmin

También puede ejecutar el comando como parte de un script:

wbinfo -K 'contososmbadmin%SUPERSECRETPASSWORD'

Montaje del recurso compartido de archivos

Después de habilitar la autenticación Kerberos de AD (o Microsoft Entra ID) y la máquina virtual Linux unida a un dominio, puede montar el recurso compartido de archivos.

Para obtener instrucciones de montaje detalladas, consulte Montaje del recurso compartido de archivos de Azure a petición con montaje.

Use la siguiente opción de montaje adicional con todos los modelos de control de acceso para habilitar la seguridad de Kerberos: sec=krb5. El nombre de usuario y la contraseña deben omitirse cuando sec=krb5 está en uso.

Nota:

Esta característica solo admite un modelo de control de acceso aplicado por el servidor mediante las ACL de NT sin bits de modo. Las herramientas de Linux que actualizan las ACL de NT son mínimas, así que actualice las ACL a través de Windows. Los modelos de control de acceso aplicados por el cliente (modefromsid,idsfromsid) y el control de acceso traducido por el cliente (cifsacl) no se admiten actualmente.

Otras opciones de montaje

Montaje de usuario único frente a multiusuario

En un caso de uso de montaje de usuario único, un único usuario del dominio de AD accede al punto de montaje y no se comparte con otros usuarios del dominio. Cada acceso a archivos se produce en el contexto del usuario cuyas credenciales krb5 se usaron para montar el recurso compartido de archivos. Cualquier usuario del sistema local que acceda al punto de montaje suplantará a ese usuario.

En un caso de uso de montaje multiusuario, todavía hay un único punto de montaje, pero varios usuarios de AD pueden acceder a ese mismo punto de montaje. En escenarios en los que varios usuarios del mismo cliente tendrán acceso al mismo recurso compartido y el sistema está configurado para Kerberos y montado con sec=krb5, considere la posibilidad de usar la opción de montaje multiuser.

Permisos de archivo

Los permisos de archivo son importantes, especialmente si los clientes de Linux y Windows tendrán acceso al recurso compartido de archivos. Para convertir permisos de archivo a DACL en archivos, use una opción de montaje predeterminada, como file_mode=<>,dir_mode=<>. Los permisos de archivo especificados como file_mode y dir_mode solo se aplican dentro del cliente. El servidor aplica el control de acceso en función del descriptor de seguridad del archivo o del directorio.

Propiedad del archivo

La propiedad de los archivos es importante, especialmente si los clientes de Linux y Windows accederán al recurso compartido de archivos. Elija una de las siguientes opciones de montaje para convertir la propiedad del archivo UID/GID al SID de propietario o grupo en la DACL del archivo:

  • Use un valor predeterminado como uid=<>,gid=<>
  • Configuración de la asignación de UID/GID a través de RFC2307 y Active Directory (nss_winbind o nss_sssd)

Coherencia de caché de atributos de archivo

El rendimiento es importante, incluso si los atributos de archivo no siempre son precisos. El valor predeterminado de actimeo es 1 (segundo), lo que significa que los atributos de archivo se recuperan de nuevo desde el servidor si los atributos almacenados en caché tienen más de 1 segundo de antigüedad. Aumentar el valor a 60 significa que los atributos se almacenan en caché durante al menos 1 minuto. Para la mayoría de los casos de uso, se recomienda usar un valor de 30 para esta opción (actimeo=30).

Para los kernels más recientes, considere la posibilidad de establecer las características de actimeo de forma más detallada. Puede usar acdirmax para el almacenamiento en caché de revalidación de entrada de directorio y acregmax para almacenar en caché los metadatos del archivo, por ejemplo acdirmax=60,acregmax=5.

Paso siguiente

Para más información sobre cómo montar un recurso compartido de archivos SMB en Linux, consulte: