Product SiteDocumentation Site

3.3.3. Сопоставление встроенных идентификаторов пользователей и групп

По умолчанию контроллер домена Samba сохраняет идентификаторы пользователей и групп в атрибутах xidNumber в idmap.ldb. Из-за особенностей работы idmap.ldb нельзя гарантировать, что каждый контроллер домена будет использовать один и тот же идентификатор для данного пользователя или группы.
Ниже описана процедура синхронизации idmap.ldb с контроллера домена, на котором установлена роль FSMO Эмулятор PDC (см. Роли FSMO), со всеми остальными контроллерами домена. Для достижения наилучших результатов следует регулярно синхронизировать idmap.ldb.
На контроллере домена, имеющего роль FSMO Эмулятор PDC:
  1. Установить пакет ldb-tools, если он еще не установлен:
    # apt-get install ldb-tools
    
  2. Создать резервную копию файла /var/lib/samba/private/idmap.ldb:
    # rm -f /var/lib/samba/private/idmap.ldb.bak
    # tdbbackup -s .bak /var/lib/samba/private/idmap.ldb
    
  3. Создать ежедневное задание cron:
    #Создание резервной копии idmap.ldb
    0 3 * * * rm -f /var/lib/samba/private/idmap.ldb.bak && tdbbackup -s .bak /var/lib/samba/private/idmap.ldb >/dev/null 2>&1
    
На контроллерах домена, которые не выполняют роль эмулятора PDC:
  1. Скопировать файл резервной копии, созданный на DC с ролью Эмулятор PDC (в примере dc1), в каталог /var/lib/samba/private/ с удалением суффикса .bak (заменить существующий файл):
    # rsync -a dc1:/var/lib/samba/private/idmap.ldb.bak /var/lib/samba/private/idmap.ldb
    
  2. Запустить очистку кеша:
    # net cache flush
    
  3. Проверить разрешения ACL SysVol и при необходимости сбросить их:
    # if ! samba-tool ntacl sysvolcheck; then samba-tool ntacl sysvolreset; fi
    
  4. Если всё прошло успешно, создать ежедневное задание cron:
    #Синхронизация idmap.ldb
    15 4 * * * rsync -a  dc1:/var/lib/samba/private/idmap.ldb.bak  /var/lib/samba/private/idmap.ldb && net cache flush && if ! samba-tool ntacl sysvolcheck; then samba-tool ntacl sysvolreset; fi >/dev/null 2>&1
    

Важно

После синхронизации idmap.ldb необходим перезапуск Samba (systemctl restart samba.service), т.к. этот файл держится открытым процессами Samba.
Синхронизации idmap.ldb можно избежать, если на всех контроллерах добавить следующие параметры в smb.conf в секции [sysvol] (и в [netlogon]) строки:
acl_xattr:ignore system acls = yes
acl_xattr:default acl style = windows
При использовании этих параметров значения расширенных атрибутов файлов (xattr security.NTACL) на всех контроллерах будут одинаковы, независимо от uid/gid. Именно это и является проблемой при использовании rsync, т.к. при синхронизации rsync передаёт имена пользователей/групп и они разыменовываются в uid/gid уже «на месте», а xattr security.NTACL остаётся неизменным и, в конфигурации по умолчанию (без вышеуказанных параметров), зависит от значений uid/gid/facl.