Configurar clientes Linux para Azure Files con AD DS local

Se aplica a: ✔️ recursos compartidos de archivos SMB

Azure Files soporta autenticación basada en identidad sobre Server Message Block (SMB) para máquinas virtuales Linux (VMs) utilizando el protocolo de autenticación Kerberos con Active Directory Domain Services (AD DS) local local. Para utilizar este procedimiento, debes sincronizar tu entorno AD DS con Microsoft Entra ID utilizando Microsoft Entra Connect Sync.

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

Nota:

En este artículo se usa Ubuntu para los pasos de ejemplo. Configuraciones similares funcionan para clientes RHEL y SLES, permitiéndote montar composiciones de archivos en Azure usando AD DS local.

Limitaciones del cliente SMB de Linux

No puedes usar la autenticación basada en identidad para montar recursos compartidos de archivos de Azure en clientes Linux durante el arranque mediante entradas fstab. Esta limitación existe porque el cliente no puede obtener el ticket de Kerberos lo suficientemente pronto para montarlo en el momento de arranque. Puede usar una fstab entrada y especificar la noauto opción para permitir que un usuario monte el recurso compartido de archivos después de iniciar sesión mediante 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 configurar un cliente Linux para usar autenticación AD DS local sobre SMB para compartir archivos en Azure, cumple los siguientes requisitos previos:

  • Una máquina virtual Linux que ejecute Ubuntu 18.04+, o una máquina virtual RHEL o SLES equivalente. La máquina virtual debe tener conectividad de red a tus controladores de dominio AD DS locales y usar servidores DNS que puedan resolver el dominio AD DS.
  • Un entorno AD DS local sincronizado con Microsoft Entra ID mediante Microsoft Entra Connect Sync.
  • Un recurso compartido de archivos de Azure para SMB en una cuenta de almacenamiento configurada para usar la autenticación de AD DS local.
  • 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 de Linux no está ya unida a otro dominio de AD DS. Si es así, abandona ese dominio antes de unir la VM a este dominio.
  • Una cuenta de usuario de dominio AD DS con permiso para unir ordenadores al dominio.

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 wbinfo herramienta forma parte del conjunto de samba y es útil para fines de autenticación y depuración, como comprobar si el controlador de dominio es accesible, comprobar a qué dominio está unido una máquina y buscar información sobre los usuarios.

Asegúrate de que el host de Linux mantenga la hora sincronizada con los controladores de dominio de AD DS. Consulta la documentación de tu distribución Linux. Para algunas distribuciones, puedes hacerlo usando systemd-timesyncd. Edito /etc/systemd/timesyncd.conf para incluir la siguiente configuración. Sustituye ntp.server por el mismo nombre de host o dirección IP del Protocolo de Tiempo de Red (NTP) que utiliza tu entorno AD DS.

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

A continuación, reinicie el servicio:

sudo systemctl restart systemd-timesyncd.service

Activar la autenticación Kerberos de AD DS

Sigue estos pasos para habilitar la autenticación Kerberos con AD DS local. Para más información sobre cómo configurar Samba, véase Configuración de Samba como Miembro de Dominio.

Asegúrate de que los controladores de dominio AD DS sean accesibles y descubribles

  1. Asegúrate de que los servidores DNS configurados puedan resolver tu dominio AD DS y los controladores 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
    
  2. Si los servidores DNS contienen las direcciones IP del controlador de dominio, procede a Configurar nombre de host y FQDN. Si el comando no produce la salida esperada, consulta Solucionar problemas de detección del controlador de dominio AD DS.

Solucionar problemas de detección del controlador de dominio de AD DS

  1. Asegúrate de poder hacer ping a las direcciones IP del controlador de dominio AD DS.

    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
    
  2. Si el ping no funciona, revisa los requisitos previos y asegúrate de que tu máquina virtual tenga conectividad de red con los controladores de dominio de AD DS.

  3. Si las direcciones IP responden a ping pero los servidores DNS no se detectan automáticamente, puede agregar los servidores DNS manualmente. Edite /etc/netplan/50-cloud-init.yaml con su editor de texto favorito.

    # 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 
    
  4. Winbind supone que el servidor DHCP mantiene actualizados los registros DNS del dominio. Sin embargo, esta suposición no es cierta para Azure DHCP. 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 
    

Tras resolver el problema, procede a configurar un nombre de host y un nombre de dominio totalmente cualificado.

Configuración del nombre de host y el nombre de dominio completo (FQDN)

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 porque esta línea se usa principalmente para traducir el nombre de host corto a FQDN. Para obtener más información, vea Configurar 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 "ubuntuvm.contosodomain.contoso.com UbuntuVM" 

Ahora, verifica que tu nombre de host se resuelva correctamente ejecutando los siguientes tres comandos.

Use getent hosts para confirmar que el nombre de host corto se resuelve en el nombre de dominio completo (FQDN) correspondiente. Puedes ignorar la dirección IP que te devuelven.

getent hosts contosovm
127.0.0.1       contosovm.contosodomain.contoso.com contosovm

Úsalo dnsdomainname para confirmar que el nombre de dominio está configurado correctamente.

dnsdomainname
contosodomain.contoso.com

Úsalo hostname -f para confirmar que el FQDN completo está resuelto.

hostname -f
contosovm.contosodomain.contoso.com 

Nota:

Algunas distribuciones de Linux requieren que ejecutes el comando hostnamectl para que se actualice hostname -f:

hostnamectl set-hostname contosovm.contosodomain.contoso.com

Configuración de krb5.conf

