본문 바로가기

[Linux]

[Linux] 리눅스 PAM

반응형

인증모듈 : PAM( pluggabl 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-argument]

 

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

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

- account : 계정관리, 사용자의 위치, 시간, 권한 등의 확인 절차를 가짐

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

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

인증작업을 수행하려고 만들때 PAM를 사용하기때문에 대부분 auth 사용

 

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

- required 

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

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

어떤 부분에서 실패가 났는지 확인하기 위한 컨트롤

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

 

- requisite : 인증모듈 돌렸을때 성공 값 반환 시 성공 후 PASS, 실패 시 곧바로 실패 (계정이 없으면 바로 실패)

실패를 확인하기 위한 컨트롤

 

- sufficient : 인증모듈 돌렸을때 성공 값 반환 시 곧바로 성공, 위에서 required 실패 시 실패(우선순위가 제일 낮다)

성공를 확인하기 위한 컨트롤 

맨마지막에 사용

 

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

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

 

module-argumets : 모듈에게 전달되는 인수

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

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

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

모듈에 따라 달라지고 꼭 사용하지 않아도 된다.

 


# vi /etc/pam.d/su

#man pam_rootok

모듈 도움말로 확인가능

 

2. 관리자 계정이라면 즉시 성공이라는 결과값을 반환하는 모듈(root가 아니라면 다음 모듈)

4. 현재 내가 사용하는 uid가 wheel 구성원인지 확인 & root 권한 즉시 상승 옵션

6. 현재 내가 사용하는 uid가 wheel 구성원인지 확인

7. 패스워드 인증 모듈

 


2번 라인을 주석처리 > root계정으로 su (데몬 X)

 

루트면 바로 접속 > 루트인데도 암호입력

루트인지 확인하는 모듈이 사라졌고 바로 패스워드 인증 모듈을 사용하기 때문

 

2번 라인 sufficient > required

required 컨트롤이기 때문에 루트인지 확인이 되더라도 pass하고 패스워드 인증까지 사용

루트가 아니라면 패스워드 인증 모듈까지 잘 수행하더라도 위에서 실패를 가지고 내려왔기 때문에 접속이 되지 않는다.

 

2번 라인 sufficient > requisite

root이면 성공하고 pass하므로 패스워드 인증 모듈까지 사용

root가 아니면 즉시 실패

 

4번 라인 주석 해제

wheel group 관리자들을 모아놓은 그룹

itbank계정으로 su 명령어를 사용했을때 루트 권한으로 올라갔기 때문에 암호 인증 모듈까지 내려가지 않고 바로 로그인 되는것을 확인할 수 있다. 

반면 wheel 그룹에 가입되지 않은 user1계정을 암호 인증이 필요하다

 

5번 라인 주석 해제

itbank는 wheel그룹의 구성원이기 때문에 암호인증 성공 후 접속이 되지만

user1은 그렇지 않기때문에 암호인증을 성공하더라도 접속이 되지않는다.


# vi /etc/pam.d/system-auth

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

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

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

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

 

동작순서

1. 특정 사용자 PW입력시 /etc/passwd/ 파일에서 PW필드 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 : 모두 거부 처리


7,8,9번 라인 편집

8번라인 > 인증을 할 계정

9번라인 > 인증을 시도한 계정

 

8. 인증에 성공한 계정이 root일 경우 실패 후 패스 / root가 아닐 경우 즉시 성공

9. 인증을 시도하는 계정이 itbank일 경우 즉시 성공 / itbank가 아닐 경우 실패 후 패스

10. 인증을 성공한 계정의 uid가 1000이상일 경우 성공 후 패스 / 아닐 경우 즉시 실패

 

>> su root 명령어를 특정 사용자(itbank)에게만 허용하고 나머지는 차단하는 설정

     일반 유저들 끼리는 로그인이 가능

     root로 로그인 실패시 로그 남음

     1000이상 uid의 계정으로 로그인 실패시 로그 남음

 


pam_tally2.so : 인증 실패시 잠금

ex) pam_tally2.so deny=3 unlock time=120

3번 실패 시 120초 계정 잠금

일부러 3번 이상 실패하고 확인 > 잠금해제 

 

type:account / pam_access.so

계정 로그인 허용 설정

/etc/security/access.conf 

permission : [ + / - ]

users : 계정

origins : 네트워크 대역대

 

type:account / pam_time.so

계정 로그인 허용 시간대 설정

/etc/security/time.conf 

services : 서비스명

ttys : 터미널 창의 이름

users : 계정명

times : 접속 허용 시간 지정

pam_pwquality.so : 패스워드 설정 모듈

minlen = 12 : 비밀번호 최소길이 12

 

보너스 길이

숫자 : dcredit = 0

소문자 : lcredit = 1

대문자 : ucredit = 0

특수문자 : ocredit = 1

 

EX) 12#$qwER 으로 설정하면 + 4

8자리지만 특수문자 2개, 소문자 2개가 있으므로 보너스길이 4까지해서 12가 충족되므로 해당 비밀번호 설정가능

 

-1으로 설정 시 > 필수

 

반응형