Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Область применения: ✔️ общие папки SMB
Дополнительные сведения о поддерживаемых параметрах и рекомендациях см. в разделе Обзор параметров проверки подлинности Azure Files на основе удостоверений для доступа SMB.
Azure Files поддерживает проверку подлинности на основе удостоверений через блок сообщений сервера (SMB) для виртуальных машин Linux с помощью протокола проверки подлинности Kerberos с помощью следующих методов:
- Локальные Windows Active Directory Domain Services (AD DS)
- доменные службы Microsoft Entra
Чтобы использовать AD DS, необходимо синхронизировать AD DS с Microsoft Entra ID с помощью Microsoft Entra Connect Sync.
Примечание.
В этой статье используется Ubuntu для примера шагов. Аналогичные конфигурации работают для клиентов RHEL и SLES, которые позволяют монтировать общие файловые хранилища Azure, используя Active Directory.
Ограничения клиента SMB для Linux
Невозможно использовать проверку подлинности на основе удостоверений для подключения общих папок Azure на клиентах Linux во время загрузки с помощью записей fstab. Это связано с тем, что клиент не может получить билет Kerberos достаточно рано, чтобы подключиться во время загрузки. Можно использовать fstab запись и указать noauto параметр, чтобы пользователь мог подключить общую папку после входа с помощью простой команды подключения без всех параметров. Вы также можете использовать autofs, чтобы подключить общую папку в момент доступа.
Предварительные условия
Прежде чем включить проверку подлинности Active Directory через SMB для общих папок Azure, убедитесь, что выполнены следующие предварительные требования.
- Виртуальная машина Linux под управлением Ubuntu 18.04+, или эквивалентная виртуальная машина RHEL или SLES. При запуске на Azure виртуальная машина должна иметь как минимум один сетевой интерфейс в виртуальной сети, содержащей Microsoft Entra Domain Services. При использовании локальной виртуальной машины ad DS необходимо синхронизировать с Microsoft Entra ID.
- Учетные данные root или доступ пользователя к учетной записи локального пользователя с полными правами 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, чтобы включить в него следующее. Замените ntp.server одинаковым именем узла сервера NTP или IP-адресом, который использует сервер домена.
[Time]
NTP=ntp.server
FallbackNTP=ntp.ubuntu.com
Затем перезапустите службу:
sudo systemctl restart systemd-timesyncd.service
Включение проверки подлинности AD Kerberos
Выполните следующие действия, чтобы включить проверку подлинности AD Kerberos с помощью локальных служб AD DS или Microsoft Entra Domain Services. Эта документация по Samba может быть полезной в качестве ссылки.
Убедитесь, что доменный сервер доступен и доступен для обнаружения
В следующем разделе предполагается, что у вас есть локальные доменные службы AD DS. Если вы используете Microsoft Entra Domain Services, пропустите этот раздел и перейдите к Подключению к Entra Domain Services и убедитесь, что службы могут быть обнаружены.
Убедитесь, что DNS-серверы, которые вы вводите, содержат IP-адреса сервера домена.
systemd-resolve --statusGlobal 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Если команда работает, пропустите следующие шаги и перейдите к следующему разделу.
Если команда не работает, убедитесь, что вы можете отправить ping на адреса сервера домена.
ping 10.0.2.5PING 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Если пинг не работает, вернитесь к предварительным требованиям и убедитесь, что ваша виртуальная машина входит в виртуальную сеть, которая имеет доступ к арендатору Entra.
Если IP-адреса отвечают на ping, но 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 applyWinbind предполагает, что DHCP-сервер сохраняет записи DNS домена в актуальном состоянии. Однако это предположение не верно для Azure DHCP. Чтобы настроить клиент для обновления 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 и убедитесь, что службы доступны для обнаружения.
Если вы используете AD DS, а не Microsoft Entra Domain Services, можно пропустить этот раздел и перейти к настройке имени узла и полного доменного имени.
Убедитесь, что вы можете проверить связь с доменным сервером по имени домена.
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
Убедитесь, что вы можете обнаружить службы 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.
Настройка имени узла и полностью квалифицированного доменного имени (FQDN)
С помощью текстового редактора обновите /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 "ubuntuvm.contosodomain.contoso.com UbuntuVM"
Теперь имя узла должно разрешаться. Вы можете пока проигнорировать IP-адрес, к которому он разрешается. Короткое имя хоста должно разрешаться в FQDN.
getent hosts contosovm
127.0.0.1 contosovm.contosodomain.contoso.com contosovm
dnsdomainname
contosodomain.contoso.com
hostname -f
contosovm.contosodomain.contoso.com
Примечание.
Для того чтобы hostnamectl обновлялся на некоторых дистрибутивах Linux, необходимо выполнить команду hostname -f:
hostnamectl set-hostname contosovm.contosodomain.contoso.com
Настройка krb5.conf
Настройте /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
Определите путь к smb.conf.
sudo smbd -b | grep "CONFIGFILE"
CONFIGFILE: /etc/samba/smb.conf
Измените конфигурацию SMB, чтобы она действовала в качестве члена домена. Дополнительные сведения см. в разделе "Настройка samba в качестве члена домена". Ниже приведен пример smb.conf файла.
Примечание.
Этот пример предназначен для доменных служб Microsoft Entra, для которых при настройке idmap рекомендуется использование backend = rid. Локальные пользователи AD DS могут предпочесть выбрать другой бэкенд для idmap.
[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
Вызвать принудительную перезагрузку измененного файла конфигурации.
sudo smbcontrol all reload-config
Присоединение к домену.
net ads join Используйте команду для присоединения узла к домену. Если команда возвращает ошибку, см. раздел "Устранение неполадок членов домена 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'
Убедитесь, что запись 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
Настройка nsswitch.conf
Если вы планируете пользователям активно войти на клиентские компьютеры и получить доступ к общим папкам Azure, необходимо настроить nsswitch.conf. Если запланированный доступ ограничен приложениями, представленными учетной записью пользователя или учетной записью компьютера, требующей проверки подлинности Kerberos для доступа к общей папке, можно пропустить этот шаг.
После присоединения узла к домену добавьте библиотеки winbind в пути поиска пользователей и групп. Используйте текстовый редактор для редактирования /etc/nsswitch.conf и добавления следующих записей:
passwd: compat systemd winbind
group: compat systemd winbind
Включите службу 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
Перезапустите службу.
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
Убедитесь, что пользователи и группы домена обнаружены.
getent passwd contososmbadmin
contososmbadmin:*:12604:10513::/home/contososmbadmin:/bin/bash
getent group 'domain users'
domain users:x:10513:
Если предыдущие шаги не работают, проверьте, доступен ли контроллер домена с помощью wbinfo средства:
wbinfo --ping-dc
Настройка PAM для winbind
Если вы планируете, чтобы пользователи активно входить на клиентские компьютеры и получать доступ к общим папкам Azure, необходимо настроить PAM для winbind. Если запланированный доступ ограничен приложениями, представленными учетной записью пользователя или учетной записью компьютера, требующей проверки подлинности Kerberos для доступа к общей папке, можно пропустить этот шаг.
Поместите winbind в стек проверки подлинности, чтобы пользователи домена прошли проверку подлинности через winbind, настроив PAM (подключаемый модуль проверки подлинности) для winbind. Вторая команда гарантирует, что система создает домашний каталог для пользователя домена при первом входе.
sudo pam-auth-update --enable winbind
sudo pam-auth-update --enable mkhomedir
Убедитесь, что в конфигурации проверки подлинности 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
Теперь вы можете войти в эту систему в качестве пользователя домена с помощью 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 вы можете подключить общую папку.
Используйте следующий параметр подключения со всеми моделями управления доступом, чтобы включить безопасность Kerberos: sec=krb5 При использовании sec=krb5не укажите имя пользователя и пароль. Рассмотрим пример.
sudo mount -t cifs $SMB_PATH $MNT_PATH -o sec=krb5,cruid=$UID,serverino,nosharesock,actimeo=30,mfsymlinks
Примечание.
Эта функция поддерживает только серверную модель управления доступом, которая использует NT ACL без битов режима. Средств Linux для обновления списков управления доступом NT мало, поэтому обновление проводите через Windows. В настоящее время не поддерживаются модели управления доступом, управляемые клиентом (modefromsid,idsfromsid), и модели управления доступом, преобразованные клиентом (cifsacl).
Другие параметры монтирования
Монопользовательское подключение и подключение для нескольких пользователей
В случае использования подключения с одним пользователем один пользователь в домене AD обращается к точке подключения и не предоставляет общий доступ другим пользователям в домене. Каждый доступ к файлам происходит в контексте пользователя, учетные данные krb5 которого используются для подключения общей папки. Любой пользователь локальной системы, обращающийся к точке монтирования, выступает от имени этого пользователя.
В случае использования с несколькими пользователями по-прежнему существует одна точка подключения, но несколько пользователей AD могут получить доступ к той же точке подключения. В сценариях, когда несколько пользователей на одном клиенте обращаются к одной и той же общей папке и система настроена для Kerberos и подключена с параметром sec=krb5, рассмотрите возможность использования параметра multiuser для подключения.
Разрешения для файла
Разрешения файлов имеют значение, особенно если клиенты Linux и Windows получают доступ к общей папке. Чтобы преобразовать разрешения файлов в DACL на файлах, используйте параметр подключения по умолчанию, например file_mode=<>,dir_mode=<>. Клиент применяет только разрешения файлов, указанные как file_mode и dir_mode. Сервер применяет управление доступом на основе дескриптора безопасности файла или каталога.
Владение файлом
Владение файлами имеет значение, особенно если клиенты Linux и Windows получают доступ к общей папке. Выберите один из следующих параметров монтирования, чтобы преобразовать UID/GID владения файла в SID владельца/группы на DACL файла.
- Используйте значение по умолчанию, например uid=<>,gid=<>
- Настройте сопоставление UID/GID с помощью RFC2307 и Active Directory (nss_winbind или nss_sssd)
Согласованность кэша атрибутов файлов
Производительность важна, даже если атрибуты файла не всегда точны. Значение по умолчанию для actimeo равно 1 (секунда), что означает, что атрибуты файла запрашиваются снова с сервера, если кэшированные атрибуты старше 1 секунды. Увеличение значения до 60 означает, что атрибуты кэшируются не менее одной минуты. Для большинства вариантов использования используйте значение 30 для этого параметра (actimeo=30).
Для новых ядер рассмотрите возможность более детальной настройки функций actimeo . Вы можете использовать acdirmax для кэширования переоценки записей каталога и acregmax для кэширования метаданных файла, например, acdirmax=60,acregmax=5.
Следующий шаг
Чтобы узнать, как подключить общую папку SMB в Linux, см.: