[Centos 7] Linux Authentication Module - PAM (Pluggable Authentication Modules)

2022. 11. 29. 16:32리눅스(Linux)

 

Linux Authentication Module

   -인증모듈 : PAM (Pluggable Authentication Modules)

   -모듈사용시 주의할 점 항상 Test 환경에서 실행 후 실제 적용 할 것(다시 재 설정하기 어려움)

 

Linux PAM

   -사용자 인증의 핵심, 인증형태, 자원 접근 등의 선택형 라이브러리

   -모듈의 종류가 다양하며 착탈식 인증 모듈

   -Telnet, SSH 등의 서비스 인증 부분에 접근 통제 설정 가능하다

   -PAM 활용 한 su의 접근 통제 설정 가능

 

$ PAM 동작순서

1. 프로그램이 사용자 인증 필요시 PAM 라이브러리 호출

2. 라이브러리가 호출되면 프로그램의 PAM 설정 파일을 참조

3. 참조 한 파일에서 모듈을 수행

4. 결과 값은 프로그램으로 반환되어 인증여부를 최종결정

 

$ PAM 라이브러리 관련 경로

# /etc/pam.d 
   - PAM 라이브러리를 이용하는 응용프로그램의 설정파일 위치
   - 파일명은 서비스 이름으로 되어 있다.

# /usr/lib64/security
   - PAM 라이브러리가 제공하는 인증 모듈들
   - 다양한 인증 작업 모듈, 라이브러리(*.so)로 구현되어 있음

# /etc/security
   - PAM모듈 실행에 필요한 설정 파일
   - 파일명은 해당 서비스명.conf

 

$ PAM 구성파일 작성방법

   - [type] [control] [module-path] [module-arguments]

 

Type : PAM에게 어떤 타입의 인증이 사용될 것인지 지정

   - auth : 사용자 인증에 사용, 올바른 패스워드인지 확인 절차를 가짐

   - account : 사용자가 패스워드 변경할 수 있는 모듈 지정

   - session : 로그인 전 후 수행되는 일을 지정 (EX:로그)

 

Control : PAM에서 사용되는 모듈의 결과에 따라 동작 지정

   - required (리큐어드)

         성공 값 반환 시 성공 후 Pass, 실패 시 마지막까지 다 실행 후 실패(실패가 나도 뒤의 자료도 보겠다.)

         대부분의 실패 확인 작업은 required 설정을 한다.

         특정 인증절차 부분에서 어떠한 부분에서 인증을 실패했는지 찾기위한 것

         예를 들어 IP입력 후 ID 입력에서 실패인지 IP입력부터가 실패인지 확인 한다.

         최초 실패 시 이후 결과에서 성공이 발생하더라도 무조건 실패로 처리 된다.

   

   - requisite(리큐지트) : 성공 값 반환 시 성공 후 Pass, 실패시 곧바로 실패 (계정이 없으면 바로 실패)

   

   - sufficient(서피전트) : 성공 값 반환 시 곧바로 성공, 단 위에서 required 실패시 실패(우선순위가 제일 낫다)

 

Module-path : 사용할 모듈의 위치

   -기본 Default 경로는 /usr/lib64/security로 사용된다. (PAM 모듈의 이름만 넣어도 실행)

 

Module-arguments : 모듈에게 전달되는 인수

(옵션이므로 선택적 사용이 가능, if문과 비슷한 역할을 하는 옵션을 주로 사용)

   - no_warn : 경고 메시지 표시 안 함

   - use_first_pass : 패스워드를 요구하지 않음, 패스워드가 없다면 인증 받지 못함 (패스워드 오류 시 종료)

   - try_first_pass : 입력받은 패스워드로 인증을 시도, 없다면 사용자에게 물어봄(패스워드 오류 시 다시 입력)

pam_rootok.so 

   - root 계정에서 su user(일반사용자) 접근할 때 암호 기입 안하고 바로 접속가능해짐

   - sufficient 대신 required 옵션일 경우 root계정에서만 su 접근 가능

   - requisite 옵션은 root 계정 외 다른계정 su접근은 인증 시도도 안함

 

auth sufficient pam_rootok.so

   - 관리자 권한이라면 모두 성공

   - ex) su user(일반 사용자) 바로 접속이 가능

 

auth substack system-auth

   - system-auth : password 인증

 

auth sufficient pam_wheel.so trust use_uid

   - wheel, 관리자들을 모아놓은 그룹, wheel 그룹의 구성원인지 확인하는 설정

   - trust 권한 상승 옵션

 

