小型实验室如何同步凭证? (LDAP 的非常精简的替代品)

小型实验室如何同步凭证? (LDAP 的非常精简的替代品)

我们运行一个拥有 20 个 Linux 系统(RaspberryPI、NAS、台式电脑)的小型实验室,与 4 名科学家一起进行研究,他们都需要 sudo 权限。

我们信任所有 4 个用户,因为他们拥有 sudo 权限和物理访问权限。实验室网络是本地网络,无法通过互联网访问。

现在我们想要同步凭据。如果一个用户更改了密码,则不应在其他 19 个系统上手动更改密码。

我想避免像 LDAP 这样的复杂解决方案。我想到的第一个想法是将 NAS 上的凭证作为单一来源进行维护,并通过 scp 将它们复制到 systemd 模块中的客户端。

但我想我正在重新发明轮子,并且已经准备好使用软件包/解决方案,而我只是尝试了错误的搜索词。

对于这种场景,通常使用哪种包或解决方案?

答案1

现在我们想要同步凭据。如果一个用户更改了密码,则不应在其他 19 个系统上手动更改密码。

LDAP用于存储用户属性,例如UID/GID或主目录;它是并不真地存储凭据的第一件事(当然它可以做到这一点)。

我的建议是使用例如 MIT 的 krb5-kdc 设置 Kerberos。

  1. 在 Debian 上安装krb5-user, krb5-kdc, 。krb5-admin-server
  2. 选择域名 (最好对应真实的 DNS 域名,但不严格要求;但总是大写)。
  3. 执行kdb5_util create -s初始化 KDC 数据库。 (这-s使得它将主密钥存储在数据库旁边的文件中。)
  4. 运行kadmin.local开始创建条目:
    • 添加用户帐户:addprinc fred
    • 添加服务器:addprinc -nokey host/fredpc.example.com
    • 提取主机的密钥表:ktadd -k /tmp/fredpc.keytab host/fredpc.example.com
    • (对于主机,后面的部分host/应与主机本身认为其 FQDN 相对应,即hostname -f该服务器上的报告内容。)
  5. 启动krb5-kdc.service并确保服务器的防火墙允许入站端口 88(TCPUDP)用于 Kerberos 请求。

(请注意,您不会通过 Kerberos 定义 UID 或登录 shell – 这可以保留在常规 /etc/passwd 中,并且不需要在主机之间保持相同。无论帐户来源如何,Kerberos 都可以用于身份验证。)

在所有服务器上:

  1. krb5-user在Debian 上安装libpam-krb5
  2. 出现提示时,输入领域名称和 KDC 主机名。 (后者可以通过 DNS SRV 记录进行配置,以减少每个主机的步骤。这两个选项都位于 /etc/krb5.conf 中,因此可以直接通过它进行部署scp。)
  3. 将主机的密钥表复制到/etc/krb5.keytab(模式 0600)。

这并不完全是简单的,但是(恕我直言)仍然比 LDAP 简单。

选项:

  • 如果您不想搞乱 PAM,OpenSSH 实际上具有针对 Kerberos 验证密码的内置支持;这是KerberosAuthenticationsshd_config 中的选项。它具有与 PAM 模块相同的要求(krb5.conf、krb5.keytab)。但是,PAM 还通过“passwd”处理密码更改,因此如果您不使用它,则需要教用户运行kpasswd

  • 作为奖励,Kerberos 将为您提供 SSO——从一台主机到另一台主机的无密码 SSH。这是 sshd_config 中的另一个选项GSSAPIAuthentication。它使用通过 pam_krb5 获取的票证或通过 手动获取的票证kinit。 (GNOME 和 Windows 可以自动处理这个问题,使其像 SSH 密钥一样透明。)

相关内容