我们有一个自定义 PAM 模块,它在我们的 i386 开发机器上运行良好,但当我们尝试在 x64 生产服务器上使用 vsftpd 进行生产时,它失败了。PAM 模块已针对 x64 重新编译。
身份验证日志:
Nov 12 18:29:06 [removed] vsftpd: PAM unable to dlopen(/lib/x86_64-linux-gnu/security/pam_databowl.so): libcrypt.so.1: failed to map segment from shared object: Cannot allocate memory
(注:我们有大量的可用内存)
系统日志:
Nov 12 18:29:06 [removed] kernel: [13831373.215161] vsftpd[6955]: segfault at 968 ip 00007fc50dabc8f0 sp 00007fff755e1a30 error 4 in libpthread-2.15.so[7fc50dab6000+18000]
但是,使用该pamtester
工具可以正常工作:
[removed]:~/pamtester-0.1.2/src$ ./pamtester vsftpd.databowl <removed> authenticate
Password:
pamtester: successfully authenticated
我们不确定是什么导致了这个错误。有谁知道如何解决这个问题,或者对我们如何进一步调试它有什么建议吗?
答案1
在我发布此信息后,我设法解决了这个问题。原来 vsftpd 限制了可用的虚拟内存量,setrlimit(RLIMIT_AS, limit)
我猜这在 32 位上没问题,但在 64 位上就耗尽了。我没有费心去寻找发生此问题的确切限制,但重新编译 vsftpd 并将VSFTP_AS_LIMIT
vsftpd 中的defs.h
限制改为三倍,问题就解决了,PAM 模块运行良好。