인디노트

PAM 소스 컴파일 본문

개발 플랫폼 및 언어

PAM 소스 컴파일

인디개발자 2022. 4. 15. 08:05

다음 소스는 PAM 의 기본 형태이다.

#include <stdio.h>
#include <stdlib.h>
#include <security/pam_appl.h>
#include <security/pam_modules.h>

#ifdef PAM_MODULE_ENTRY
PAM_MODULE_ENTRY("sample_pam");
#endif

#ifndef PAM_EXTERN
#define PAM_EXTERN extern
#endif

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_acct_mgmt(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;
}
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_chauthtok(pam_handle_t *pamh, int flags, int argc, const char **argv){
    return PAM_SUCCESS;
}
PAM_EXTERN int pam_sm_authenticate( pam_handle_t *pamh, int flags,int argc, const char **argv ){
    if ( check_auth_pam(pamh) < 0 )
        return PAM_PERM_DENIED;
    return PAM_SUCCESS;
}

위의 코드에서 pam_sm_authenticate 함수의 리턴 값을 조정함으로써 로그인 성공/실패 를 처리할 수 있다.

pam_sm_--- 으로 된 함수들은 PAM 에서 사용되는 기본 함수들이며 해당 함수에 원하는 코드를 넣어서 동작 시키게 된다.

PAM 모듈은 동적 라이브러리 형태로 login, ssh, telnet 등에 사용되기 때문에 서버로 접속하는 모든 상황을 감시하고 제어할 수 있다.

 

컴파일 방법

Linux:
  gcc -fPIC -fno-stack-protector -c test_pam.c
  ld -x --shared -o test_pam.so test_pam.o
  cp test_pam.so /lib/security/
  chmod 555 /lib/security/test_pam.so
  chown root /lib/security/test_pam.so

HP-UX:
  cc -c test_pam.c
  ld -b -G -o test_pam.so test_pam.o
  cp test_pam.so /usr/lib/security/
  chmod 555 /usr/lib/security/test_pam.so
  chown root /usr/lib/security/test_pam.so

AIX: (XLC)
  cc -c test_pam.c -ldl -lc -lpam  -lcfg -lodm
  cc -G -o test_pam.so test_pam.o -ldl -lc -lpam  -lcfg -lodm  
  cp -pf test_pam.so /usr/lib/security/
  chmod 555 /usr/lib/security/test_pam.so
  chown root /usr/lib/security/test_pam.so
  
SUN: (gcc)
  gcc -c -o test_pam.so test_pam.c
  cp -pf test_pam.so /usr/lib/security/
  chmod 555 /usr/lib/security/test_pam.so
  chown root:root /usr/lib/security/test_pam.so

 

PAM 설정

Unix : /etc/pam.conf 에 추가

Linux : /etc/pam.d/ 디렉토리 안에 서비스 별로 설정

설정에 필요한 양식은 대략 다음의 형식이다.

login   auth required /usr/lib/security/test_pam.so common
ftp     auth required /usr/lib/security/test_pam.so ftp
sshd    auth required /usr/lib/security/test_pam.so ssh
telnet  auth required /usr/lib/security/test_pam.so telnet
rsh     auth required /usr/lib/security/test_pam.so rsh
rlogin  auth required /usr/lib/security/test_pam.so rlogin
dtlogin auth required /usr/lib/security/test_pam.so dtlogin

 

주의

PAM 설정의 경우 자칫 잘못 설정되는 경우 접속 자체가 어려워지므로 반드시 작업전에 telnet 혹은 ssh 창을 미리 접속해 둔 후 설정 및 테스트 하는게 바람직하다.

반응형
Comments