$ System-Auth

pam_env.so : 환경변수 검증작업을 진행(정상 일 경우 성공, 이상하면 실패)

pam_faildelay.so : 인증 실패시 딜레이값 설정

pam_fprintd.so : 이전에 리눅스 유닉스 시스템에서 사용하던 인증방식

pam_unix.so : 현재 Linux System에서 핵심적으로 사용하는 인증 모듈

 

$ 동작순서

1. 특정 사용자 P/W 입력 시 /etc/passwd 파일에서 P/W 필드 X값 확인

2. /etc/shadow 파일로 이동 후 솔트 값 확인 후 해시함수를 이용한 해시값 생성

3. 생성된 해시값과 실제 저장된 해시값이 일치하는지 확인

4. 해시값이 일치 할 경우 성공, 일치 하지 않을 경우 실패

5. /var/log/secure에 인증결과를 로그로 기록(해당 인증 모듈 사용여부도 확인이 가능)

 

   - nullok [ID/PW Null값 허용]

   - try_first_pass [패스워드 재시도 횟수 지정, 현재 횟수 지정이 안되어 있으므로 재시도 불가

   - EX: try_first_pass retry=3 [재시도 횟수를 3회 지정 하는 옵션]

 

pam_succeed_if.so

   - 어떠한 조건식을 지정하기 위해 사용 (if 문 사용 형식과 유사)

 

pam_deny.so

   - 모두 거부 처리

 

 

# vi /etc/pam.d/system-auth 
8 auth        sufficient    pam_succeed_if.so user != root quiet_success
   - 루트계정이 아닐 경우 성공후 종료, 실패면 pass
   - 일반계정이 접속시도를하는게 root가아니면 sufficient하고 로그기록을 남긴다.
9 auth        sufficient    pam_succeed_if.so user = itbank use_uid
   - 인증 사용자가 itbank이면 성공후 종료, 실패면 pass
   - (itbank → root 전환가능, user1 → root 전환 불가능)
10 auth        requisite     pam_succeed_if.so uid >= 1000 quiet_success
   - uid가 1000이상인 계정이 root로 접속하면 requisite 이 후 밑으로 내려가서 deny를함.
11 auth        required      pam_deny.so

ex) user(인증한 계정) > = itbank use_uid (인증을 시도)

$ sudo 권한 설정

   - 일반사용자 계정에서 명령문 앞에 sudo를 넣어 root 계정권한으로 실행

 

itbank 계정에 sudo 권한 설정

 

pam_tally2.so deny=3 unlock time=120 

   - 3번이상 인증 실패시 계정을 120초간 잠근다

 

# pam_tally2 
Login           Failures Latest failure     From
itbank              4    06/22/22 13:52:57  192.168.1.1
   - 잠긴 계정을 확인

# pam_tally2 -u itbank --reset=0 
Login           Failures Latest failure     From
itbank              4    06/22/22 13:52:57  192.168.1.1
   - 잠긴계정을 즉시 해제

$ ssh 접근제어

pam_access.so

   - ssh 접근제어(/etc/security/access.conf) 설정

 

/etc/security/access.conf

   - 접근제어 명시  

   - user1 에 대한 ssh접근을 막아버림

 

pam_time.so

   - ssh 시간설정 접근제어

 

/etc/security/time.conf

   - 접근제어 명시

 

sshd;*;itbank;Wk0900-2200

   - 아침 9시부터 22시까지 접근 허용 

 

sshd;*;itbank;!Wk0900-2200

   - ! 가 붙으면 차단

 

# vi /etc/pam.d/system-auth
18 password    requisite     pam_pwquality.so try_first_pass local_users_only retry=3 authtok_type= minlen=12 
   - 일반사용자 패스워드 변경시 3번의 기회를 제공
   - 일반사용자 패스워드 최소길이 12글자
   
12#$qwER → 총 8글자 + (숫자(1) + 특수문자(1), 영문자(1), 대문자(1)) 
총글자 + 썼던 문자기호 점수 합산해서 12글자 맞춰야함 

숫자 	   dcredit=1 
소문자	   lcredit=1
대문자	   ucredit=1
특수문자 ocredit=1

   - 최대점수 값을 지정 할 수 있다. (EX : ocredit=3)
   - 특수문자 3개 사용 시 최대 3글자의 보너스를 받는다.
   - -1 설정 시 필수 사용옵션이 된다.