我们的客户端(Ubuntu 14.04)可以使用 LDAP 登录。一旦没有网络,他们就无法使用 LDAP 登录。
有没有办法缓存这些密码和用户名,以便笔记本电脑在没有 LDAP 连接的情况下仍然可以工作?
答案1
Debian 和 Ubuntu 提供了 libpam-ccreds 包,用于缓存网络登录凭据。从包描述来看:
此软件包为 Linux 工作站提供了在网络不可用时使用企业身份进行本地身份验证的方法。与 nss_updatedb 实用程序结合使用,它提供了一种断开连接使用网络目录的机制。它们旨在与 libpam-ldap 和 libnss-ldap 配合使用。
答案2
答案3
我的 OpenLDAP 是一个没有 SSL 或 TLS 的基本设置,我认为这就是问题所在。
我通过以下方式下载了 OpenLDAP 设备http://www.turnkeylinux.org/openldap并在几分钟内完成设置。此设备具有基于自签名证书的 SSL 和 TLS。
现在已配置 TLS 并拥有自签名证书,在 sssd.conf 文件中必须使用选项 ldap_tls_reqcert = never。
答案4
在 Linux 上缓存凭证主要使用两个程序ssd 的和ccreds正如其他答案中提到的。我试过了sssd
,但它安装了大量我不需要的额外共享库和依赖包。所以我决定使用轻量级的ccreds
。但我找不到太多详细的使用说明,大多只有使用这个程序的一般提示。所以我将详细说明@AndrewSchulman与社区分享我是如何管理它的。我使用 Debian Buster 安装并有一个工作在线 Kerberos/OpenLDAP 认证/授权系统。我在登录时获得了有效的 Kerberos 票证kinit
。
首先安装所需的程序:
~$ sudo apt install libnss-db nss-updatedb libpam-ccreds
我sudo pam-auth-update
设置了选项
[*] Ccreds credential caching - password saving
[*] Ccreds credential caching - password checking
我/etc/nsswitch.conf
必须修改为:
passwd: files ldap [NOTFOUND=return] db
group: files ldap [NOTFOUND=return] db
现在我可以检查缓存数据库是否已创建:
~$ sudo nss_updatedb ldap
passwd... done.
group... done.
~$ ls -l /var/lib/misc/*.db
-rw-r--r-- 1 root root 8192 Feb 26 12:46 /var/lib/misc/group.db
-rw-r--r-- 1 root root 8192 Feb 26 12:46 /var/lib/misc/passwd.db
~$ su -l ingo
ingo: ~$ logout
~$ ls -l /var/cache/.security.db
-rw------- 1 root ingo 8192 Feb 26 12:55 /var/cache/.security.db
~$ sudo cc_dump
Credential Type User Service Cached Credentials
----------------------------------------------------------------------------------
Salted SHA1 ingo any c2da4cd14bd00bd7ecd72ab15e565e9149b46fd5
不,那不是我的 SHA1 凭证 ;-) 因为我在命令行上使用明文密码,所以我不会将其缓存在 bash 历史记录中。
~$ history -a
~$ sudo cc_test -validate any ingo <password>
pam_cc_validate_credentials: Success
~$ history -c
~$ history -r
您应该找到仅在 LDAP 目录中定义的用户和组,并且即使您处于离线状态也应该能够登录:
~$ sudo ip link set eth0 down
~$ getent passwd|group
~$ su -l ingo
ingo: ~$ logout
~$ sudo ip link set if up
安装后我发现了一些延迟,但它们在重新启动后就消失了。