Linux : SAMBA : SAMBA + AD генерация одинаковых uid и gid доменных пользователей на всех серверах


Проблема:

SAMBA нормально работает и авторизует пользователей из Windows домена, но на разных серверах один и тот же пользователь имеет разные (случайным образом выбранные) идентификаторы (uid и gid).

Просмотр идентификатора пользователя:


#id name_user

или


#id DOMAIN\name_user

В результате, если по какой-то причине будет повреждена/обновлена база соответствия SID-ов и uid/gid (например, Вы перезаведете машину в домен), то каждый пользователь получит новый идентификатор. В результате доменные пользователи не смогут получить доступ к своим файлам и папкам, т.к. ранее назначенные на их каталоги права будут соответствовать другим пользователям. Проблема в том, что восстановить предыдущий порядок записей невозможно без резервной копии базы.

Решение:
Решается данная проблема использованием RID в конфигурации SAMBA. Данный алгоритм генерации uid и gid использует SID пользователя/группы доменного пользователя. В результате вычисления данным алгоритмом для одного и того же SID будет сгенерирован один и тот же uid/gid. В результате на всех Linux серверах будет единое пространство идентификаторов доменных пользователей. Что очень удобно при выделении прав доступа.

Пример использования:


/etc/samba/smb.conf
............
   idmap uid = 10000-50000
   idmap gid = 10000-50000
   idmap config VGPGK : backend = rid
   idmap config VGPGK : range   = 10000-50000
............

где VGPGK - это сокращенное имя вашего домена.

В результате для всех доменных пользователей и групп будут генерироваться единые uid/gid в диапозоне от 10000 до 50000. Вообще говоря диапозон idmap uid и idmap gid рекомендуется делать шире чем делать idmap config VGPGK : range. А рекомендуется это с целью возможных доверительных отношений среди доменов и прочих случаев, когда для разных доменов требуется разный диапазон идентификаторов. Диапазон идентификаторов на всех SAMBA серверах должен совпадать.

После внесения данных изменений достаточно перезапустить winbind, например, так:


/etc/init.d/winbind restart

Данная конфигурация прекрасно работает на samba-3.6.3-0.24.4

В то же время на samba-3.0.36-0.13.20.1 замечательно работает следующая конфигурация:


/etc/samba/smb.conf
............
   idmap uid = 10000-50000
   idmap gid = 10000-50000
   idmap backend = rid":VGPGK=10000-50000"
............

но на SAMBA-3.6 такая запись не работает.

На других версиях мною не тестировалось, но думаю, работать будет.

Источники:
1) man idmap_rid
2) man smb.conf
3) http://www.samba.org/samba/docs/man/manpages-3/idmap_rid.8.html
4) http://www.ccs.neu.edu/home/battista/articles/winbindenterprise/ridconfi...

ВНИМАНИЕ! Данная статья не претендует на полноту описания и не гарантирует 100% результат. Она рассчитана только на указанную в ее названии проблему, т.е. предполагается, что у Вас уже установлены и настроены все необходимые пакеты.