我正在考虑在通过 SSH 访问时使用 Radius 作为一些 Ubuntu 服务器的身份验证服务器。我尝试过使用 libpam-radius-auth 但它不能完全按照我的需要工作。
我的目标是拥有一个类似于使用 TACACS/Radius 作为身份验证的 Cisco 设备的解决方案。但是,如果他们不是本地用户,则无法进行身份验证。
sshd[3200]:来自 198.18.18.22 的用户 testacc 无效
sshd[3200]:input_userauth_request:无效的用户 testacc [preauth]
我发现的解决方案是使用 NFS 挂载主文件夹和/或设置 LDAP 服务。有没有更简单的方法让用户通过 SSH 登录服务器,通过 Radius 进行身份验证?我想让它尽可能简单。
答案1
libpam-radius-auth
应该完全按照您的需要工作。我以这种身份使用它没有任何问题。你只需要
/etc/pam.d
可能在某个地方配置它common-auth
。- 配置 RADIUS 服务器
/etc/raddb/server
但是,如果他们不是本地用户,则无法进行身份验证。
是的,这是真的。用户首先必须存在。
听起来您正在处理与此处身份验证不同的问题。请记住这两个子系统之间的区别:
- 国家安全局(名称服务开关):实现用户(以及组、主机等)的数据库。它支持查询列出用户并获取其属性,例如名称、uid、主目录和 shell。最常见的 NSS 后端是“文件”,它从 获取用户信息
/etc/passwd
,但您可以使用许多其他后端从 DB 文件、LDAP 等获取信息。 - 聚丙烯酰胺(可插入身份验证模块):实现身份验证(以及记帐和密码更改)。该系统使用可插入模块来检查用户的身份验证并允许或禁止登录。最常见的 PAM 后端是“文件”,它要求用户提供一个简单的密码,并根据哈希值进行检查,
/etc/shadow
但您可以使用许多其他后端来查询 RADIUS、一次性密码系统、Kerberos 等服务。
听起来您正在使用 RADIUS 进行身份验证 (PAM),但您还想对用户数据库 (NSS) 本身使用基于网络的内容。这是一个完全不同的问题,与身份验证无关。
您不能使用 RADIUS 作为数据库后端,因为 RADIUS 协议不提供数据库功能。也就是说,它不允许您查询用户的 uid、主目录和 shell 等详细信息,更不用说枚举数据库中的用户了。因此,不存在 RADIUS NSS 后端(假设libnss-radius
)。
对于基于网络的用户数据库,您可以使用 LDAP、MySQL 或 Postgres。 LDAP 可能是最好的推荐。