Winbind/IDMapping

Материал из ALT Linux Wiki

Описание

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

Чтобы служба 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).