我正在使用 PrivacyIDEA 的 FreeRADIUS 实现将身份验证请求发送到 PrivacyIDEA。但是,如果请求进入,我想在本地对特定用户进行身份验证。我修改了用户文件以包含用户和用户密码,并修改了站点配置以包含文件模块。但是,FreeRADIUS 仍在将请求传递给 PrivacyIDEA。我在这里遗漏了什么?
调试输出在这里(网站不允许我在这里发布它): https://pastebin.com/raw/WAsXx4gN
站点配置
server {
authorize {
files
update request {
# Add the Packet Src IP to the request as client fallback
Packet-Src-IP-Address = "%{Packet-Src-IP-Address}"
}
perl-privacyidea
if (ok || updated) {
update control {
Auth-Type := Perl
}
}
}
listen {
type = auth
ipaddr = 10.97.11.51
port = 1812
}
listen {
type = acct
ipaddr = 10.97.11.51
port = 0
}
authenticate {
files
Auth-Type perl {
perl-privacyidea
}
digest
}
accounting {
detail
}
}
答案1
这是一篇非常值得一读的文章:https://wiki.freeradius.org/guide/Concepts
在授权部分,FreeRADIUS 将确定是否应处理请求以及如何对用户进行身份验证。授权部分将总是将 Auth-Type 设置为Perl
。
所以我们需要修改该authorize
部分,并在该authenticate
部分采取相应的行动。
这或许可以进行优化:
authorize {
files
if (ok) {
# This means the user was found in "files" and the request should be handled accordingly
update control {
Auth-Type := F
}
...
} else {
perl-privacyidea
if (ok || update) {
update control {
Auth-Type := Perl
}
}
}
这样我们任何一个将授权部分的 Auth-Type 设置为“F”或“Perl”。
然后我们可以在身份验证部分使用它:
authenticate {
Auth-Type F {
# In case of F, authenticate the user by files
files
}
Auth-Type Perl {
perl-privacyidea
}
}
这应该能给你一个基本的想法,可能需要一些调整。但现在,通过文件验证的用户的请求不应传递给 privacyIDEA。