A.2. 使用 SSSD 和 sudo 调试日志进行故障排除
A.2.1. SSSD 和 sudo 调试日志记录
通过 debug 日志功能,您可以记录有关 SSSD 和 sudo 的额外信息。
sudo 调试日志文件
启用 sudo 调试:
- 将以下行添加到
/etc/sudo.conf
中:Debug sudo /var/log/sudo_debug.log all@debug Debug sudoers.so /var/log/sudo_debug.log all@debug
- 以您要调试的用户身份运行 sudo 命令。
/var/log/sudo_debug.log
文件会自动创建,并提供回答问题的详细信息,例如:
- 运行 sudo 命令时,用户和环境有哪些信息?
sudo[22259] settings: debug_flags=all@debug sudo[22259] settings: run_shell=true sudo[22259] settings: progname=sudo sudo[22259] settings: network_addrs=192.0.2.1/255.255.255.0 fe80::250:56ff:feb9:7d6/ffff:ffff:ffff:ffff:: sudo[22259] user_info: user=user_name sudo[22259] user_info: pid=22259 sudo[22259] user_info: ppid=22172 sudo[22259] user_info: pgid=22259 sudo[22259] user_info: tcpgid=22259 sudo[22259] user_info: sid=22172 sudo[22259] user_info: uid=10000 sudo[22259] user_info: euid=0 sudo[22259] user_info: gid=554801393 sudo[22259] user_info: egid=554801393 sudo[22259] user_info: groups=498,6004,6005,7001,106501,554800513,554801107,554801108,554801393,554801503,554802131,554802244,554807670 sudo[22259] user_info: cwd=/ sudo[22259] user_info: tty=/dev/pts/1 sudo[22259] user_info: host=client sudo[22259] user_info: lines=31 sudo[22259] user_info: cols=237
- 哪个数据源用于获取 sudo 规则?
sudo[22259] <- sudo_parseln @ ./fileops.c:178 := sudoers: files sss
- SSSD 插件以以下行开头:
sudo[22259] <- sudo_sss_open @ ./sssd.c:305 := 0
- SSSD 返回了多少条规则?
sudo[22259] Received 3 rule(s)
- 规则是否匹配?
sudo[22259] sssd/ldap sudoHost 'ALL' ... MATCH! sudo[22259] <- user_in_group @ ./pwutil.c:1010 := false
SSSD 调试日志文件
启用 SSSD 调试:
- 将
debug_level
选项添加到/etc/sssd
部分:/sssd.conf
文件的[sudo]
和 [domain/domain_name][domain/domain_name] debug_level = 0x3ff0 ... [sudo] debug_level = 0x3ff0
- 重启 SSSD:
# systemctl restart sssd
- 运行 sudo 命令,将调试信息写入日志文件。
创建以下日志文件:
- 域日志文件:
/var/log/sssd/sssd_domain_name.log
- 这个日志文件可帮助您回答如下问题:
- SSSD 返回了多少条规则?
[sdap_sudo_refresh_load_done] (0x0400): Received 4-rules rules
- SSSD 从服务器下载了哪些 sudo 规则?
[sssd[be[LDAP.PB]]] [sysdb_save_sudorule] (0x0400): Adding sudo rule demo-name
- 匹配规则是否存储在缓存中?
[sdap_sudo_refresh_load_done] (0x0400): Sudoers is successfully stored in cache
- 哪个过滤器用于从服务器下载规则?
[sdap_get_generic_ext_step] (0x0400): calling ldap_search_ext with [(&(objectClass=sudoRole)(|(!(sudoHost=*))(sudoHost=ALL)(sudoHost=client.example.com)(sudoHost=client)(sudoHost=192.0.2.1)(sudoHost=192.0.2.0/24)(sudoHost=2620:52:0:224e:21a:4aff:fe23:1394)(sudoHost=2620:52:0:224e::/64)(sudoHost=fe80::21a:4aff:fe23:1394)(sudoHost=fe80::/64)(sudoHost=+*)(|(sudoHost=*\\*)(sudoHost=*?*)(sudoHost=*\2A*)(sudoHost=*[*]*))))][dc=example,dc=com]
使用此过滤器查找 IdM 数据库中的规则:# ldapsearch -x -D "cn=Directory Manager" -W -H ldap://server.example.com -b dc=example,dc=com '(&(objectClass=sudoRole)...)'
- sudo 响应器日志文件:
/var/log/sssd/sssd_sudo.log
- 这个日志文件可帮助您回答如下问题:
- SSSD 返回了多少条规则?
[sssd[sudo]] [sudosrv_get_sudorules_from_cache] (0x0400): Returning 4-rules rules for [user@idm.example.com]
- 哪个过滤器用于搜索 SSSD 的缓存?
[sudosrv_get_sudorules_query_cache] (0x0200): Searching sysdb with [(&(objectClass=sudoRule)(|(sudoUser=ALL)(sudoUser=user)(sudoUser=#10001)(sudoUser=%group-1)(sudoUser=%user)(sudoUser=+*)))]
- 如何查找从 SSSD 缓存返回的规则?使用以下过滤器查找规则:
# ldbsearch -H /var/lib/sss/db/cache_domain_name.ldb -b cn=sysdb '(&(objectClass=sudoRule)...)'
注意ldbsearch
工具包含在 ldb-tools 软件包中。