Configura /etc/krb5.conf para que el centro de distribución de claves Kerberos (KDC) en un controlador de dominio AD DS pueda ser contactado para la autenticación. Para obtener más información, consulte Documentación de Kerberos MIT. Este es 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

Identifique la ruta de acceso a smb.conf.

sudo smbd -b | grep "CONFIGFILE"
   CONFIGFILE: /etc/samba/smb.conf

Cambia la configuración de la SMB para que actúe como miembro del dominio AD DS. El siguiente ejemplo utiliza el rid backend idmap. Revisa Cómo elegir un backend de idmap y selecciona el backend que cumpla con los requisitos de tu entorno de AD DS.

[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 

Forzar winbind para volver a cargar el archivo de configuración cambiado.

sudo smbcontrol all reload-config

Únete al dominio AD DS

Use el net ads join comando para unir el host al dominio. Si el comando devuelve un error, consulte Solución de problemas de miembros del dominio samba para resolver el problema.

sudo net ads join -U contososmbadmin

Enter contososmbadmin's password:
Using short domain name -- CONTOSODOMAIN
Joined 'CONTOSOVM' to dns domain 'contosodomain.contoso.com' 

Asegúrate de que el registro DNS de este host exista en ADS DNS 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

Configuración de nsswitch.conf

Si planea que los usuarios inicien sesión activamente en máquinas cliente y accedan a los recursos compartidos de archivos de Azure, debe configurar nsswitch.conf. Si el acceso planeado está limitado a las aplicaciones representadas por una cuenta de usuario o una cuenta de equipo que necesitan autenticación Kerberos para acceder al recurso compartido de archivos, puede omitir este paso.

Después de unir el host al dominio, agregue las bibliotecas winbind a las rutas de búsqueda de usuarios y grupos. Use el editor de texto para editar /etc/nsswitch.conf y agregar las siguientes entradas:

passwd:         compat systemd winbind
group:          compat systemd winbind

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

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 

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 los pasos anteriores no funcionan, comprueba si un controlador de dominio de AD DS es accesible usando la wbinfo herramienta:

wbinfo --ping-dc

Configuración de PAM para winbind

Si planea que los usuarios inicien sesión activamente en máquinas cliente y accedan a los recursos compartidos de archivos de Azure, debe configurar PAM para winbind. Si el acceso planeado está limitado a las aplicaciones representadas por una cuenta de usuario o una cuenta de equipo que necesitan autenticación Kerberos para acceder al recurso compartido de archivos, puede omitir este paso.

Coloque 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 sistema crea el directorio principal para un usuario de dominio tras el primer inicio de sesión.

sudo pam-auth-update --enable winbind
sudo pam-auth-update --enable mkhomedir 

Verifica que la configuración de autenticación PAM tenga los argumentos correctos pam_winbind.so 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 

Si el comando no devuelve salida, se vuelve a ejecutar sudo pam-auth-update --enable winbind para asegurarse de que winbind se añade a la pila de autenticación PAM.

Ahora puede 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) 

Verifica la autenticación de AD DS en Linux

Para verificar que la máquina cliente está unida al dominio AD DS, busca el FQDN del cliente usando un servidor DNS AD DS y confirma que la entrada DNS existe para el cliente. En muchos casos, <dnsserver> es el mismo que el nombre de dominio AD DS al que está unido el cliente.

nslookup <clientname> <dnsserver>

A continuación, corre klist para ver los tickets en la caché de Kerberos:

klist

La salida debería incluir una entrada que empiece por krbtgt y que se parezca a:

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

Si no configuraste PAM para winbind, klist podría no mostrar la entrada del ticket. En este caso, puede autenticar manualmente al usuario para obtener los boletos:

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 y unir su máquina virtual Linux a un dominio, puede montar el recurso compartido de archivos.

Utilice la siguiente opción de montaje con todos los modelos de control de acceso para habilitar la seguridad Kerberos: sec=krb5. Omita el nombre de usuario y la contraseña cuando use sec=krb5. Por ejemplo:

sudo mount -t cifs $SMB_PATH $MNT_PATH -o sec=krb5,cruid=$UID,serverino,nosharesock,actimeo=30,mfsymlinks

Nota:

Esta característica solo admite un modelo de control de acceso aplicado por el servidor que usa ACL NT sin bits de modo. Las herramientas de Linux que actualizan las ACL nt son mínimas, por lo que las ACL se actualizan 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.

Opciones adicionales de montaje SMB de Azure Files para Linux

Montaje de usuario único frente a montaje de múltiples usuarios

En un caso de uso de montaje para un solo usuario, un solo usuario en el dominio AD DS accede al punto de montaje y no lo comparte con otros usuarios en el dominio. Cada acceso a un archivo se produce en el contexto del usuario cuyas credenciales krb5 se usan para montar el recurso compartido de archivos. Cualquier usuario del sistema local que acceda al punto de montaje suplanta a ese usuario.

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

Permisos de archivo

Los permisos de archivo son importantes, especialmente si tanto Linux como Windows clientes acceden al recurso compartido de archivos. Para convertir permisos de archivo en DACL en archivos, use una opción de montaje predeterminada, como file_mode=<>,dir_mode=<>. El cliente solo aplica los permisos de archivo especificados como file_mode y dir_mode. 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 acceden al recurso de archivos compartido. Elija una de las siguientes opciones de montaje para convertir el UID/GID del propietario del archivo al SID del propietario/grupo en la DACL del archivo.

  • Use un valor predeterminado como uid=<>,gid=<>
  • Configura el mapeo UID/GID a través de RFC2307 y AD DS usando 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 un minuto. Para la mayoría de los casos de uso, use 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 obtener información sobre cómo montar un recurso compartido de archivos SMB en Linux, consulte: