Поделиться через


Включение проверки подлинности Active Directory через SMB для клиентов Linux, обращаюющихся к Файлы Azure

Дополнительные сведения о поддерживаемых параметрах и рекомендациях см. в разделе "Общие сведения о Файлы Azure параметрах проверки подлинности на основе удостоверений" для доступа SMB.

Файлы Azure поддерживает проверку подлинности на основе удостоверений через блок сообщений сервера (SMB) для виртуальных машин Linux с помощью протокола проверки подлинности Kerberos с помощью следующих методов:

  • Локальные службы Windows домен Active Directory (AD DS)
  • Доменные службы Microsoft Entra

Чтобы использовать AD DS, необходимо синхронизировать AD DS с идентификатором Microsoft Entra Id с помощью Microsoft Entra Connect.

Примечание.

В этой статье используется Ubuntu для примера шагов. Аналогичные конфигурации будут работать для компьютеров RHEL и SLES, что позволяет подключать общие папки Azure с помощью Active Directory.

Применяется к

Тип общей папки SMB NFS
Стандартные общие папки (GPv2), LRS/ZRS Да, эта статья относится к стандартным общим папкам SMB Azure LRS/ZRS. Нет, эта статья не относится к общим папкам Azure NFS.
Стандартные общие папки (GPv2), GRS/GZRS Да, эта статья относится к стандартным общим папкам SMB Azure GRS/GZRS. Эта статья не применяется к общим папкам Azure NFS.
Общие папки уровня "Премиум" (FileStorage), LRS/ZRS Да, эта статья относится к общим папкам Azure SMB уровня Нет, эта статья не относится к общим папкам Azure уровня

Ограничения клиента SMB для Linux

Невозможно использовать проверку подлинности на основе удостоверений для подключения общих папок Azure на клиентах Linux во время загрузки с помощью fstab записей, так как клиент не может получить билет Kerberos достаточно рано, чтобы подключиться во время загрузки. Однако можно использовать fstab запись и указать noauto этот параметр. Это не будет подключать общую папку во время загрузки, но это позволит пользователю удобно подключить общую папку после входа с помощью простой команды подключения без всех параметров. Вы также можете подключить autofs общую папку при доступе.

Необходимые компоненты

Прежде чем включить проверку подлинности AD через SMB для общих папок Azure, убедитесь, что выполнены следующие предварительные требования.

  • Виртуальная машина Linux под управлением Ubuntu 18.04+, или эквивалентная виртуальная машина RHEL или SLES. При запуске в Azure виртуальная машина должна иметь по крайней мере один сетевой интерфейс в виртуальной сети, содержащей доменные службы Microsoft Entra. При использовании локальной виртуальной машины ad DS необходимо синхронизировать с идентификатором Microsoft Entra.
  • Учетные данные корневого пользователя или пользователя для учетной записи локального пользователя с полными правами sudo (для этого руководства— localadmin).
  • Виртуальная машина Linux не должна присоединиться к домену AD. Если он уже является частью домена, он должен сначала оставить этот домен, прежде чем он сможет присоединиться к этому домену.
  • Клиент Microsoft Entra полностью настроен, с уже настроенным пользователем домена.

Установка пакета samba не является строго необходимой, но предоставляет некоторые полезные инструменты и автоматически предоставляет другие пакеты, например samba-common и smbclient. Выполните следующие команды, чтобы установить его. Если вы запрашиваете входные значения во время установки, оставьте их пустыми.

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

Инструмент wbinfo входит в набор samba. Это может быть полезно для проверки подлинности и отладки, таких как проверка доступности контроллера домена, проверка того, к какой домену присоединен компьютер, и поиск сведений о пользователях.

Убедитесь, что узел Linux синхронизирует время с доменным сервером. Ознакомьтесь с документацией по дистрибутиву Linux. Для некоторых дистрибутивов это можно сделать с помощью systemd-timesyncd. Измените /etc/systemd/timesyncd.conf текст с помощью избранного текстового редактора, чтобы включить следующее:

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

Затем перезапустите службу:

sudo systemctl restart systemd-timesyncd.service

Включение проверки подлинности AD Kerberos

Выполните следующие действия, чтобы включить проверку подлинности AD Kerberos. Эта документация по Samba может быть полезной в качестве ссылки.

Убедитесь, что доменный сервер доступен и доступен для обнаружения

  1. Убедитесь, что DNS-серверы, предоставленные, содержат IP-адреса сервера домена.
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. Если команда работала, пропустите следующие шаги и перейдите к следующему разделу.

  2. Если это не работает, убедитесь, что IP-адреса сервера домена работают.

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. Если связь не работает, вернитесь к предварительным требованиям и убедитесь, что виртуальная машина находится в виртуальной сети с доступом к клиенту Microsoft Entra.

  2. Если IP-адреса pinging, но DNS-серверы не обнаруживаются автоматически, можно добавить DNS-серверы вручную. Изменение /etc/netplan/50-cloud-init.yaml с помощью избранного текстового редактора.

# 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

Затем примените изменения:

sudo netplan --debug apply 
  1. Winbind предполагает, что DHCP-сервер сохраняет записи DNS домена в актуальном состоянии. Однако это не так для DHCP Azure. Чтобы настроить клиент для обновления DDNS, используйте это руководство для создания сетевого скрипта. Ниже приведен пример скрипта, который живет в /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 

Подключитесь к доменным службам Microsoft Entra и убедитесь, что службы доступны для обнаружения

  1. Убедитесь, что вы можете проверить связь с доменным сервером по имени домена.
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. Убедитесь, что вы можете обнаружить службы 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. 

Настройка имени узла и полное доменное имя (полное доменное имя)

  1. С помощью текстового редактора обновите /etc/hosts файл с окончательным полным доменом (после присоединения к домену) и псевдонимом узла. IP-адрес сейчас не имеет значения, так как эта строка будет в основном использоваться для перевода короткого имени узла в полное доменное имя. Дополнительные сведения см. в разделе "Настройка Samba в качестве члена домена".
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. Теперь имя узла должно разрешаться. Вы можете игнорировать IP-адрес, который он разрешает сейчас. Короткое имя узла должно разрешаться в полное доменное имя.
getent hosts contosovm
127.0.0.1       contosovm.contosodomain.contoso.com contosovm
dnsdomainname
contosodomain.contoso.com
hostname -f
contosovm.contosodomain.contoso.com 

Примечание.

Для обновления имени узла -f некоторые дистрибутивы требуют выполнения hostnamectl команды:

hostnamectl set-hostname contosovm.contosodomain.contoso.com

Настройка krb5.conf

  1. Настройте, /etc/krb5.conf чтобы центр распространения ключей Kerberos (KDC) с сервером домена можно связаться с проверкой подлинности. Дополнительные сведения см . в документации по MIT Kerberos. Ниже приведен пример /etc/krb5.conf файла.
[libdefaults]
        default_realm = CONTOSODOMAIN.CONTOSO.COM
        dns_lookup_realm = false
        dns_lookup_kdc = true

Настройка smb.conf

  1. Определите путь к smb.conf.
sudo smbd -b | grep "CONFIGFILE"
   CONFIGFILE: /etc/samba/smb.conf
  1. Измените конфигурацию SMB, чтобы она действовала в качестве члена домена. Дополнительные сведения см. в разделе "Настройка samba в качестве члена домена". Ниже приведен пример smb.conf файла.

Примечание.

Этот пример предназначен для доменных служб Microsoft Entra, для которых рекомендуется задать параметр backend = rid при настройке идентификатора. Локальные пользователи 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 
  1. Принудительно перезагрузить измененный файл конфигурации.
sudo smbcontrol all reload-config

Присоединение к домену.

  1. net ads join Используйте команду, чтобы присоединить узел к домену доменных служб Microsoft Entra. Если команда выдает ошибку, см . статью "Устранение неполадок членов домена 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. Убедитесь, что запись 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

Если пользователи будут активно входить на клиентские компьютеры или виртуальные машины и получать доступ к общим папкам Azure, необходимо настроить nsswitch.conf и настроить PAM для winbind. Если доступ будет ограничен приложениями, представленными учетной записью пользователя или учетной записью компьютера, требующей проверки подлинности Kerberos для доступа к общей папке, можно пропустить эти действия.

Настройка nsswitch.conf

  1. Теперь, когда узел присоединен к домену, необходимо поместить в местах библиотек winbind, чтобы искать пользователей и групп. Для этого обновите входные и групповые nsswitch.confзаписи. Используйте текстовый редактор для редактирования /etc/nsswitch.conf и добавления следующих записей:
passwd:         compat systemd winbind
group:          compat systemd winbind
  1. Включите службу winbind для автоматического запуска при перезагрузке.
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. Затем перезапустите службу.
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. Убедитесь, что пользователи и группы домена обнаружены.
getent passwd contososmbadmin
contososmbadmin:*:12604:10513::/home/contososmbadmin:/bin/bash
getent group 'domain users'
domain users:x:10513: 

Если приведенный выше параметр не работает, проверьте, доступен ли контроллер домена с помощью средства wbinfo:

wbinfo --ping-dc

Настройка PAM для winbind

  1. Необходимо поместить winbind в стек проверки подлинности, чтобы пользователи домена прошли проверку подлинности через winbind, настроив PAM (подключаемый модуль проверки подлинности) для winbind. Вторая команда гарантирует, что homedir создается для пользователя домена при первом входе в эту систему.
sudo pam-auth-update --enable winbind
sudo pam-auth-update --enable mkhomedir 
  1. Убедитесь, что в конфигурации проверки подлинности PAM есть следующие аргументы /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. Теперь вы сможете войти в эту систему в качестве пользователя домена с помощью SSH, su или любого другого средства проверки подлинности.
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) 

Проверка конфигурации

Чтобы убедиться, что клиентский компьютер присоединен к домену, найдите полное доменное имя клиента на контроллере домена и найдите запись DNS, указанную для этого конкретного клиента. Во многих случаях <dnsserver> совпадает с доменным именем, к которому присоединяется клиент.

nslookup <clientname> <dnsserver>

Затем используйте klist команду для просмотра билетов в кэше Kerberos. Должна быть запись, начинающаяся с krbtgt того, что выглядит примерно так:

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

Если вы не настроили PAM для winbind, klist может не отобразить запись билета. В этом случае можно вручную пройти проверку подлинности пользователя, чтобы получить билеты:

wbinfo -K contososmbadmin

Вы также можете выполнить команду в рамках скрипта:

wbinfo -K 'contososmbadmin%SUPERSECRETPASSWORD'

Подключение общей папки

После включения проверки подлинности Kerberos и присоединения к домену виртуальной машины Linux ad (или Идентификатора Microsoft Entra) можно подключить общую папку.

Подробные инструкции по подключению см. в разделе "Подключение общей папки Azure по запросу".

Используйте следующий дополнительный параметр подключения со всеми моделями управления доступом, чтобы включить безопасность Kerberos: sec=krb5 Имя пользователя и пароль должны быть пропущены при использовании sec=krb5.

Примечание.

Эта функция поддерживает только модель управления доступом, применяемую сервером, с помощью списков управления доступом NT без битов режима. Средства Linux, обновляющие списки управления доступом NT, являются минимальными, поэтому обновление списков управления доступом через Windows. В настоящее время не поддерживаются управляемые клиентом модели управления доступом (modefromsid,idsfromsidcifsacl) и преобразованные клиентом модели управления доступом.

Другие параметры подключения

Подключение с одним пользователем и несколькими пользователями

В случае использования подключения с одним пользователем точка подключения осуществляется одним пользователем домена AD и не предоставляется другим пользователям домена AD. Каждый доступ к файлам происходит в контексте пользователя, учетные данные krb5 которых использовались для подключения общей папки. Любой пользователь в локальной системе, обращающийся к точке подключения, будет олицетворить этого пользователя.

В случае использования с несколькими пользователями по-прежнему существует одна точка подключения, но несколько пользователей AD могут получить доступ к той же точке подключения. В сценариях, когда несколько пользователей на одном клиенте получат доступ к одной и той же общей папке, и система настроена для Kerberos и подключена к sec=krb5ней multiuser , рассмотрите возможность подключения.

Разрешения для файла

Разрешения файлов имеют значение, особенно если клиенты Linux и Windows получат доступ к общей папке. Чтобы преобразовать разрешения файлов в файлы, используйте параметр подключения по умолчанию, например file_mode=<>,dir_mode=<>. Разрешения файлов, указанные как file_mode и dir_mode, применяются только в клиенте. Сервер применяет управление доступом на основе дескриптора безопасности файла или каталога.

Владение файлом

Владение файлами имеет значение, особенно если клиенты Linux и Windows получат доступ к общей папке. Выберите один из следующих параметров подключения, чтобы преобразовать uiD/GID в идентификатор владельца или группы в файл DACL:

  • Используйте значение по умолчанию, например uid=<>,gid=<>
  • Настройка сопоставления UID/GID с помощью RFC2307 и Active Directory (nss_winbind или nss_sssd)

Совместное использование кэша атрибутов файлов

Производительность важна, даже если атрибуты файла не всегда точны. Значение по умолчанию для actimeo равно 1 (второе), что означает, что атрибуты файла извлекаются снова с сервера, если кэшированные атрибуты имеют более 1 секунды. Увеличение значения до 60 означает, что атрибуты кэшируются не менее 1 минуты. Для большинства вариантов использования рекомендуется использовать значение 30 для этого параметра (actimeo=30).

Для новых ядер рассмотрите возможность более детальной настройки функций actimeo . Для кэширования метаданных файла acdirmax=60,acregmax можно использовать acdirmax для кэширования метаданных файла, например acdirmax=60,acregmax=5.

Следующий шаг

Дополнительные сведения о подключении общей папки SMB в Linux см. в следующем разделе: