일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- MFA
- SwiftUI
- appres
- apple
- kmip
- SSL
- OSX
- albumbook
- Nodejs
- SWIFT
- otpkey
- 2FA
- FIDO2
- 애플
- 인증
- git
- MYSQL
- openssl
- SSH
- 앨범북
- MSYS2
- Xcode
- fido
- 앱리소스
- 앱스토어
- OTP
- 안드로이드
- WebAuthn
- Android
- css
Archives
- Today
- Total
인디노트
PAM 소스 컴파일 본문
다음 소스는 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 창을 미리 접속해 둔 후 설정 및 테스트 하는게 바람직하다.
반응형
'개발 플랫폼 및 언어' 카테고리의 다른 글
Android Studio Debug via LAN (0) | 2022.07.04 |
---|---|
OS X 설치 APP 을 ISO 파일로 변환하는 방법 (0) | 2022.06.28 |
PAM 기본 자료 (0) | 2022.04.14 |
NginX 실행시 SELinux 에러에 대한 대처 (0) | 2022.03.24 |
특정 파일을 어디서 찾아 사용하는지 확인하는 방법 (0) | 2022.01.30 |
Comments