RADIUS 服务器:检查之前对密码进行哈希处理

RADIUS 服务器:检查之前对密码进行哈希处理

我确实必须设置 RADIUS 服务器,以便使用 pfSense 强制门户进行身份验证。不幸的是,RADIUS 数据库中的所有密码都使用某种算法进行哈希处理。我确实使用 MySQL 数据库。

由于用户以纯文本形式向 RADIUS 服务器提交密码,我想知道是否可以在 RADIUS 服务器上对提交的密码进行散列,然后检查用户名和散列密码是否存在。

如果可以避免,我不想在客户端对密码进行哈希处理。pfSense 的强制门户目前是唯一使用 RADIUS 服务器的应用程序。但如果我想扩展我的基础设施,我必须在每个客户端上实施哈希算法。

一般情况下,是否可以通过这种方式修改 RADIUS 服务器?也许可以修改核心?不幸的是,我不知道在数据库中的哪个文件中查找了提交的数据。

有人能告诉我我应该去哪里看吗?

(我确实使用 Ubuntu Server 12.04 x86、freeradius、freeradius-mysql)

答案1

或者,如果您想使用外部 PHP 脚本,您可以在授权中放置以下内容:

authorize {
    update {
        Tmp-String-0 := `/usr/bin/php5 -f /path/to/cpauth.php '%{User-Name}' '%{User-Password}'`
    }

    if (Tmp-String-0 == 'Accept') {
        update control {
            Auth-type := Accept
        }
    }
    else {
        reject
    }
}

然后回应‘接受’或‘拒绝’。

答案2

配置rlm_sql模块的实例。

添加查询以authorize {}检索散列密码。

update control {
    <password-attribute> := "%{sql:SELECT password FROM foo_table WHERE user=%{User-Name}}"
}

密码属性可以是明文密码、MD5 密码、SMD5 密码、Crypt 密码、SHA2 密码、SHA 密码、SSHA 密码、LM 密码、NT 密码之一。

然后调用pap模块。pap 模块应将 Auth-Type 设置为pap,并将散列用户密码值以匹配用于密码属性值的方案并进行比较。

相关内容