Winbind/IDMapping
Описание
Домены 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
2^31 - 1 = 2147483647
Также при планировании диапазонов необходимо учитывать, что в Linux есть четыре специальных UID, которые нельзя использовать.
- 0 → root (Суперпользователь).
- 65534 → Nobody UID, также называемый UID “переполнения” или аналогичный, используется в системах Linux для обозначения пользователя, который не имеет прав доступа к системным ресурсам.
- 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 считывает следующие атрибуты из 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, чем указано в этом параметре.
Пример:
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
При необходимости можно задать другой размер диапазона:
idmap config * : rangesize = 200000
Клиент присваивает это количество непрерывных идентификаторов каждому объекту домена до тех пор, пока не будут взяты все идентификаторы из диапазона, заданного в параметре idmap config * : range.
SSSD
Если в файле конфигурации sssd.conf используется параметр auth_provider=ad или access_provider=ad, то для корректной работы необходимо также задать id_provider=ad.
- Автоматическое сопоставление идентификаторов через SID
- По умолчанию провайдер идентификации Active Directory (id_provider=ad) выполняет сопоставление UID и GID на основе значения objectSID, хранящегося в учетных записях Active Directory:Это позволяет системе автоматически назначать пользователям и группам уникальные идентификаторы в Linux, обеспечивая корректную аутентификацию и авторизацию.
ID Mapping через ldap_id_mapping = True
- Возможность сопоставления идентификаторов позволяет 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).
- По умолчанию провайдер идентификации Active Directory (id_provider=ad) выполняет сопоставление UID и GID на основе значения objectSID, хранящегося в учетных записях Active Directory:
- Сопоставление идентификаторов через атрибуты 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 в настройках этой группы.
- Если в AD настроены POSIX-атрибуты (uidNumber, gidNumber, homeDirectory, loginShell) и не требуется динамическое сопоставление, можно использовать атрибуты напрямую. Для этого необходимо указать в файле конфигурации sssd.conf: