Winbind/IDMapping
Описание
Домены Windows различают пользователей и группы по уникальным идентификаторам безопасности (SID). Однако в Linux для каждого пользователя и группы требуются уникальные идентификаторы UID и GID. Служба winbindd отвечает за предоставление информации о пользователях и группах домена.
Чтобы служба winbindd могла предоставлять уникальные идентификаторы для пользователей и групп в Linux, необходимо на клиенте домена настроить сопоставление идентификаторов в файле /etc/samba/smb.conf для:
- Локальная база данных (домен * по умолчанию)
- Домен AD
- Каждый доверенный домен, из которого пользователи должны иметь доступ к ресурсам
Samba предоставляет различные модули сопоставления идентификаторов для конкретных конфигураций. Наиболее часто используемыми модулями являются:
Бэкенд | Пример использования |
---|---|
tdb | В доменах * по умолчанию |
ad | AD домены |
rid | AD домены |
autorid | AD домены и в доменах * по умолчанию |
Планирование диапазонов идентификаторов Samba
Независимо от того, хранятся ли 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 = 10000-999999
При необходимости можно задать размер диапазона.
idmap config * : rangesize = 200000
Клиент присваивает это количество непрерывных идентификаторов каждому объекту домена до тех пор, пока не будут взяты все идентификаторы из диапазона, заданного в параметре idmap config * : range.