【问题标题】:Where to put a PAM module?在哪里放置 PAM 模块?
【发布时间】:2015-11-19 20:49:24
【问题描述】:

我目前正在尝试测试一个 PAM 模块,这个:http://www.linux-pam.org/Linux-PAM-html/adg-example.html

没有关于将.o 文件放在何处的指示。

我尝试将其放入/lib/security/usr/lib/security,但它不起作用。

编译时没有错误:

$ gcc -fPIC -c check_user.c
$ ld -x --shared -o check_user.so check_user.o

如前所述,我将这些行放在/etc/pam.d/check_user

auth       required     pam_unix.so
account    required     pam_unix.so

它似乎不起作用,因为当我尝试使用另一个帐户登录时,我没有收到消息。怎么了?

【问题讨论】:

    标签: c linux pam


    【解决方案1】:

    对于那些想要创建 PAM 模块的人,这里有一个很好的例子:https://github.com/beatgammit/simple-pam

    就我而言,在我的 PAM 模块中调用以在登录/注销时执行某些操作的函数是:

    PAM_EXTERN int pam_sm_open_session(pam_handle_t *pamh, int  flags,int argc, const char **argv ) {
        printf("Connected\n");
        return PAM_SUCCESS;
    }
    
    PAM_EXTERN int pam_sm_close_session(pam_handle_t *pamh, int  flags,int argc, const char **argv ) {
        printf("Disconnected\n");
        return PAM_SUCCESS;
    }
    

    README所示,so文件需要放入/lib/security/

    【讨论】:

      【解决方案2】:

      您要链接的文件不是 pam 模块,它只是一个用 C 语言编写的使用 pam_unix.so 的简短应用程序。您必须编译并运行 check_user。

      实际上,您正在浏览 Linux PAM 应用程序开发人员指南,您可能想查看模块开发指南:http://www.linux-pam.org/Linux-PAM-html/Linux-PAM_MWG.html

      如果您需要在登录时启动应用程序(如您的评论中所述)并且您想使用 pam,您可以在 pam_exec (http://linux.die.net/man/8/pam_exec) 上进行中继。

      将此行添加到/etc/pam.d/login:

      session         optional        pam_exec.so /usr/local/bin/my_prog
      

      另请参阅此帖子:https://unix.stackexchange.com/questions/122424/execute-a-command-on-user-logon

      【讨论】:

      • 问题是在我的情况下手动运行 check_user 是没有用的。我希望它在用户登录时自动运行。如果我必须手动执行,我不明白为什么必须将这两行放在/etc/pam.d/check_user 中。
      • 这只是一个示例,用于了解如何在 C 中包含 pam 调用。您不应该在生产系统中使用它。在登录时启动应用程序是一个完全不同的问题。
      • 其实也可以使用pam来自定义登录。我正在编辑我的答案。
      猜你喜欢
      • 1970-01-01
      • 2022-01-13
      • 2015-10-31
      • 1970-01-01
      • 1970-01-01
      • 2016-12-10
      • 2016-07-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多