私はpamtesterとオンラインで見つけた別のpamテストコードを使って期待どおりに機能するシンプルなカスタムPAMモジュールを構築しました。
また、pinvokeを使用してpamを認証する単純なdotnetコアアプリケーションを構築しました。
前述のように、カスタムモジュールはpamtesterで動作し、カスタムdotnetアプリケーションはデフォルトのubuntu 15.10 pam設定(convコールバックが受信されるまで)に対して動作します。
ただし、カスタムアプリケーションをカスタムPAMモジュールに接続すると、auth.logにエラーメッセージが表示されます。
dotnet: PAM unable to dlopen(pam_permit_log_response.so):
/lib/security/pam_permit_log_response.so: cannot open shared object file: No
such file or directory
...だからdotnetからカスタムモジュールとしてpamを呼び出すと、/lib/x86_64-linux-gnu/securityにモジュールが見つかりません。
モジュールのフルパスを含むようにpam設定ファイルを変更すると、エラーが発生します。
dotnet: PAM unable to dlopen(/lib/x86_64-linux-
gnu/security/pam_permit_log_response.so): /lib/x86_64-linux-
gnu/security/pam_permit_log_response.so: undefined symbol: pam_syslog
したがって、まだ問題が解決しないようです。今回はカスタムpamモジュールの参照です。
誰でも私に正しい方向を教えてもらえますか?
- PAMが私のカスタムモジュールを見つけることができませんが、デフォルトのUbuntuモジュールが見つかるのはなぜですか?
- dotnetでpamを呼び出すときにのみこれが発生するのはなぜですか?
- 既存のシステムモジュールのように動作するようにカスタムpamモジュールを構築および/または構成するにはどうすればよいですか?
答え1
私はまだpamtesterではなくdotnetからカスタムモジュールを呼び出すのに問題がある理由がわかりません。しかし、最も重要な質問である「既存のモジュールと同じように動作するようにカスタムpamモジュールを構築および/または構成するにはどうすればよいですか?」に答えます。システムモジュール?」
答えは、以前に以下を使用してモジュールを接続したことです。
ld -x --shared -o pam_permit_log_response.so pam_permit_log_response.o
この問題を解決するには、-lpamフラグを使用してこれがpamモジュールであることをリンカーに示す必要があります。したがって、link呼び出しは次のようになります。
ld -x --shared -o pam_permit_log_response.so pam_permit_log_response.o -lpam