使用 Sudo 时 SSSD/NSS 速度缓慢

使用 Sudo 时 SSSD/NSS 速度缓慢

我有一台运行 OpenLDAP 的服务器,我遇到的问题与我的客户端有关。我的客户端正在运行带有 NSS 的 SSSD。

首次启动时,我没有遇到任何问题,并且 sudo 命令可以正常发出。

我在尝试安装或修改软件包后开始遇到问题。有时aurman会超时,有时会立即下载。当它确实通过下载时,它会在Creating system user accounts...Creating temporary files...或上冻结Arming ConditionNeedsUpdate...

sudo journalctl --follow执行结果如下aurman -S accountsservice

Jul 26 16:39:52 test sudo[1400]: REDACTED_USER : problem with defaults entries ; TTY=pts/2 ; PWD=/home/REDACTED_USER ; USER=root ;
Jul 26 16:39:52 test sudo[1399]: REDACTED_USER : TTY=pts/2 ; PWD=/home/REDACTED_USER ; USER=root ; COMMAND=validate
Jul 26 16:39:52 test sudo[1400]: REDACTED_USER : TTY=pts/2 ; PWD=/home/REDACTED_USER ; USER=root ; COMMAND=/usr/bin/pacman --sync --asdeps -- lightdm
Jul 26 16:39:52 test sudo[1400]: pam_unix(sudo:session): session opened for user root by REDACTED_USER(uid=0)
Jul 26 16:39:53 test systemd[1]: Reloading.
Jul 26 16:39:53 test systemd-fstab-generator[1437]: x-systemd.device-timeout ignored for REDACTED_HOSTNAME:/srv/nfs/home/
Jul 26 16:39:53 test sudo[1400]: pam_unix(sudo:session): session closed for user root
Jul 26 16:39:53 test sudo[1449]: REDACTED_USER : problem with defaults entries ; TTY=pts/2 ; PWD=/home/REDACTED_USER ; USER=root ;
Jul 26 16:40:18 test systemd[1]: Failed to get initial list of names: Connection timed out
Jul 26 16:40:25 test dbus-daemon[374]: Unknown username "systemd-timesync" in message bus configuration file
Jul 26 16:40:45 test dbus-daemon[374]: [system] Reloaded configuration
Jul 26 16:41:10 test dbus-daemon[374]: [system] Failed to activate service 'org.freedesktop.systemd1': timed out (service_start_timeout=25000ms)
Jul 26 16:41:10 test sudo[1449]: REDACTED_USER : TTY=pts/2 ; PWD=/home/REDACTED_USER ; USER=root ; COMMAND=/usr/bin/pacman -D --asexplicit lightdm
Jul 26 16:41:10 test sudo[1449]: pam_unix(sudo:session): session opened for user root by REDACTED_USER(uid=0)
Jul 26 16:41:10 test sudo[1449]: pam_unix(sudo:session): session closed for user root

sudo journalctl --follow以下是运行的结果sudo -i

Jul 26 17:02:00 test sudo[1645]: REDACTED_USER : problem with defaults entries ; TTY=pts/0 ; PWD=/home/REDACTED_USER ; USER=root ;
Jul 26 17:02:25 test dbus-daemon[374]: [system] Failed to activate service 'org.freedesktop.systemd1': timed out (service_start_timeout=25000ms)
Jul 26 17:02:28 test sudo[1645]: pam_sss(sudo:auth): authentication success; logname=REDACTED_USER uid=8102 euid=0 tty=/dev/pts/0 ruser=REDACTED_USER rhost= user=REDACTED_USER
Jul 26 17:02:28 test sudo[1645]: REDACTED_USER : TTY=pts/0 ; PWD=/home/REDACTED_USER ; USER=root ; COMMAND=/bin/bash
Jul 26 17:02:28 test sudo[1645]: pam_unix(sudo:session): session opened for user root by REDACTED_USER(uid=0)

这是我的 sssd.conf 文件:

[sssd]
config_file_version = 2
services = nss, pam
domains = LDAP

[domain/LDAP]
cache_credentials = true
enumerate = true

