Сбой Samba при перечислении слишком большого числа пользователей

Вопрос или проблема

У меня возникла проблема с OpenMediaVault и Active Directory. Я настроил Samba и присоединил сервер к домену. Но так как в каталоге много списков рассылки и отключенных пользователей, Samba долго загружает список пользователей и групп или иногда просто отказывается, и нам нужно перезапустить службу.

Я хотел бы узнать, есть ли способ настроить один из этих двух вариантов, чтобы ограничить пользователей, которых Samba отображает.

  1. предотвратить перечисление Samba отключенных пользователей.
  2. ограничить область действия Samba одной OU в Active Directory.

Это информация из smb.conf

[global]
workgroup = DOMAIN
server string = %h server
dns proxy = no
log level = 0
log file = /var/log/samba/log.%m
max log size = 1000
logging = syslog
panic action = /usr/share/samba/panic-action %d
passdb backend = tdbsam
obey pam restrictions = no
unix password sync = no
passwd program = /usr/bin/passwd %u
passwd chat = *Enter\snew\s*\spassword:* %n\n *Retype\snew\s*\spassword:* %n\n *password\supdated\ssuccessfully* .
pam password change = yes
socket options = TCP_NODELAY IPTOS_LOWDELAY
guest account = nobody
load printers = no
disable spoolss = yes
printing = bsd
printcap name = /dev/null
unix extensions = yes
create mask = 0777
directory mask = 0777
use sendfile = yes
aio read size = 1
aio write size = 1
time server = no
wins support = no
disable netbios = yes
multicast dns register = no
server min protocol = SMB2_02
# Специальная конфигурация для Time Machine от Apple
fruit:aapl = yes
fruit:copyfile = yes
fruit:nfs_aces = no
# Дополнительные параметры
realm = DOMAIN.COM
security = ads
encrypt passwords = yes
preferred master = False
local master = No
domain master = No
idmap uid = 10000-20000
idmap gid = 10000-20000
winbind enum users = yes
winbind enum groups = yes
winbind use default domain = yes
client use spnego = yes

Ответ или решение

Когда речь идет о проблемах с Samba, связанных с тайм-аутами при перечислении множества пользователей, это может быть довольно распространенной задачей, особенно в крупных и сложных сетевых структурах, таких как Active Directory с множеством учетных записей, включая отключенные и почтовые списки. Решение данной проблемы требует глубокого понимания того, как Samba взаимодействует с Active Directory, и какие конфигурации можно применить для оптимизации этого процесса. Ваша ситуация с OpenMediaVault является отличным примером такой задачи.

Теория:

Samba, действуя в качестве моста между UNIX-подобными системами и Active Directory, использует различные механизмы для доступа и перечисления пользователей и групп. Когда в Active Directory имеется большое количество объектов, это может привести к долгим задержкам или даже к тайм-аутам в процессе перечисления, особенно если эти объекты не нужны для вашей задачи. Параметры winbind enum users и winbind enum groups в конфигурации smb.conf отвечают за непосредственное перечисление пользователей и групп при инициализации. В вашем случае, актуальными улучшениями может быть подавление перечисления отключенных пользователей или фокусировка на определенной организационной единице (OU) в Active Directory.

Пример:

  1. Исключение отключенных пользователей:

Чтобы исключить отключенных пользователей из списка, можно расширить настройки фильтрации в конфигурации winbind. К сожалению, стандартный SMB-protocol не поддерживает простого способа фильтрации аккаунтов по их статусу в файловой системе. Однако, можно использовать скриптами или сторонними инструментами, чтобы автоматизировать этот процесс.

  1. Ограничение области видимости до конкретного OU:

Ограничение до определенной организационной единицы — это распространенная стратегия для управления многочисленными объектами в LDAP-каталоге. Для этого используйте опцию winbind nss info и настройте idmap config DOMAIN : range и idmap config DOMAIN : schema_mode так, чтобы отсортировать пользователей и группы от конкретного контейнера. К этому может также помочь указание базового DN (Distinguished Name) для выполнения действий с определённой OU.

Применение:

Для встроенной фильтрации, например, на уровне OU, вам может понадобиться вручную модифицировать .ldif файлы или использовать такие утилиты как ldapsearch для проверки правильности поиска с учетом ваших прописанных фильтров:

ldapsearch -x -b "ou=YourOU,dc=example,dc=com" "(objectClass=user)"

Это может быть полезно для того, чтобы определить подходит ли ваш фильтр для использования с Samba.

Затем нужно изменить конфигурацию Samba в файле smb.conf. Пример правильного использования ограничений по OU и активным пользователям может выглядеть следующим образом:

[global]
  winbind enum users = no
  winbind enum groups = no
  winbind nss info = rfc2307
  idmap config DOMAIN : backend = ad
  idmap config DOMAIN : schema_mode = rfc2307
  idmap config DOMAIN : range = 10000-20000
  idmap config DOMAIN : base_rdn = ou=YourOU,dc=example,dc=com

Обратите внимание на использование winbind enum users = no и winbind enum groups = no, которые предотвращают автоматическое перечисление пользователей и групп, что может значительно снизить нагрузку на систему и, как следствие, уменьшить время ожидания.

Заключение:

Подводя итог, ключ к решению вашей проблемы с тайм-аутами в Samba при большом количестве пользователей в Active Directory лежит в правильной настройке ее конфигурационных параметров и возможном применении скриптов для фильтрации ненужных объектов. Это требует некоторой подготовки и понимания работы Active Directory и winbind, но с корректными настройками и инструментами можно достичь стабильной и быстрой работы системы.

Оцените материал
Добавить комментарий

Капча загружается...