【问题标题】:Can't call custom PAM module from dotnet core - possibly related to multiarch无法从 dotnet 核心调用自定义 PAM 模块 - 可能与多架构有关
【发布时间】:2016-07-22 15:26:43
【问题描述】:

我已经构建了一个简单的自定义 PAM 模块,该模块可以与 pamtester 以及我在网上找到的其他一些 pam 测试代码一起正常工作。

我还构建了一个简单的 dotnet 核心应用程序,它使用 pinvoke 对 pam 进行身份验证。

如前所述,自定义模块与 pamtester 一起使用,自定义 dotnet 应用程序(直到接收到 conv 回调)针对默认的 ubuntu 15.10 pam 设置工作。

但是,如果我将自定义应用程序连接到自定义 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 模块,使其行为与预先存在的系统模块相同?

【问题讨论】:

    标签: c linux pinvoke pam .net-core


    【解决方案1】:

    我仍然不知道为什么从 dotnet 而不是从 pamtester 调用我的自定义模块是一个问题,但要回答最重要的问题:“我如何构建和/或配置我的自定义 pam 模块以使其行为相同作为预先存在的系统模块?”

    答案是之前,我使用以下链接模块:

    ld -x --shared -o pam_permit_log_response.so pam_permit_log_response.o
    

    为了解决这个问题,我需要使用 -lpam 标志向链接器表明这是一个 pam 模块,因此对链接的调用变为:

    ld -x --shared -o pam_permit_log_response.so pam_permit_log_response.o -lpam
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-02-15
      • 2021-05-31
      • 1970-01-01
      • 2014-07-08
      • 1970-01-01
      相关资源
      最近更新 更多