Não é possível carregar meu módulo PAM - como diagnosticar?

1

Eu escrevi um módulo de serviço PAM e o adicionei em lightdm editando /etc/pam.d/lightdm .

Mas lightdm reclama (em /var/log/auth.log no 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

Quando eu olho para o que está acontecendo via strace() , ao contrário da mensagem de log, é encontrando e abrindo meu módulo PAM , e começando a inspecioná-lo, mas ele desiste e continua procurando por ele em outros diretórios, reclamando que não conseguiu encontrá-lo. Aqui está um exemplo de saída:

12230 open("/lib/x86_64-linux-gnu/security/pam_my.so", O_RDONLY|O_CLOEXEC) = 4
12230 read(4, "7ELF
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
12230 open("/lib/x86_64-linux-gnu/security/pam_my.so", O_RDONLY|O_CLOEXEC) = 4
12230 read(4, "7ELF%pre%%pre%%pre%%pre%%pre%%pre%%pre%%pre%%pre%%pre%>%pre%%pre%%pre%%pre%00\f%pre%%pre%%pre%%pre%%pre%%pre%"..., 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
%pre%%pre%%pre%%pre%%pre%%pre%%pre%%pre%>%pre%%pre%%pre%%pre%00\f%pre%%pre%%pre%%pre%%pre%%pre%"..., 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

Em um caso de trabalho (por exemplo, pam_unix.so ) em vez de close() , ele continua com outro mmap() e, em seguida, continua. Eu olhei em todos os logs em /var/log/* e não consigo encontrar mais informações para me dizer com o que o PAM está insatisfeito. Eu nem sei a fonte que eu poderia olhar para diagnosticar o que está errado. O módulo parece estar construído corretamente. Eu li o Module Writers Guide e acho que estou seguindo todas as regras corretas. Alguma pista de como proceder para diagnosticar isso?

Eu também tentei tocar em /etc/pam_debug , mas isso não forneceu nenhuma mensagem de log útil.

    
por BobDoolittle 09.09.2014 / 20:46

1 resposta

0

Problema resolvido. Para o registro, aqui está como eu diagnostiquei:

  1. Baixou as fontes do Linux-PAM do link
  2. Substitui minha origem pelo conteúdo de pam_permit.c (um módulo muito simples que sempre é bem-sucedido sem interação com o usuário)
  3. Inspecionou a construção da fonte de referência para determinar qualquer diferença.

Descobri que quando adicionei o sinalizador de vinculador --no-undefined e vinculei explicitamente nas bibliotecas pam e dl , que eu tinha um símbolo indefinido ( strlcpy , que existe apenas em BSD Unix ) e este foi impedindo que a biblioteca seja carregada.

    
por 10.09.2014 / 22:08

Tags