32位IBM Informix SE在64位RHEL 8.7结合SSSD+AD时的认证错误问题排查及求助
我目前碰到了一个头疼的问题,环境是64位RedHat 8.7 Linux上运行32位IBM Informix SE DBMS,具体情况如下:
正常使用场景
本地定义的用户(比如UID为505的billd)使用完全正常,执行命令:
dbaccess stores7 sel_order
可以顺利从Informix自带的演示数据库stores7中获取正确结果。
异常报错场景
系统通过SSSD集成了微软Active Directory(AD)服务,AD用户(比如用户名willaim.donaldson@researchgroup.example.com,UID为507735929)登录后,执行同样的dbaccess命令,会触发Informix错误:
25590 - "authentication error"
官方对该错误的说明是:
This error indicates that an invalid user ID or password was used to connect to the database server. Redefine a valid user ID and password.
自我排查思路
我用strings工具检查了dbaccess二进制文件,发现它调用了getpwuid和getpwnam这两个用户信息查询函数,因此怀疑问题可能出在以下几个方面:
- UID位数兼容问题:本地用户的UID(505)可以放进16位整数,但AD用户的UID(507735929)需要32位整数,会不会32位的Informix程序对UID的处理存在位数限制?
- 用户名长度限制:AD用户名长度达到32字符,会不会超过了Informix预期的用户名长度上限(比如10字符以内)?
- 本地用户条目缺失:AD用户的信息是通过SSSD动态获取的,
/etc/passwd中没有对应的静态条目,会不会Informix依赖本地passwd文件的记录? - 32位SSSD依赖缺失:系统是64位的,可能缺少让32位程序正常调用SSSD服务的32位依赖库?
- 其他未想到的系统兼容问题
最新排查进展
我编译了一个简单的用户信息查询程序(核心逻辑是通过geteuid()获取当前用户UID,再调用getpwuid()查询用户信息),分别生成了32位(编译命令:gcc -m32)和64位版本:
- 本地用户测试:两个版本都能正常返回用户信息
- AD用户测试:64位版本正常,但32位版本中
getpwuid(uid)返回空结果
这应该就是问题的根源了,但我不确定是否遗漏了某些系统配置或依赖包,想请教各位:这个问题是否有解?有没有可行的修复方向或排查建议?
备注:内容来源于stack exchange,提问作者RedGrittyBrick

