Pam

無法載入我的 PAM 模組 - 如何診斷?

  • September 10, 2014

我編寫了一個PAM服務模組,並lightdm通過編輯將其添加到/etc/pam.d/lightdm.

lightdm抱怨(在/var/log/auth.logUbuntu 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模組並開始檢查它,但隨後它放棄並繼續在其他目錄中搜尋它,最終抱怨它找不到它。這是一些範例輸出:

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,但沒有提供任何有用的日誌消息。

問題解決了。作為記錄,這是我的診斷方法:

  1. 從https://git.fedorahosted.org/cgit/linux-pam.git下載 Linux-PAM 源
  2. 用 pam_permit.c 的內容替換了我的原始碼(一個非常簡單的模組,無需使用者互動就可以成功)
  3. 檢查參考源的建構以確定任何差異。

當我添加連結器標誌--no-undefined並在pamdl庫中顯式連結時,我發現我有一個未定義的符號(strlcpy,它僅存在於BSD Unix),這阻止了庫的載入。

引用自:https://unix.stackexchange.com/questions/154652