Не удается загрузить мой модуль PAM – как диагностировать?

Я написал модуль службы PAM и добавил его в lightdm , отредактировав /etc/pam.d/lightdm .

Но lightdm жалуется (в /var/log/auth.log на Ubuntu 14.04):

 Sep 9 14:16:48 Ubuntu-build lightdm: PAM unable to dlopen(pam_my.so): /lib/security/pam_my.so: cannot open shared object file: No such file or directory 

Когда я смотрю на то, что происходит через strace() , вопреки сообщению журнала, он находит и открывает мой модуль PAM и начинает его проверять, но затем он отказывается и продолжает искать его в других каталогах, в конце концов жалуясь, t найти его. Вот несколько примеров:

 12230 open("/lib/x86_64-linux-gnu/security/pam_my.so", O_RDONLY|O_CLOEXEC) = 4 12230 read(4, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0000\f\0\0\0\0\0\0"..., 832) = 832 12230 fstat(4, {st_mode=S_IFREG|0644, st_size=17728, ...}) = 0 12230 mmap(NULL, 2105544, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 4, 0) = 0x7fe087ebe000 12230 mprotect(0x7fe087ec0000, 2093056, PROT_NONE) = 0 12230 mmap(0x7fe0880bf000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 4, 0x1000) = 0x7fe0880bf000 12230 close(4) = 0 

В рабочем случае (например, pam_unix.so ) вместо close() он продолжается с другим mmap() а затем продолжается. Я просмотрел все журналы в /var/log/* и не могу найти больше информации, чтобы сообщить мне, что PAM недовольны. Я даже не знаю, на каком источнике я мог смотреть, чтобы диагностировать, что происходит не так. Модуль выглядит правильно. Я прочитал Module Writers Guide и думаю, что соблюдаю все правильные правила. Любые подсказки о том, как начать диагностировать это?

Я также пробовал прикоснуться к /etc/pam_debug но не предоставлял никаких полезных сообщений журнала.

One Solution collect form web for “Не удается загрузить мой модуль PAM – как диагностировать?”

Задача решена. Для справки, вот как я поставил диагноз:

  1. Загрузили источники Linux-PAM с https://git.fedorahosted.org/cgit/linux-pam.git
  2. Заменил мой источник содержимым pam_permit.c (очень простой модуль, который всегда преуспевает без взаимодействия с пользователем)
  3. Проанализировали сборку исходного источника, чтобы определить любую разницу.

Я обнаружил, что когда я добавил флаг компоновщика --no-undefined и явно связан в библиотеках pam и dl , у меня был неопределенный символ ( strlcpy , который существует только в BSD Unix ), и это мешало загрузке библиотеки.

  • Что такое pam_unix2 / почему он не существует в некоторых дистрибутивах?
  • аутентификация pam ldap - AWS EC2 ami (Amazon's ami)
  • Использовать несколько методов входа в систему PAM одновременно?
  • С pam_script, как мне передать PAM_AUTHTOK и PAM_USER во всех случаях?
  • Linux и Unix - лучшая ОС в мире.