Winbind 組查找非常慢

Winbind 組查找非常慢

我在 RHEL 6 系統上執行 winbind。除了群組查找之外,一切都工作正常,因此許多命令(包括sudo)都非常慢。我做了一個strace顯示 winbind 尋找當前使用者的每個群組和每個群組中的每個使用者的操作。其中一些群組擁有 20000 多名用戶,因此一個簡單的群組sudo可能需要 60 秒才能完成。

我真的只關心加速 sudo 命令。理想的解決方案將是:

  1. 將不會尋找使用者數量超過 X 的群組,或
  2. sudo 完全繞過組查找。

這是我目前的“smb.conf”溫賓德:

workgroup = EXAMPLE
password server = AD1.EXAMPLE.ORG
realm = EXAMPLE.ORG
security = ads
idmap uid = 10000-19999
idmap gid = 10000-19999
idmap config EXAMPLE:backend = rid
idmap config EXAMPLE:range = 10000000-19999999
winbind enum users = no
winbind enum groups = no
winbind separator = +
template homedir = /home/%U
template shell = /bin/bash
winbind use default domain = yes
winbind offline logon = false

答案1

升級sudo 後我遇到了同樣的問題,並從Red Hat 發現sudo 在從sudo-1.7.4p5-13.el6_3.x86_64 到sudo-1.8.6p3-7.el6.x86_64 時更改了其組成員資格解析演算法。在 sudo-1.7.4 中,已解析 /etc/sudoers 中列出的所有群組的群組成員身份,如果在清單中找到使用者名,則將被授予 sudo 權限。在 sudo-1.8.6 中,這被更改為相反的方式 - sudo 獲取用戶所屬的組列表,然後檢查 sudoers 中是否列出了這些組中的任何一個。

這會導致使用者所屬的每個群組都呼叫 getgrgid() ,因此如果某些群組很大,則速度會相當慢。您可以降級 sudo 或將大型群組作為空群組放入本機 /etc/group 檔案中,這樣就不會為它們聯繫 AD(假設 Linux 系統沒有引用大型群組進行任何存取控制)。

答案2

舊方法(即 1.7.x)可以透過群組插件恢復:

Defaults group_plugin="system_group.so"

或只強制使用/etc/group(無 winbind 查找等):

Defaults group_plugin="group_file.so /etc/group"

答案3

禁用嵌套組 winbind nested groups = false

答案4

或只需將「winbind Expand groups = 0」新增至您的/etc/samba/smb.cnf 檔案(然後切換到本機root 帳戶並「/etc/init.d/winbind stop; /etc/init.d /samba restart; /etc/init.d/winbind 啟動")

重新啟動後的第一個 sudo 可能需要一些時間(但不會像您所經歷的那樣糖蜜),並且可以肯定的是,後續操作將按預期進行(快);對於其他人,您可能只使用本機管理員帳戶來執行 sudo 命令(因為您被迫建立一個本機帳戶,是嗎?)

相關內容