我在 RHEL 6 系统上运行 winbind。除了组查找之外,一切都运行正常,因此许多命令(包括sudo
)都非常慢。我做了一个,strace
显示 winbind 查找当前用户的每个组和每个组内的每个用户。其中一些组有 20000 多个用户,因此一个简单的操作sudo
可能需要 60 秒才能完成。
我真的只关心加快 sudo 命令的速度。理想的解决方案是:
- 不会查找用户数量超过 X 的组,或者
- 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 start”)
重启后的第一个 sudo 可能需要一点时间(但不会像您遇到的那样麻烦),并且后续操作肯定会如预期的那样(快速);对于其他任何人,您可能只会使用本地管理员帐户执行 sudo 命令(因为您被迫创建一个本地帐户,是吗?)