PAMモジュールをロードできません。診断方法は何ですか?

PAMモジュールをロードできません。診断方法は何ですか?

サービスモジュールを作成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/*PAMModule Writers Guide考える私は正しいルールに従います。この問題の診断を進める方法についての手がかりはありますか?

タッチも試しましたが、役に立つ/etc/pam_debugログメッセージは表示されませんでした。

ベストアンサー1

問題が解決しました。参考までに私が診断した方法は次のとおりです。

  1. 以下からLinux-PAMソースコードをダウンロードしてください。https://git.fedorahosted.org/cgit/linux-pam.git
  2. 私のソースコードをpam_permit.c(ユーザーの対話なしで常に成功する非常に単純なモジュール)の内容に置き換えました。
  3. 違いを確認するには、参照ソースのビルドを確認してください。

--no-undefinedリンカフラグを追加してライブラリの内外に明示的にリンクすると、未定義のシンボル(のみ存在)があり、ライブラリがロードされないことがわかりました。pamdlstrlcpyBSD Unix

おすすめ記事