我们有一个自定义的PAM模块,可以在我们的i386开发机器上正常工作,但是当我们在使用vsftpd的x64生产服务器上尝试使用它时,它将会失败。 PAM模块已被重新编译为x64。
auth.log:
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
我们不确定是什么导致了这个错误。 有谁知道如何解决这个问题,或者对我们如何进一步debugging有任何build议?
就在我发布这个之后,我设法解决了这个问题。 事实certificate,vsftpd限制使用setrlimit(RLIMIT_AS, limit)可用虚拟内存的数量我想这在32位上是好的,但它是在64位耗尽这个。 我一直没有find一个确切的限制发生这个问题,但重新编译vsftpd和VSFTP_AS_LIMIT在vsftpd的defs.h三倍的限制已经消除了这个问题,PAM模块运作良好。