我正在尝试为我的服务器和 Web 访问的用户创建一个集中式数据库,以便我可以允许这些用户在具有访问权限的情况下通过 ssh 登录,并通过我的 Web 服务查看他们的帐户和系统信息。
我已经阅读了有关 LDAP 的信息,但我希望能够在不同的数据库(例如 Postgresql)中管理用户,以便我可以更轻松地将数据库绑定到我的 Web 服务,并在需要更多用户详细信息时控制 SQL 迁移和模式。
我研究过类似 Puppet 的东西,但它对于我想要做的事情来说有点太多了,而且我目前不需要管理多个服务器。我尝试研究 Puppet 如何处理服务器用户身份验证,但没有找到太多信息。
我的问题:有没有办法在 LDAP 以外的其他数据库中创建一个集中的用户信息数据库(例如 Postgres),以便我可以使用它来对 ssh 和 web 用户进行身份验证?
答案1
是的。
几十年来,Linux 和 UNIX 系统上的系统身份验证都是通过 PAM(可插入身份验证模块)进行的。
PAM 原则是,如果您想使用新的身份验证后端,则无需重新编译所有使用身份验证的应用程序,如系统身份验证、ssh、ftp、telnet sudo 等。只需加载正确的模块,使用 PAM 的所有内容都可以自动使用新的身份验证后端。
因此,如果您的应用程序使用 PAM(很多应用程序都使用 PAM),并且已经存在或者您可以为您的备用用户/身份验证存储创建一个 PAM 模块,那么就大功告成了。
pam-pgsql是使用 PostGres SQL 数据库中的表的 PAM 模块之一。这也使得与 Web 应用程序的集成变得容易,或者您也可以使用 Web 服务器的 PAM 集成进行经过身份验证的访问。
此外,一些应用程序与 PAM 之外的数据库后端有本机集成。
答案2
LDAP 在 Linux 机器上实际上做三件事:
验证:
这是 PAM 的领域,它使用用户名/密码来验证用户是否是用户。
授权:
这就是 PAM 无法满足需求的地方,PAM 是打开/关闭的,您要么获得批准,要么得不到批准。授权与组成员身份有关。
属性:
你的主目录在哪里?你叫什么名字?
最后两项由 nss 后端处理。如果您查看 /etc/nsswitch.conf,您会发现它使用标准后端将系统调用转换为 ldap 查找。
如果您不想使用 LDAP,则需要使用支持您要使用的数据库的不同版本的 nss 插件库。其中一些是存在的,但您正在重新发明一个相当大的轮子。
就 puppet 而言,它使用 ssl 证书进行客户端身份验证。与 ssh 的方式有些类似。
答案3
您的傀儡问题实际上应该是一个不同的问题,因为它实际上并没有关联。
我仔细考虑了一下您的要求,发现实现所需内容的一种方法是使用 puppet 模块中的数据库查询。由于 puppet 语言是其自身的东西,而不是通用语言的扩展,因此您可能需要编写/找到一个 puppet 资源提供程序,该提供程序将返回用户名列表,然后让 puppet 管理机器上的 /etc/passwd 等文件。
在 chef 中实现这一点会更简单。我确信在 puppet 中是可以的。从数据库条目更新 LDAP 服务器也是可能的(在我看来这是最佳实践)。这实际上取决于您运营的规模以及您希望更改传播的速度。