在哪里放置PAM模块?

时间:2015-11-18 10:43:26

标签: c linux pam

我目前正在尝试测试一个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

它似乎无法正常工作,因为当我尝试使用其他帐户登录时,我没有收到该消息。怎么了?

2 个答案:

答案 0 :(得分:0)

您链接的文件不是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

答案 1 :(得分:0)

对于那些想要创建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/