我在公司笔记本电脑上安装了 CentOS 7,并将其配置为向公司 AD 服务器进行身份验证,如下所示:
安装包:
yum install sssd realmd oddjob oddjob-mkhomedir adcli samba-common samba-common-tools krb5-workstation openldap-clients policycoreutils-python
将 AD 服务器添加到
/etc/hosts
.加入领域:
realm join --user=tech adserver.example.com realm permit -g activedirectorygroup@domain
更改
use_fully_qualified_names
为False
和fallback_homedir
中/home/%u
的/etc/sssd/sssd.conf
。重新启动守护进程:
systemctl restart sssd && systemctl daemon-reload
设置 ITGROUP 以便能够使用 sudo:
echo "%ITGROUP ALL=(ALL) ALL" > /etc/sudoers.d/ITGROUP
一切都运转良好。 ...直到我更改了 Windows 10 PC 上的密码。事实上,CentOS 盒子让我可以,但只是用老的密码。我已经做了很多谷歌搜索并尝试了很多东西(例如,sss_cache -E
)kdestroy -A
,但我似乎无法刷新缓存,所以我可以使用我的新的密码。
那么,如何在 CentOS 7 上清除用户缓存的 Active Directory 密码?有没有办法让“普通”用户自己做这件事(如果我们想将其推广到其他系统)?
更新:
我尝试了一些建议,但笔记本电脑不会忘记旧的凭据。我最终从领域中删除了电脑并重新添加它。我确实将其添加到我的 sssd.conf 中:
[sssd]
...
account_cache_expiration = 2
cached_auth_timeout = 3600
refresh_expired_interval = 4050
[pam]
reconnection_retries = 3
offline_credentials_expiration = 2
登录似乎正在缓存 AD 内容,但Authenticated with cached credentials, your cached password will expire at:
现在当我登录或 sudo 时它会告诉我。我希望下次我的密码过期并更改它时,该系统能够识别它。仅供参考,我的整个配置是:
[sssd]
domains = adserver.example.com
config_file_version = 2
services = nss, pam
[domain/adserver.example.com]
ad_domain = adserver.example.com
krb5_realm = adserver.example.com
realmd_tags = manages-system joined-with-samba
cache_credentials = True
id_provider = ad
krb5_store_password_if_offline = True
default_shell = /bin/bash
ldap_id_mapping = True
use_fully_qualified_names = False
fallback_homedir = /home/%u
access_provider = simple
simple_allow_groups = [email protected]
account_cache_expiration = 2
cached_auth_timeout = 3600
refresh_expired_interval = 4050
[pam]
reconnection_retries = 3
offline_credentials_expiration = 2
更新#2:
我已经使用这个配置有一段时间了。我已经增加了account_cache_expiration
和offline_credentials_expiration
from2
到4
,但它运行得很好,我们已经开始在我们的服务器上使用这个设置。
答案1
那么,如何在 CentOS 7 上清除用户缓存的 Active Directory 密码?
通常sss_cache
应该是告诉 sssd 重新检索它可能已经缓存的对象的正确方法。但如果无法从 AD 检索到任何内容,sssd 确实会再次使用缓存的对象。
您应该始终能够通过设置来重置缓存的凭据
[domain/your-domain.tld]
...
cache_credentials = False
在 /etc/sssd/sssd.conf 中,重新启动 sssd 服务并重新对您的用户进行身份验证。这样您应该能够确定 SSSD/AD 上的身份验证是否有效。要检查完整的设置是否适用于当前设置(不使用任何缓存),实际上总是一件好事删除所有缓存。请参阅底部的信息,了解如何最有效地做到这一点。
有没有办法让“普通”用户自己做这件事(如果我们想将其推广到其他系统)?
我不知道如何安全地实施这一点。恕我直言,这不是你想要的。但无论如何,这应该是没有必要的。 SSSD 应始终根据某些条件重新评估其缓存的凭据。
大多数时候,最好设置以下内容以强制几天后重新评估,并实际注意到环境是否出现问题
[pam]
...
offline_credentials_expiration
默认offline_credentials_expiration
设置为0
(无限制)
大多数时候,当我想确定没有更多缓存在使用时,我会执行以下操作
systemctl stop sssd
rm /var/lib/sssd/db/*
systemctl start sssd
这可能会导致 sssd 设置无法正常工作(但前提是其设置出现问题,因为 sssd 保存的所有数据都可以从 AD 中重新检索)。