Winbind/IDMapping: различия между версиями

Материал из ALT Linux Wiki
Нет описания правки
 
(не показаны 4 промежуточные версии этого же участника)
Строка 1: Строка 1:
== Описание ==
== Описание ==
Домены Windows различают пользователей и группы по уникальным идентификаторам безопасности (SID). Однако в Linux для каждого пользователя и группы требуются уникальные идентификаторы UID и GID. Служба winbindd отвечает за предоставление информации о пользователях и группах домена.
Домены Windows различают пользователей и группы по уникальным идентификаторам безопасности (SID). Однако в Linux для каждого пользователя и группы требуются уникальные идентификаторы UID и GID. Для сопоставления этих идентификаторов (SID с UID/GID) в Linux можно использовать:
* Winbind
* SSSD


Чтобы служба winbindd могла предоставлять уникальные идентификаторы для пользователей и групп в Linux, необходимо на клиенте домена настроить сопоставление идентификаторов в файле **/etc/samba/smb.conf** для:
==Winbind==
Чтобы служба winbindd могла предоставлять уникальные идентификаторы для пользователей и групп в Linux, необходимо на клиенте домена настроить сопоставление идентификаторов в файле '''/etc/samba/smb.conf''' для:


* Локальная база данных (домен * по умолчанию)
* Локальная база данных (домен * по умолчанию)
Строка 24: Строка 27:
|}
|}


==  Планирование диапазонов идентификаторов Samba ==
===  Планирование диапазонов идентификаторов ===


Независимо от того, хранятся ли UID и GID Linux в Active Directory (если в AD включены расширения схемы RFC2307) или настроена их автоматическая генерация, для каждой конфигурации домена требуется уникальный диапазон идентификаторов. Этот диапазон не должен пересекаться с диапазонами других доменов.
Независимо от того, хранятся ли UID и GID Linux в Active Directory (если в AD включены расширения схемы RFC2307) или настроена их автоматическая генерация, для каждой конфигурации домена требуется уникальный диапазон идентификаторов. Этот диапазон не должен пересекаться с диапазонами других доменов.


{{Note|При пересечении диапазонов идентификаторов, Samba не сможет работать корректно.}}
{{Note|При пересечении диапазонов идентификаторов работа системы не будет корректной.}}


'''Пример непересекающихся диапазонов сопоставления идентификаторов для доменов по умолчанию (*), AD-DOM и TRUST-DOM:'''
'''Пример непересекающихся диапазонов сопоставления идентификаторов для доменов по умолчанию (*), AD-DOM и TRUST-DOM:'''
Строка 53: Строка 56:
# 65535, он же “16-разрядный (uid_t) -1uid_t”. До того, как ядро Linux 2.4 было 16-разрядным, и программы, скомпилированные для этого, следовательно, предполагали, что (uid_t) -1 равно 65535. Таким образом, этот UID непригоден для использования.
# 65535, он же “16-разрядный (uid_t) -1uid_t”. До того, как ядро Linux 2.4 было 16-разрядным, и программы, скомпилированные для этого, следовательно, предполагали, что (uid_t) -1 равно 65535. Таким образом, этот UID непригоден для использования.


== Домен * по умолчанию ==
=== Домен * по умолчанию ===


В доменной среде вы добавляете одну конфигурацию сопоставления идентификаторов для каждого из следующих параметров:
В доменной среде вы добавляете одну конфигурацию сопоставления идентификаторов для каждого из следующих параметров:
Строка 91: Строка 94:
Для получения более подробной информации см. [https://www.altlinux.org/Winbind/IDMapping#Использование_autorid Использование autorid]]
Для получения более подробной информации см. [https://www.altlinux.org/Winbind/IDMapping#Использование_autorid Использование autorid]]


== Использование tdb ==
=== Использование tdb ===


Служба winbindd по умолчанию использует доступный для записи бэкенд tdb для хранения таблиц сопоставления идентификаторов безопасности (SID), UID и GID. Это относится к локальным и встроенным пользователям и группам.
Служба winbindd по умолчанию использует доступный для записи бэкенд tdb для хранения таблиц сопоставления идентификаторов безопасности (SID), UID и GID. Это относится к локальным и встроенным пользователям и группам.
Строка 97: Строка 100:
Используйте этот бэкенд только для домена * по умолчанию.
Используйте этот бэкенд только для домена * по умолчанию.


== Использование ad ==
=== Использование ad ===


Вы можете настроить пользователя Samba AD на использование бэкенда ad.
Вы можете настроить пользователя Samba AD на использование бэкенда ad.
Строка 149: Строка 152:
  template homedir = /home/%U
  template homedir = /home/%U


== Использование rid ==
=== Использование rid ===


Можно настроить клиента домена для использования бэкенда rid.
Можно настроить клиента домена для использования бэкенда rid.
Строка 186: Строка 189:
{{Note|Пользователи и группы, чьи идентификаторы не входят в диапазон, игнорируются.}}
{{Note|Пользователи и группы, чьи идентификаторы не входят в диапазон, игнорируются.}}


== Использование autorid ==
=== Использование autorid ===


Бэкенд autorid работает аналогично бэкенду для сопоставления идентификаторов rid, но может автоматически назначать идентификаторы для разных доменов. Это позволяет использовать autorid в следующих ситуациях:
Бэкенд autorid работает аналогично бэкенду для сопоставления идентификаторов rid, но может автоматически назначать идентификаторы для разных доменов. Это позволяет использовать autorid в следующих ситуациях:
Строка 197: Строка 200:


  idmap config * : backend = autorid
  idmap config * : backend = autorid
  idmap config * : range = 10000-999999
  idmap config * : range = 100000-9999999


{{Note|После того как был задан диапазон и клиент домена начнёт его использовать, можно увеличить только верхний предел диапазона. Любое другое изменение диапазона может привести к присвоению новых идентификаторов и, следовательно, к потере прав на файлы.}}
{{Note|По умолчанию значение rangesize равно 100000.}}


При необходимости можно задать размер диапазона.
При необходимости можно задать другой размер диапазона:


  idmap config * : rangesize = 200000
  idmap config * : rangesize = 200000


{{Note|По умолчанию значение rangesize равно 100000.}}
{{Note|После того как был задан диапазон и клиент домена начнёт его использовать, можно увеличить только верхний предел диапазона. Любое другое изменение диапазона (range) или размера диапазона (rangesize) может привести к нарушению сопоставления идентификаторов.}}


Клиент присваивает это количество непрерывных идентификаторов каждому объекту домена до тех пор, пока не будут взяты все идентификаторы из диапазона, заданного в параметре idmap config * : range.
Клиент присваивает это количество непрерывных идентификаторов каждому объекту домена до тех пор, пока не будут взяты все идентификаторы из диапазона, заданного в параметре idmap config * : range.


{{Note|Диапазон (range) должен быть кратен размеру диапазона (rangesize).}}
{{Note|Диапазон (range) должен быть кратен размеру диапазона (rangesize).}}
==SSSD==
Если в файле конфигурации '''sssd.conf''' используется параметр '''auth_provider=ad''' или '''access_provider=ad''', то для корректной работы необходимо также задать '''id_provider=ad'''.
#'''Автоматическое сопоставление идентификаторов через SID'''
#:По умолчанию провайдер идентификации Active Directory (id_provider=ad) выполняет сопоставление UID и GID на основе значения objectSID, хранящегося в учетных записях Active Directory:<source lang="text">ID Mapping через ldap_id_mapping = True</source>Это позволяет системе автоматически назначать пользователям и группам уникальные идентификаторы в Linux, обеспечивая корректную аутентификацию и авторизацию.
#:Возможность сопоставления идентификаторов позволяет SSSD выступать в роли клиента Active Directory, при этом администраторам не требуется расширять атрибуты пользователя с целью поддержки атрибутов POSIX для идентификаторов пользователей и групп. Когда сопоставление идентификаторов включено, атрибуты uidNumber и gidNumber (если они настроены) игнорируются. Это позволяет избежать возможных конфликтов между значениями, назначенными автоматически, и значениями, назначенными вручную.
#: Минимальная конфигурация (в разделе “[domain/DOMAINNAME]”):<source lang="text">ldap_id_mapping = True
ldap_schema = ad</source>
#:По умолчанию пул UID/GID для сопоставления SID в SSSD имеет ограниченный размер. Для больших доменов с количеством пользователей более 200 тысяч этот пул необходимо расширять вручную.
#:*При стандартной конфигурации настраивается 10000 срезов, каждый из которых может содержать до 200000 идентификаторов, начиная от 200000 и до 2000200000.
#:*Из всего общего диапазона, размером 2 миллиарда под каждый домен выделяется срез id размером 200000, каждому домену может соответствовать только один единственный срез.
#:*Для увеличения размера среза в конфигурации SSSD используются параметры:
#:*:*ldap_idmap_range_min - нижняя (включительно) граница диапазона идентификаторов.
#:*:*ldap_idmap_range_max - верхняя (не включительно) граница диапазона идентификаторов.
#:*:*ldap_idmap_range_size - количество идентификаторов, доступных для каждого среза.
#:*:Значение должно быть не меньше значения максимального RID пользователя, запланированного для использования на сервере AD.
#:*:Эти параметры позволяют адаптировать пул UID/GID под нужды вашего домена. Однако, увеличивая размер среза, необходимо уменьшать количество срезов, что увеличивает вероятность коллизий (по умолчанию вероятность коллизии одного конкретного домена с другим составляет 1/10000).
#'''Сопоставление идентификаторов через атрибуты RFC2307'''
#:Если в AD настроены POSIX-атрибуты (uidNumber, gidNumber, homeDirectory, loginShell) и не требуется динамическое сопоставление, можно использовать атрибуты напрямую. Для этого необходимо указать в файле конфигурации '''sssd.conf''':<source lang="text">ID Mapping через ldap_id_mapping = False</source>
#:В этом случае идентификаторы назначаются вручную в учетных записях пользователей и групп в AD:
#:Атрибуты пользователя:
#:*uidNumber — уникальный идентификатор пользователя (UID).
#:*gidNumber — идентификатор основной группы пользователя (обычно совпадает с gidNumber одной из групп AD).
#:*homeDirectory — путь к домашнему каталогу.
#:*loginShell — оболочка входа (/bin/bash, /bin/sh и т. д.).
#:Атрибуты группы:
#:*gidNumber
#:Чтобы SSSD корректно сопоставил пользователя с основной группой, нужно указать атрибут gidNumber в настройках этой группы.

Текущая версия от 14:28, 25 марта 2025

Описание

Домены Windows различают пользователей и группы по уникальным идентификаторам безопасности (SID). Однако в Linux для каждого пользователя и группы требуются уникальные идентификаторы UID и GID. Для сопоставления этих идентификаторов (SID с UID/GID) в Linux можно использовать:

  • Winbind
  • SSSD

Winbind

Чтобы служба winbindd могла предоставлять уникальные идентификаторы для пользователей и групп в Linux, необходимо на клиенте домена настроить сопоставление идентификаторов в файле /etc/samba/smb.conf для:

  • Локальная база данных (домен * по умолчанию)
  • Домен AD
  • Каждый доверенный домен, из которого пользователи должны иметь доступ к ресурсам

Samba предоставляет различные модули сопоставления идентификаторов для конкретных конфигураций. Наиболее часто используемыми модулями являются:

Бэкенд Пример использования
tdb В доменах * по умолчанию
ad AD домены
rid AD домены
autorid AD домены и в доменах * по умолчанию

Планирование диапазонов идентификаторов

Независимо от того, хранятся ли UID и GID Linux в Active Directory (если в AD включены расширения схемы RFC2307) или настроена их автоматическая генерация, для каждой конфигурации домена требуется уникальный диапазон идентификаторов. Этот диапазон не должен пересекаться с диапазонами других доменов.

Примечание: При пересечении диапазонов идентификаторов работа системы не будет корректной.


Пример непересекающихся диапазонов сопоставления идентификаторов для доменов по умолчанию (*), AD-DOM и TRUST-DOM:

[global]
...
idmap config * : backend = tdb
idmap config * : range = 10000-999999

idmap config AD-DOM:backend = rid
idmap config AD-DOM:range = 2000000-2999999

idmap config TRUST-DOM:backend = rid
idmap config TRUST-DOM:range = 4000000-4999999
Примечание: Можно назначить только один диапазон для каждого домена. Поэтому необходимо оставить достаточно места между диапазонами доменов, чтобы расширить диапазон позже, если домен вырастет. Если позже назначить домену другой диапазон, права на файлы и каталоги, ранее созданные пользователями и группами, будет утрачено.


Внимание! Максимальное значение uid/gid:
2^31 - 1 = 2147483647


Также при планировании диапазонов необходимо учитывать, что в Linux есть четыре специальных UID, которые нельзя использовать.

  1. 0 → root (Суперпользователь).
  2. 65534 → Nobody UID, также называемый UID “переполнения” или аналогичный, используется в системах Linux для обозначения пользователя, который не имеет прав доступа к системным ресурсам.
  3. 65535, он же “16-разрядный (uid_t) -1uid_t”. До того, как ядро Linux 2.4 было 16-разрядным, и программы, скомпилированные для этого, следовательно, предполагали, что (uid_t) -1 равно 65535. Таким образом, этот UID непригоден для использования.

Домен * по умолчанию

В доменной среде вы добавляете одну конфигурацию сопоставления идентификаторов для каждого из следующих параметров:

  • Домен, членом которого является клиент, на котором производится настройка
  • Каждый доверенный домен

Однако для всех остальных объектов присваиваются идентификаторы из домена по умолчанию. Сюда входят:

  • Локальные пользователи и группы
  • Встроенные учетные записи и группы, такие как BUILTIN\Administrators

Бэкенд домена по умолчанию должен быть доступен для записи, чтобы назначенные идентификаторы постоянно сохранялись.

Для домена по умолчанию вы можете использовать один из следующих бэкендов:

  • tdb

В данном случае необходимо задать достаточно большой диапазон идентификаторов, чтобы включать объекты, которые будут созданы в будущем и которые не являются частью определенной конфигурации сопоставления идентификаторов домена.

Например, задайте следующее в разделе [global] в файле /etc/samba/smb.conf:

idmap config * : backend = tdb
idmap config * : range = 10000-999999

Для получения более подробной информации см. [Использование tdb]

  • autorid

При использовании бэкенда autorid при настройке домена * по умолчанию необязательно добавлять дополнительные конфигурации сопоставления идентификаторов для доменов.

Например, задайте следующее в разделе [global] в файле /etc/samba/smb.conf:

idmap config * : backend = autorid
idmap config * : range = 10000-999999

Для получения более подробной информации см. Использование autorid]

Использование tdb

Служба winbindd по умолчанию использует доступный для записи бэкенд tdb для хранения таблиц сопоставления идентификаторов безопасности (SID), UID и GID. Это относится к локальным и встроенным пользователям и группам.

Используйте этот бэкенд только для домена * по умолчанию.

Использование ad

Вы можете настроить пользователя Samba AD на использование бэкенда ad.

Бэкенд ad реализует API, доступный только для чтения, для чтения информации об учетной записи и группе из AD. Это обеспечивает следующие преимущества:

  • Все настройки пользователей и групп хранятся централизованно в AD.
  • Идентификаторы пользователей и групп совпадают на всех клиентах.
  • Идентификаторы не хранятся в локальной базе данных, которая может быть повреждена, и, следовательно, права на файлы не могут быть потеряны.
Примечание: Бэкенд ad не поддерживает домены Active Directory с односторонними доверительными отношениями. Если вы настраиваете участника домена в Active Directory с односторонними доверительными отношениями, вместо этого используйте одну из следующих серверных частей сопоставления идентификаторов: tdb, rid или autorid.


Бэкенд часть ad считывает следующие атрибуты из AD:

Имя атрибута AD Тип объекта Сопоставление
sAMAccountName Пользователь и группа Имя пользователя или группы в зависимости от объекта
uidNumber Пользователь Идентификатор пользователя (UID)
gidNumber Группа Идентификатор группы (GID)
loginShell Пользователь Путь к командной строке пользователя

Предварительные требования

  • И пользователи, и группы должны иметь уникальные идентификаторы, заданные в AD, и идентификаторы должны находиться в диапазоне, настроенном в /etc/samba/smb.conf файле. Объекты, идентификаторы которых находятся за пределами диапазона, не будут доступны на клиенте.
  • У пользователей и групп должны быть заданы все необходимые атрибуты в AD.
  • Настроено сопоставление идентификаторов в файле /etc/samba/smb.conf.

Пример

idmap config * : backend = tdb
idmap config * : range = 3000-7999

idmap config TEST : backend = ad
idmap config TEST : range = 10000-999999
idmap config TEST : schema_mode = rfc2307

Чтобы разрешить клиенту домена считывать командную строку входа в систему и путь к домашнему каталогу пользователей из соответствующего атрибута AD, необходимо установить:

idmap config DOMAIN : unix_nss_info = yes

В качестве альтернативы можно установить единый путь к домашнему каталогу для всего домена и командную строку входа, которые будут применяться ко всем пользователям. Например:

template shell = /bin/bash
template homedir = /home/%U

Использование rid

Можно настроить клиента домена для использования бэкенда rid.

В Active Directory SID состоит из нескольких частей, где каждая часть кодирует информацию, связанную с доменом или самой учетной записью. SID выглядит примерно так:

S-1-5-21-XXXXXXXXXX-YYYYYYYYYY-ZZZZZZZZZZ-RID
  • S-1-5-21: Префикс SID, общая часть для идентификаторов безопасности Windows.
  • XXXXXXXXXX-YYYYYYYYYY-ZZZZZZZZZZ: Уникальная часть домена.
  • RID: Число, уникальное для каждой учетной записи в домене (например, пользователя или группы).

Для настройки idmap rid в Samba, RID берётся из последней части SID и используется для определения UID/GID на основе заранее заданного диапазона.

Когда вы задаёте конфигурацию idmap rid, как, например:

idmap config DOMAIN : backend = rid
idmap config DOMAIN : range = 10000-999999

Samba берёт RID из SID и добавляет его к началу диапазона range. Например, для пользователя с SID S-1-5-21-XXXXXXXXXX-YYYYYYYYYY-ZZZZZZZZZZ-1000, UID будет вычислен как 10000 + 1000 = 11000.

Бэкенд rid реализует доступный только для чтения API для вычисления информации об учетной записи и группе на основе алгоритмической схемы сопоставления для доменов. При настройке необходимо задать наименьшее и наибольшее значения идентификаторов в параметре idmap config DOMAIN : range. Samba не будет сопоставлять пользователей или группы с более низким или более высоким RID, чем указано в этом параметре.

Примечание: Для бэкенда rid нельзя назначать новые идентификаторы, например, для BUILTIN групп. Поэтому не используйте этот бэкенд для домена * по умолчанию.


Внимание! Необходимо планировать с запасом интервал в соответствии с прогнозированием увеличения количества объектов, так как максимальное значение RID равно 2147483647.


Пример:

idmap config * : backend = tdb
idmap config * : range = 10000-999999

idmap config DOMAIN : backend = rid
idmap config DOMAIN : range = 2000000-2999999
Примечание: Пользователи и группы, чьи идентификаторы не входят в диапазон, игнорируются.


Использование autorid

Бэкенд autorid работает аналогично бэкенду для сопоставления идентификаторов rid, но может автоматически назначать идентификаторы для разных доменов. Это позволяет использовать autorid в следующих ситуациях:

  • Только для домена * по умолчанию
  • Для домена * по умолчанию и дополнительных доменов, без необходимости создавать конфигурации сопоставления идентификаторов для каждого из дополнительных доменов (Любые домены, кроме основного. Они могут быть доверенными доменами в инфраструктуре AD. Для таких доменов можно не указывать подробную конфигурацию в smb.conf)
  • Только для определенных доменов (Те домены, для которых вручную заданы конкретные параметры сопоставления идентификаторов)

Пример:

idmap config * : backend = autorid
idmap config * : range = 100000-9999999
Примечание: По умолчанию значение rangesize равно 100000.


При необходимости можно задать другой размер диапазона:

idmap config * : rangesize = 200000
Примечание: После того как был задан диапазон и клиент домена начнёт его использовать, можно увеличить только верхний предел диапазона. Любое другое изменение диапазона (range) или размера диапазона (rangesize) может привести к нарушению сопоставления идентификаторов.


Клиент присваивает это количество непрерывных идентификаторов каждому объекту домена до тех пор, пока не будут взяты все идентификаторы из диапазона, заданного в параметре idmap config * : range.

Примечание: Диапазон (range) должен быть кратен размеру диапазона (rangesize).


SSSD

Если в файле конфигурации sssd.conf используется параметр auth_provider=ad или access_provider=ad, то для корректной работы необходимо также задать id_provider=ad.

  1. Автоматическое сопоставление идентификаторов через SID
    По умолчанию провайдер идентификации Active Directory (id_provider=ad) выполняет сопоставление UID и GID на основе значения objectSID, хранящегося в учетных записях Active Directory:
    ID Mapping через ldap_id_mapping = True
    
    Это позволяет системе автоматически назначать пользователям и группам уникальные идентификаторы в Linux, обеспечивая корректную аутентификацию и авторизацию.
    Возможность сопоставления идентификаторов позволяет SSSD выступать в роли клиента Active Directory, при этом администраторам не требуется расширять атрибуты пользователя с целью поддержки атрибутов POSIX для идентификаторов пользователей и групп. Когда сопоставление идентификаторов включено, атрибуты uidNumber и gidNumber (если они настроены) игнорируются. Это позволяет избежать возможных конфликтов между значениями, назначенными автоматически, и значениями, назначенными вручную.
    Минимальная конфигурация (в разделе “[domain/DOMAINNAME]”):
    ldap_id_mapping = True
    ldap_schema = ad
    
    По умолчанию пул UID/GID для сопоставления SID в SSSD имеет ограниченный размер. Для больших доменов с количеством пользователей более 200 тысяч этот пул необходимо расширять вручную.
    • При стандартной конфигурации настраивается 10000 срезов, каждый из которых может содержать до 200000 идентификаторов, начиная от 200000 и до 2000200000.
    • Из всего общего диапазона, размером 2 миллиарда под каждый домен выделяется срез id размером 200000, каждому домену может соответствовать только один единственный срез.
    • Для увеличения размера среза в конфигурации SSSD используются параметры:
      • ldap_idmap_range_min - нижняя (включительно) граница диапазона идентификаторов.
      • ldap_idmap_range_max - верхняя (не включительно) граница диапазона идентификаторов.
      • ldap_idmap_range_size - количество идентификаторов, доступных для каждого среза.
      Значение должно быть не меньше значения максимального RID пользователя, запланированного для использования на сервере AD.
      Эти параметры позволяют адаптировать пул UID/GID под нужды вашего домена. Однако, увеличивая размер среза, необходимо уменьшать количество срезов, что увеличивает вероятность коллизий (по умолчанию вероятность коллизии одного конкретного домена с другим составляет 1/10000).
  2. Сопоставление идентификаторов через атрибуты RFC2307
    Если в AD настроены POSIX-атрибуты (uidNumber, gidNumber, homeDirectory, loginShell) и не требуется динамическое сопоставление, можно использовать атрибуты напрямую. Для этого необходимо указать в файле конфигурации sssd.conf:
    ID Mapping через ldap_id_mapping = False
    
    В этом случае идентификаторы назначаются вручную в учетных записях пользователей и групп в AD:
    Атрибуты пользователя:
    • uidNumber — уникальный идентификатор пользователя (UID).
    • gidNumber — идентификатор основной группы пользователя (обычно совпадает с gidNumber одной из групп AD).
    • homeDirectory — путь к домашнему каталогу.
    • loginShell — оболочка входа (/bin/bash, /bin/sh и т. д.).
    Атрибуты группы:
    • gidNumber
    Чтобы SSSD корректно сопоставил пользователя с основной группой, нужно указать атрибут gidNumber в настройках этой группы.