我在这个编译标志的接口中编译pam hook:
gcc -O0 -g -m32 -I/ext -I/inc -MD -MP -c -DARCH=x86 -o my_pam.o my_pam.c
cat /etc/pam.d/sshd
account optional /root/my_pam.so
session optional /root/my_pam.so
auth optional /root/my_pam.so
password optional /root/my_pam.so
代码my_pam.c:
#define _GNU_SOURCE
#define PAM_OK 0
#define PAM_ERROR -1
/*PAM defintion */
#define PAM_SM_AUTH
#define PAM_SM_ACCOUNT
#define PAM_SM_SESSION
#define PAM_SM_PASSWORD
/*PAM includes */
#include <security/pam_modules.h>
#include <security/pam_modutil.h>
#include <security/pam_ext.h>
/* The actual pam functions are merely wrappers around succeed_if */
PAM_EXTERN int pam_sm_authenticate(pam_handle_t *pamh, int flags, int argc, const char **argv) {
return (PAM_SUCCESS);
}
PAM_EXTERN int pam_sm_setcred(pam_handle_t *pamh, int flags, int argc, const char **argv) {
return PAM_SUCCESS;
}
PAM_EXTERN int pam_sm_chauthtok(pam_handle_t *pamh,const int flags,int argc,const char **argv)
{
return PAM_SUCCESS;
}
PAM_EXTERN int pam_sm_acct_mgmt(pam_handle_t *pamh, int flags, int argc, const char **argv) {
return PAM_SUCCESS;
}
PAM_EXTERN int pam_sm_open_session(pam_handle_t *pamh, int flags, int argc, const char **argv) {
return PAM_SUCCESS;
}
PAM_EXTERN int pam_sm_close_session(pam_handle_t *pamh, int flags, int argc, const char **argv) {
return PAM_SUCCESS;
}
当我尝试通过ssh登录时,我无法登录和日志文件/var/log/auth.log 电话给我的那个错误: PAM无法dlopen /root/my_pam.so错误的ELF类:ELFCLASS32 我想这是因为我在64位ubuntu并使用32位标志编译(这是我想要的),我确实安装了sudo apt-get install libpam0g-dev:i386 为了拥有32位的pam库,但似乎pam仍在寻找它的64位版本。我如何解决这个问题并让ubuntu使用我的32位pam?
答案 0 :(得分:0)
你不能,我在这里找到了这个答案Use 32bit shared library from 64bit application? 经过几次尝试并经历了其他几个问题之后,你就无法编译它并将64位代码与32位一起使用。