我们运行一个拥有 20 个 Linux 系统(RaspberryPI、NAS、台式电脑)的小型实验室,与 4 名科学家一起进行研究,他们都需要 sudo 权限。
我们信任所有 4 个用户,因为他们拥有 sudo 权限和物理访问权限。实验室网络是本地网络,无法通过互联网访问。
现在我们想要同步凭据。如果一个用户更改了密码,则不应在其他 19 个系统上手动更改密码。
我想避免像 LDAP 这样的复杂解决方案。我想到的第一个想法是将 NAS 上的凭证作为单一来源进行维护,并通过 scp 将它们复制到 systemd 模块中的客户端。
但我想我正在重新发明轮子,并且已经准备好使用软件包/解决方案,而我只是尝试了错误的搜索词。
对于这种场景,通常使用哪种包或解决方案?
答案1
现在我们想要同步凭据。如果一个用户更改了密码,则不应在其他 19 个系统上手动更改密码。
LDAP用于存储用户属性,例如UID/GID或主目录;它是并不真地存储凭据的第一件事(当然它可以做到这一点)。
我的建议是使用例如 MIT 的 krb5-kdc 设置 Kerberos。
- 在 Debian 上安装
krb5-user
,krb5-kdc
, 。krb5-admin-server
- 选择域名 (最好对应真实的 DNS 域名,但不严格要求;但总是大写)。
- 执行
kdb5_util create -s
初始化 KDC 数据库。 (这-s
使得它将主密钥存储在数据库旁边的文件中。) - 运行
kadmin.local
开始创建条目:- 添加用户帐户:
addprinc fred
- 添加服务器:
addprinc -nokey host/fredpc.example.com
- 提取主机的密钥表:
ktadd -k /tmp/fredpc.keytab host/fredpc.example.com
- (对于主机,后面的部分
host/
应与主机本身认为其 FQDN 相对应,即hostname -f
该服务器上的报告内容。)
- 添加用户帐户:
- 启动
krb5-kdc.service
并确保服务器的防火墙允许入站端口 88(TCP和UDP)用于 Kerberos 请求。
(请注意,您不会通过 Kerberos 定义 UID 或登录 shell – 这可以保留在常规 /etc/passwd 中,并且不需要在主机之间保持相同。无论帐户来源如何,Kerberos 都可以用于身份验证。)
在所有服务器上:
krb5-user
在Debian 上安装libpam-krb5
。- 出现提示时,输入领域名称和 KDC 主机名。 (后者可以通过 DNS SRV 记录进行配置,以减少每个主机的步骤。这两个选项都位于 /etc/krb5.conf 中,因此可以直接通过它进行部署
scp
。) - 将主机的密钥表复制到
/etc/krb5.keytab
(模式 0600)。
这并不完全是简单的,但是(恕我直言)仍然比 LDAP 简单。
选项:
如果您不想搞乱 PAM,OpenSSH 实际上具有针对 Kerberos 验证密码的内置支持;这是
KerberosAuthentication
sshd_config 中的选项。它具有与 PAM 模块相同的要求(krb5.conf、krb5.keytab)。但是,PAM 还通过“passwd”处理密码更改,因此如果您不使用它,则需要教用户运行kpasswd
。作为奖励,Kerberos 将为您提供 SSO——从一台主机到另一台主机的无密码 SSH。这是 sshd_config 中的另一个选项
GSSAPIAuthentication
。它使用通过 pam_krb5 获取的票证或通过 手动获取的票证kinit
。 (GNOME 和 Windows 可以自动处理这个问题,使其像 SSH 密钥一样透明。)