null

Samba3 и перенаселенные группы Active Directory

 

Moss: "What do you call Negative One, alone, in a room?"
Prime: "I don't know, what do you call Negative One, alone, in a room?"
Moss: "Overnumerousness!"

(C) The IT Crowd

 

Задача: допустить к Squid только пользователей определенной группы Active Directory.
Приборы и материалы : Active Directory с группами, содержащими более 1000 пользователей и Samba3, входящая в указанный домен AD.

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

# wbinfo -t
checking the trust secret for domain ITCROWD via RPC calls succeeded

# wbinfo --user-groups=moss
16777221
16777223
16777220

 

Для небольшой группы все в порядке:

# wbinfo --gid-info=16777223
it_crowd:x:16777223:moss,roy,jen

 

Для очень большой группы ничего (хотя в эту группу должны входить все пользователи домена):

# wbinfo --gid-info=16777221
domain_users:x:16777221:


А для большой группы и вовсе ошибка:

# wbinfo --gid-info=16777220
failed to call wbcGetgrgid: WBC_ERR_DOMAIN_NOT_FOUND
Could not get info for gid 16777220


В логах при этом:

[2011/09/01 16:48:32.321651,  0] ../lib/util/debug.c:413(talloc_log_fn)
  Bad talloc magic value - unknown value
[2011/09/01 16:48:32.322093,  0] lib/util.c:1116(smb_panic)
  PANIC (pid 3845): Bad talloc magic value - unknown value
[2011/09/01 16:48:32.325653,  0] lib/util.c:1220(log_stack_trace)
  BACKTRACE: 22 stack frames:
   #0 winbindd(log_stack_trace+0x18) [0x7f1fc3a824aa]
   #1 winbindd(smb_panic+0x4c) [0x7f1fc3a82586]
   #2 winbindd(+0x45be90) [0x7f1fc3d5ce90]
   #3 winbindd(+0x45bf84) [0x7f1fc3d5cf84]
   #4 winbindd(+0x45c302) [0x7f1fc3d5d302]
   #5 winbindd(+0x436283) [0x7f1fc3d37283]
   #6 winbindd(dcerpc_lsa_lookup_sids3+0x2e) [0x7f1fc3d3754b]
   #7 winbindd(winbindd_lookup_sids+0xcf) [0x7f1fc39e86b7]
   #8 winbindd(+0xeaed2) [0x7f1fc39ebed2]
   #9 winbindd(+0xd94a2) [0x7f1fc39da4a2]
   #10 winbindd(_wbint_LookupGroupMembers+0x5d) [0x7f1fc39f4052]
   #11 winbindd(+0xfa73f) [0x7f1fc39fb73f]
   #12 winbindd(winbindd_dual_ndrcmd+0x100) [0x7f1fc39f2d27]
   #13 winbindd(+0xf0f9a) [0x7f1fc39f1f9a]
   #14 winbindd(+0xf11dc) [0x7f1fc39f21dc]
   #15 winbindd(tevent_common_loop_immediate+0x10a) [0x7f1fc3a8f946]
   #16 winbindd(run_events_poll+0x3c) [0x7f1fc3a8e171]
   #17 winbindd(+0x18d7bc) [0x7f1fc3a8e7bc]
   #18 winbindd(_tevent_loop_once+0x74) [0x7f1fc3a8eaa7]
   #19 winbindd(main+0xa9e) [0x7f1fc39d1f05]
   #20 /lib64/libc.so.6(__libc_start_main+0xfd) [0x7f1fc1524cdd]
   #21 winbindd(+0xce8f9) [0x7f1fc39cf8f9]
[2011/09/01 16:48:32.327631,  0] lib/fault.c:372(dump_core)
  dumping core in /var/log/samba/cores/winbindd


Разглядывание исходных текстов Samba3 выявило разный подход при работе с группами до 1000 пользователей и более: для больших групп записи получаются в результате нескольких запросов к контроллеру домена. Память в этом случае выделяется дополнительно, что и приводит к ошибке:

(gdb) bt
#0  0x00007f1fc1538905 in raise () from /lib64/libc.so.6
#1  0x00007f1fc153a0e5 in abort () from /lib64/libc.so.6
#2  0x00007f1fc3a76daf in dump_core () at lib/fault.c:391
#3  0x00007f1fc3a8266c in smb_panic (why=<value optimized out>) at lib/util.c:1132
#4  0x00007f1fc3d5ce90 in talloc_abort_unknown_value (ptr=<value optimized out>) at ../lib/talloc/talloc.c:341
#5  talloc_chunk_from_ptr (ptr=<value optimized out>) at ../lib/talloc/talloc.c:360
#6  0x00007f1fc3d5cf84 in __talloc (context=0x7f1fc5ad7180, size=9) at ../lib/talloc/talloc.c:555
#7  0x00007f1fc3d5d302 in __talloc_strlendup (t=<value optimized out>, p=0x7f1fc5bd6f10 "reynholm", len=8)
    at ../lib/talloc/talloc.c:1923


Быстрое решение проблемы также было найдено - отказ от использования LDAP протокола при обращении к контроллеру домена:

# testparm -s
Load smb config files from /etc/samba/smb.conf
Loaded services file OK.
Server role: ROLE_DOMAIN_MEMBER
[global]
        display charset = UTF-8
        workgroup = ITCROWD
        realm = ITCROWD.COM
        security = ADS
        winbind enum users = Yes
        winbind enum groups = Yes
        winbind use default domain = Yes
        winbind normalize names = Yes
        idmap config * : range = 16777216-33554431
        idmap config * : backend = tdb
        winbind rpc only = Yes


После добавления winbind rpc only = Yes все встало на свои места:

# wbinfo --gid-info=16777221 | awk -F, '{print NF}'
124361

# wbinfo --gid-info=16777220 | awk -F, '{print NF}'
1954


Медленное, но верное решение в виде патча отправлено разработчикам Samba3.

Не делайте из еды культа!

Очень люблю готовить и вкусно покушать. А чтобы времени на эти увлекательные занятия оставалось как можно больше, я стараюсь автоматизировать любые задачи, которые оказываются в поле моей профессиональной деятельности.
В своем скромном дневнике я буду делиться с Вами рецептами блюд, которые удаются мне особенно хорошо

Ничего не найдено. n is 0