1、查看/etc/raddb/sites-enabled/default文件,去掉注释和空行
#grep -v "#" /etc/raddb/sites-enabled/default | tr -s '\n'
找到authorize节,内容类似如下:
authorize {
filter_username
preprocess
chap
suffix
eap {
ok = return
}
files
expiration
logintime
pap
Autz-Type New-TLS-Connection {
ok
}
}
2、filter_username在/etc/raddb/policy.d目录下的filter文件中定义
#more /etc/raddb/policy.d/filter
3、下面测试一个filter_username中的if条件
if (&User-Name =~ / /) {
update request {
&Module-Failure-Message += 'Rejected: User-Name contains whitespace'
}
reject
}
表示用户名中不得包含空格,否则返回reject
#radtest "alice " passme 127.0.0.1 100 testing123
屏幕输出如下:
Received Access-Reject Id 143 from 127.0.0.1:1812 to 127.0.0.1:39232 length 20
(0)-: Expected Access-Accept got Access-Reject
验证失败,什么原因,看不出来。
切换到服务运行窗口
......
authorize {
(0) policy filter_username {
(0) if (&User-Name) {
(0) if (&User-Name) -> TRUE
(0) if (&User-Name) {
(0) if (&User-Name =~ / /) {
(0) if (&User-Name =~ / /) -> TRUE
(0) if (&User-Name =~ / /) {
(0) update request {
(0) &Module-Failure-Message += 'Rejected: User-Name contains whitespace'
(0) } # update request = noop
(0) [reject] = reject
(0) } # if (&User-Name =~ / /) = reject
(0) } # if (&User-Name) = reject
(0) } # policy filter_username = reject
(0) } # authorize = reject
......
从涂蓝色的调试信息中可以看出来,用户名中含有空格,直接被拒绝了。
4、其余的基本类似
#radtest alice@example@com passme 127.0.0.1 100 testing123
相关调试信息:if (&User-Name =~ /@[^@]*@/ ) -> TRUE
#radtest alice@example..com passme 127.0.0.1 100 testing123
相关调试信息:if (&User-Name =~ /\.\./ ) -> TRUE
#radtest alice@com passme 127.0.0.1 100 testing123
相关调试信息:if ((&User-Name =~ /@/) && (&User-Name !~ /@(.+)\.(.+)$/)) -> TRUE
#radtest alice@example.com. passme 127.0.0.1 100 testing123
相关调试信息:if (&User-Name =~ /\.$/) -> TRUE
#radtest alice@.example.com passme 127.0.0.1 100 testing123
相关调试信息:if (&User-Name =~ /@\./) -> TRUE
5、下面再看看符合规范的两个例子
#radtest alice@example.com passme 127.0.0.1 100 testing123
#radtest alice passme 127.0.0.1 100 testing123
调试信息如下:
......
policy filter_username {
if (&User-Name) {
if (&User-Name) -> TRUE
if (&User-Name) {
if (&User-Name =~ / /) {
if (&User-Name =~ / /) -> FALSE
if (&User-Name =~ /@[^@]*@/ ) {
if (&User-Name =~ /@[^@]*@/ ) -> FALSE
if (&User-Name =~ /\.\./ ) {
if (&User-Name =~ /\.\./ ) -> FALSE
if ((&User-Name =~ /@/) && (&User-Name !~ /@(.+)\.(.+)$/)) {
if ((&User-Name =~ /@/) && (&User-Name !~ /@(.+)\.(.+)$/)) -> FALSE
if (&User-Name =~ /\.$/) {
if (&User-Name =~ /\.$/) -> FALSE
if (&User-Name =~ /@\./) {
if (&User-Name =~ /@\./) -> FALSE
} # if (&User-Name) = notfound
} # policy filter_username = notfound
......
涂绿色的表示用户没有发现违反上述规则
本文详细介绍了如何在FreeRADIUS服务器中配置filter_username政策,通过查看配置文件和测试不同用户名,展示了如何检查并拒绝包含空格、非法字符的用户名,确保用户名合规。

681

被折叠的 条评论
为什么被折叠?



