У нас есть собственный модуль PAM, который отлично работает на наших машинах разработки i386, но когда мы пытаемся использовать его в продакшене на наших серверах x64 с vsftpd, он терпит неудачу. Модуль 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
(n.b У нас огромное количество свободной памяти)
системный журнал:
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 работает отлично.