🔗 使用 Winbind 身份验证器配置 Squid 进行 NTLM
作者:Jerry Murdock
Winbind 是 Samba 的一个组件,可在类 Unix 操作系统上访问 Windows Active Directory 身份验证服务。
🔗 支持的 Samba 版本
Samba 3 及更高版本提供了一个名为 `ntlm_auth` 的与 Squid 兼容的身份验证助手。
🔗 Samba 配置
有关如何配置 Samba 和加入 Windows 域的完整详细信息,请参阅 Samba 文档。
🔗 测试 Samba 的 winbindd
编辑 smb.conf 以实现 winbindd 功能。smb.conf 的 `[global]` 部分中的以下条目可用作模板。
workgroup = mydomain
password server = myPDC
security = domain
winbind uid = 10000-20000
winbind gid = 10000-20000
winbind use default domain = yes
按照 Samba 版本的 winbindd man 页中的说明加入 NT 域。
启动 `nmbd` 和 `winbindd`。
测试基本的 winbindd 功能:“wbinfo -t”
# wbinfo -t
Secret is good
测试 winbindd 用户身份验证。
# wbinfo -a mydomain\\myuser%mypasswd
plaintext password authentication succeeded
error code was NT_STATUS_OK (0x0)
challenge/response password authentication succeeded
error code was NT_STATUS_OK (0x0)
明文和质询/响应都应返回“succeeded”。如果未返回“challenge/response”状态,则表示 Samba 未使用“–with-winbind-auth-challenge”进行构建,不支持 NTLM 身份验证。
🔗 SMBD 和计算机信任帐户
Samba 团队已将更改计算机信任帐户密码的功能集成到新的“net”命令中。如果需要,只需一个简单的每日 cron 作业来调度 `net rpc changetrustpw` 即可。
🔗 winbind 特权管道权限
ntlm_auth 需要访问特权 winbind 管道才能正常工作。通过将 Squid 运行的安全用户添加到 `winbindd_priv` 组来启用此访问。
gpasswd -a proxy winbindd_priv
如果存在,请删除 squid.conf 中的 `cache_effective_group` 设置。此设置会导致 squid 忽略辅助的 winbindd_priv 组成员身份。
Squid 默认捆绑的用户是 `nobody`,尽管某些发行包是使用 `squid`、`proxy` 或其他类似的低权限用户构建的。
在 Debian 和 Ubuntu 系统上,winbind 和 ntlm_auth 工具可能还会创建一个由 root 拥有的 `/var/lib/samba/winbindd_privileged` 目录。该文件夹的组需要更改为匹配 `/var/run/samba/winbindd_privileged` 位置。
🔗 Squid 配置
由于 Samba-3.x 有自己的身份验证助手,因此无需为与 Samba-3.x 配合使用而构建任何 Squid 身份验证助手(如果构建了 Squid 提供的助手,它们也无法工作)。但是,如果您计划使用 NTLM 方案,则需要启用对它的支持。此外,您可能希望使用 wbinfo_group 助手进行组查找。
--enable-auth="ntlm,basic"
--enable-external-acl-helpers="wbinfo_group"
🔗 在不进行身份验证的情况下测试 Squid
在继续之前,请测试基本的 Squid 功能。确保 Squid 在不需要授权的情况下正常运行。
🔗 测试助手
实际上无法从命令行测试 winbind NTLM 助手,但 winbind 基本身份验证器可以像任何其他基本助手一样进行测试。请确保以您的 `cache_effective_user` 身份运行测试。
# /usr/local/bin/ntlm_auth --helper-protocol=squid-2.5-basic
mydomain+myuser mypasswd
OK
如果提供有效的用户名/密码,助手应返回“OK”。`+` 需要与 `smb.conf` 中设置的 *域分隔符* 匹配。
🔗 squid.conf 设置
添加以下内容以同时启用 winbind 基本身份验证器和 NTLM 身份验证器。浏览器将使用它们支持的最安全的身份验证协议。
auth_param ntlm program /usr/local/bin/ntlm_auth --helper-protocol=squid-2.5-ntlmssp
auth_param ntlm children 30
# warning: basic authentication sends passwords plaintext
# a network sniffer can and will discover passwords
auth_param basic program /usr/local/bin/ntlm_auth --helper-protocol=squid-2.5-basic
auth_param basic children 5
auth_param basic realm Squid proxy-caching web server
auth_param basic credentialsttl 2 hours
添加以下 ACL 条目以要求身份验证。
acl AuthorizedUsers proxy_auth REQUIRED
http_access allow all AuthorizedUsers
🔗 在进行身份验证的情况下测试 Squid
如果在 access.log 中未看到用户名,和/或在浏览器中未出现密码对话框,则说明 squid.conf 的 acl/http_access 部分不正确。
请注意,在使用 NTLM 身份验证时,您将在 access.log 中看到两个“TCP_DENIED/407”条目,对应于每个请求序列。这是由于 NTLM 的质询/响应过程。
⚠️ Disclaimer: Any example presented here is provided "as-is" with no support
or guarantee of suitability. If you have any further questions about
these examples please email the squid-users mailing list.
类别: ConfigExample
导航:站点搜索,站点页面,分类,🔼 向上