我目前正在使用 Freeradius 配置一个 Linux 服务器,以便我们的客户端根据我们的 WiFi 网络的 Active Directory 进行身份验证。
目标是让我们的用户使用 Active Directory 中作为“邮件”属性的电子邮件地址及其域密码来验证 WiFi 网络。
我们的AD命名格式如下
姓名:Joe Jonssen 用户名:foo\jjon1 UPN:[电子邮件保护] 邮件地址:[电子邮件保护]
我目前已使 ntlm_auth 正常工作,并且能够使用 jjon1 和密码登录。但我们想使用[电子邮件保护]和密码。
有什么方法可以实现这一点,我没有将 Freeradius 绑定到 Radius 服务器。我们需要使用我们的邮件地址作为 WiFi 网络的用户名,因为我们正在考虑加入 Eduroam 之类的计划,并且需要使用邮件地址登录。
答案1
您可以通过向 AD 启动 LDAP 查询,然后执行 NTLM 身份验证来找出用户名/sAMAccountName。
一个非常基本的 bash 脚本mail_to_username
(没有任何输入过滤器)看起来像这样:
#!/bin/bash
MAIL=$1
NTDOMAIN=$2
CHALLENGE=$3
NTRESPONSE=$4
HOST="ldap://ip-adress"
BASE_DN="OU=Users,DC=example,DC=de"
BIND_DN="[email protected]"
PASSWORD="x"
FILTER="mail=$MAIL"
sAMAccountName=`ldapsearch -LLL -x -D "$BIND_DN" -w "$PASSWORD" -b "$BASE_DN" -H "$HOST" "$FILTER" sAMAccountName | grep sAMAccountName | awk '{print $2}'`
/usr/bin/ntlm_auth --request-nt-key --username=$sAMAccountName --domain=$NTDOMAIN --challenge=$CHALLENGE --nt-response=$NTRESPONSE
在 mschap 模块中,调用 bash 脚本而不是直接调用ntlm_auth
:
ntlm_auth = "/usr/bin/mail_to_username %{mschap:User-Name:-None} %{%{mschap:NT-Domain}:-EXAMPLE} %{mschap:Challenge:-00} %{mschap:NT-Response:-00}"
答案2
脚本应调整为:
MAIL=${2:11}
NTDOMAIN=${3:9}
CHALLENGE=${4:12}
NTRESPONSE=${5:14}