我目前正在尝试测试一个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
它似乎无法正常工作,因为当我尝试使用其他帐户登录时,我没有收到该消息。怎么了?
答案 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/
。