Linux
PAM 模組在 i386 上工作正常,但在 vsftpd 中使用時在 x64 上失敗
我們有一個定制的 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
(nb 我們有大量的可用記憶體)
系統日誌:
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
我們不確定是什麼導致了這個錯誤。有誰知道如何解決這個問題或對我們如何進一步調試有任何建議?
就在我發布這個之後,我設法解決了它。事實證明,vsftpd 限制了可用的虛擬記憶體量,
setrlimit(RLIMIT_AS, limit)
我猜這在 32 位上很好,但在 64 位上已經耗盡了這個。我沒有費心找到發生此問題的確切限制,但重新編譯 vsftpd 並VSFTP_AS_LIMIT
在 vsftpd 中更改defs.h
為三倍限制已消除了問題,並且 PAM 模組執行良好。