id_provider = ldap
auth_provider = ldap
chpass_provider = ldap

ldap_uri = ldaps://REDACTED_HOSTNAME
ldap_search_base = dc=REDACTED,dc=HOST,dc=NAME
ldap_id_use_start_tls = true
ldap_tls_reqcert = demand
ldap_tls_cacert = /etc/openldap/certs/slapdcert.pem
ldap_chpass_uri = ldaps://REDACTED_HOSTNAME

这是我的 nsswitch.conf 文件(注意:我在 sudoers、服务和 netgroup 上使用 sss 时遇到了同样的问题):

passwd: files sss mymachines systemd
group: files sss mymachines systemd
shadow: files sss
sudoers: files sss

publickey: files

hosts: files mymachines myhostname resolve [!UNAVAIL=return] dns
networks: files

protocols: files
services: files sss
ethers: files
rpc: files

netgroup: files sss

下面是执行的结果time sudo strace -r -o trace_5.log sudo echo hi,每次我在调试时都是在不同的时间出现的(重申一下,每行都是一个不同的文件,并且每次sudo调用都会有 25 秒的延迟):

25.007024 recvmsg(6, {msg_name=NULL, msg_namelen=0, msg_iov=[{iov_base="l\3\1\1e\0\0\0\3\0\0\0m\0\0\0\6\1s\0\5\0\0\0", iov_len=24}], msg_iovlen=1, msg_controllen=0, msg_flags=MSG_CMSG_CLOEXEC}, MSG_DONTWAIT|MSG_CMSG_CLOEXEC) = 24
25.025124 openat(AT_FDCWD, "/usr/share/locale/en_US.UTF-8/LC_MESSAGES/libc.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
25.025143 openat(AT_FDCWD, "/usr/share/locale/en_US.UTF-8/LC_MESSAGES/libc.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
25.019033 recvmsg(6, {msg_name=NULL, msg_namelen=0, msg_iov=[{iov_base="l\3\1\1e\0\0\0\3\0\0\0m\0\0\0\6\1s\0\5\0\0\0", iov_len=24}], msg_iovlen=1, msg_controllen=0, msg_flags=MSG_CMSG_CLOEXEC}, MSG_DONTWAIT|MSG_CMSG_CLOEXEC) = 24
25.025170 rt_sigprocmask(SIG_SETMASK, [], NULL, 8) = 0

这两次openat调用都是在 /etc/lcoale.conf 存在时进行的,当我删除它时,它停止了。最常见的问题是recvmsg多次调用。但getent hosts一切顺利。然而,getent passwd需要大约 25 秒,并且会出现以下内容sudo journctl --follow

Jul 26 17:11:47 test dbus-daemon[374]: [system] Failed to activate service 'org.freedesktop.systemd1': timed out (service_start_timeout=25000ms)

任何帮助将不胜感激...

[编辑]

当我跑步时strace -r -o trace_8 getent passwd我得到:

25.025198 rt_sigprocmask(SIG_SETMASK, [], NULL, 8) = 0

答案1

您的 nsswitch.conf “passwd”和“group”模块的顺序错误:sss必须放在之后systemd

当 systemd 启动服务时,它需要将其用户名(如果有)解析为 UID。当 dbus-daemon 加载其配置时,它还需要将安全策略中找到的用户名解析为 UID。这与所有其他用户帐户一样,通过 nsswitch 进行。

通常,所有系统服务的这些映射都可以在 /etc/passwd(nsswitch“文件”模块)中找到,但也许是由于错误的决定(现在已在 Git 中恢复),一些 systemd 服务不会在那里创建他们的用户账户——而是通过 nsswitch“systemd”模块请求动态 UID。

在您当前的配置中,基于网络的密码模块 (sss) 列在“systemd”模块之前。因此,每当 systemd 或 dbus-daemon 尝试查找 UID 时systemd-timesyncd,它们最终都会通过 SSSD。但 SSSD 已排队等待启动systemd-timesyncd,这会导致死锁(如果你想的话,会出现循环依赖)。

虽然我怀疑这不是导致你问题的唯一原因。但这几乎肯定是A原因...

相关内容