通过 apache 进行 winbind 身份验证很慢

通过 apache 进行 winbind 身份验证很慢

我有一台 Linux 机器设置,使用带有 samba/winbind 的 Active Directory 对用户进行身份验证。

然后设置 Apache 来使用它来验证用户。具体操作如下:

<IfModule mod_authnz_external.c>
    AddExternalAuth pwauth /usr/sbin/pwauth
    SetExternalAuthMethod pwauth pipe
</IfModule>

但是,没有身份验证的情况下,页面请求耗时不到 1 秒,现在需要 6 秒以上。查看登录信息/var/log/samba/log.winbindd没有显示任何错误,但每次页面加载似乎都需要大量的身份验证请求。基本上,每个加载的资源似乎都需要一次身份验证,例如每个 css 文件。

/etc/samba/smb.conf我尝试使用一些设置,例如winbind cache time = 300winbind offline logon = yes。我还尝试将 idmap 后端从 tdb 更改为 ad。

在页面加载期间,winbindd 的 CPU 使用率非常高,约为 50-60%,而其他进程似乎都没有超过 10-20%。

我是否错过了一些可以加快此速度的配置,或者是否有更好的方法可以解决这个问题(例如使用 mod_authnz_external 以外的其他方法)?

答案1

我仍然没有找到如何提高使用 mod_authnz_external 时的性能。但是,更改为另一个 apache 模块 mod_authnz_ldap 可以解决性能问题。唯一的缺点是系统和 apache 的 ldap 配置是重复的。

答案2

在类似的设置中,使用 Ubuntu 18.04 作为客户端,使用 Samba 4.7.8 作为服务器,进行一次身份验证验证码大约需要 200 毫秒,这对于 SVN 操作来说是不可接受的,因为简单的存储库列表会使用相当多的请求。

加载中authn_socache作为身份验证缓存(示例包括authnz_externalauthz_unix组) 采用以下设置可提高性能:

<Location /svn>
     DAV svn
     SVNParentPath /var/local/svn/
     SVNListParentPath on
     AuthType Basic
     AuthName "private area"
     AuthBasicProvider socache external
     AuthExternal pwauth
     AuthExternalProvideCache on
     AuthnCacheProvideFor external
     AuthnCacheTimeout 300
     Require unix-group svngroup
</Location>

AuthExternalProvideCache 开启很重要,否则authnz_external不会缓存登录信息。

相关内容