我有一台 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 = 300
和winbind 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_external和authz_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不会缓存登录信息。