02. 접근 제어 - PAM 이론

prana·2023년 3월 6일
0

Linux

목록 보기
15/28

출처 : 유튜브 따라하면서 배우는 IT

목차

  1. 사용자 로그인 관련 명령어
  • su 명령어 / who 명령어 / last 명령어
  1. PAM 모듈
  • PAM이란? / PAM 설정 파일 / PAM 모듈의 종류
  1. 따라學IT
  • root 접근 제어 설정해보기 / PAM 설정해보기

사용자 로그인 관련 명령어

다른 사용자로 로그인 - su 명령어

  • 다른 사용자로 로그인

su [-] [사용자명]

  • 다른 사용자로 로그인할 때 사용한다.

    -(dash)의 유무

    • 있을 때 : su - root / 입력한 사용자의 사용자 초기화 파일 적용
    • 없을 때 : su root : 현재 사용자의 환경을 유지, 사용자 초기화파일 적용X

로그인한 사용자 확인 - who 명령어

  • who : 접속 정보
  • who am i : 현재 터미널에 대한 접속 정보 ( 왜 나는 안 뜨지 ㅋㅋㅋㅋ)
  • whoami : 로그인명

로그인 내역 확인 - last 명령어

  • last : /var/log/wtmp 로그 파일을 참조해서 로그인했던 정보를 출력해주는 명령어
  • 자신의 시스템에 접속한 정보를 확인할 수 있다.(IP확인 가능)
  • 사용자가 로그인한 정보를 출력
  • 언제 로그인을 했는지, 언제까지 사용을 했는지, 아직도 사용을 하고 있는지 + 시스템 부팅 정보 등
  • 참고 : 과학기술정보통신부-한국인터넷진흥원-주요정보통신기반시설(기술적 취약점 분석/평가 방법 상세가이드)

PAM 모듈

  • PAM이란? : Pluggable Authentication Modules
  • 인증과 관련된 여러 가지 모듈들을 필요한 것들만 뽑았다 뺐다
  • 로그인과 관련된 명령어 su, ssh 라던가.. 기타 프로그램 등이 있을 때, PAM 모듈들(아래 그림) 각각의 프로그램에다가 필요한 모듈들을 적용.
  • ex) ssh명령어에 인증/세션관리 모듈만 적용시킨다거나

PAM이란?

  • 시스템에 공통적인 인증 방법을 제공

  • 어떤 보안 인증 기능을 추가할 때 모듈로 만들어서 쉽게 보안 설정 내용들을 교체 또는 추가 제거가 가능하다.

  • 모듈의 종류는 다양하며, 각각 모듈의 기능을 정확히 파악하는 것이 중요

  • 프로그램이 사용자 인증이 필요하면 PAM 라이브러리를 호출

  • PAM 라이브러리는 호출되면 호출한 응용 프로그램의 설정 파일을 검사, 설정 파일의 내용에 맞는 PAM 모듈을 적용

  • 설정 파일이 없으면, 기본 설정 파일 사용 (other)

  • 설정 파일은 사용자 인증을 검사하기 위해 필요한 유형(형식)을 가짐


PAM 모듈 - PAM 설정 파일

  • 각 프로그램의 설정 파일을 저장하는 /etc/pam.d 디렉토리
  • pam을 적용한 프로그램이나 서비스의 설정 내용을 저장해둔 파일들이 모여 있는 디렉토리
  • 안에 파일들을 열어보면...

PAM 모듈 - 다양하게 설정 가능한 설정 파일 형식


authsufficientpam_rootok.so
module_typeconfig_flagmodule_pathmodule_argument

1. Module_type

PAM이 어떤 타입의 인증을 사용할 것인지를 지정

  • auth : 사용자 인증에 사용하며 올바른 패스워드인지 아닌지 확인

  • account : 계정 관리를 수행, 사용자의 위치, 시간, 권한 등을 지정하여 접근을 결정

    • ex: 특정 사용자는 콘솔로만 아침 9시부터 6시까지만 root로 접근 간으
  • passwd : 사용자가 패스워드를 변경할 수 있는 모듈 지정

  • session : 사용자가 인증 받기 전후에 수행되어야 할 작업을 지정

    • ex) 로그 기록

2. Config_flag

PAM에서 사용되는 모듈들이 결과에 따라 어떤 동작을 취할지 결정

  • required : 이 모듈이 성공값을 반환해야 최종 인증에 성공

    • (실패 시 밑의 다른 설정도 전부 다시 확인) (덜 엄격한 설정)
  • requisite : 이 모듈이 성공값을 반환해야 최종 인증에 성공

    • (실패 시 바로 최종 인증 실패 시)(엄격한 설정)
  • sufficient : 이 모듈이 성공값을 반환하면 바로 인증 성공

  • optional : 선택사항, 일반적으로 무시, 다른 플래그에 의한 최종 결과가 불분명할 시 optional값이 적용

  • include : 다른 설정 파일을 불러옴

3. Module_path

/usr/lib64/security 디렉토리 내의 어떤 모듈을 사용할 지 지정

  • 모듈 이름을 지정 (→ 알아서 모듈 이름을 찾음)

4. Module argument

모듈에 전달되는 매개변수 값을 나타냄

  • debug : 시스템 로그 파일에 디버그 정보를 남기게 함

  • no_warn: 모듈이 경고 메시지를 보내지 않게 함


다양한 인증 방식을 제공하는 PAM 모듈의 종류

  • pam_permit.so, pam_deny.so : 항상 성공/실패를 return

    • 접근을 허용/거부(가장 일반적인 모듈)
  • pam_warn : 호출한 사용자 및 호스트 정보를 messages 로그에 남김

  • pam_access : 계정 또는 IP 주소를 이용해서 시스템 접급을 허용/거부

  • pam_pwcheck : /etc/login.defs 파일을 참조하여 암호를 확인하는 명령어

  • pam_securetty : /etc/securetty 파일을 참조하여 터미널 장치가 root로 접근할 수 있는지 없는지 판단

  • pam_time : 시간, 쉘 등을 설정할 수 있는 모듈

  • pam_wheel : su 서비스에 사용함, su를 이용한 root접근을 막을 수 있음


실습

  1. Root 계정 접근 제어 설정해보기
  • 보안을 위하여 root 사용자로 바로 로그인하지 못하도록 설정해보기
  1. PAM 설정해보기
  • PAM 모듈을 설정하여 여러가지 접근 제어 설정해보기

1. /etc/pam.d

  • su , passwd

  • cat su

  • 텍스트로 되어있는 설정파일 #은 주석. PAM 모듈은 여러 가지 사용한다.

  • root사용자면 ok를 반환하도록. 이 값이 성공하면 밑에것들은 확인하지 않고 바로 로그인이 되도록 성공시킴. 성공하지 않으면 그 다음줄을 반환할 것이다.

  • account : 사용자 계정을 관리

    • ip위치, 접속한 시간, 권한 등 인증을 수행할 수 있게 되는 애
  • include: 다른 설정파일을 불러와서, 그 설정내용까지도 확인하게 하는 것.

  • su - user01 바로 로그인이 되는 것처럼..

  • cat su -> include -> postlogin (이 파일을 불러와서 추가적으로 하고 있다는 말임)

  • postlogin 등 PAM 모듈 설정 파일

  • system-auth 까지 또 추가적으로 불러오고 있는 것임


2. 직접 설정해보기


  • Not listed? 누르고 root - root로그인 하면 바로 로그인이 되는데,
    콘솔창에서 root사용자 바로 로그인이 안되도록, 그걸 안 되게 PAM 모듈로 설정해볼 것이다.
  • gdm-passwd : 근원 데스크탑에서 설정하는 모듈 vi로 열어보기
  • 맨 윗줄 auth / required /pam_succeed_if.so uid >= 1000 추가

3. 왜 로그인 시 root로 바로 로그인하지 못하고 일반 사용자-> su 명령어를 통해서 접속하게 해야하는 것일까?

시나리오 1 : root로 바로 로그인 할 때

  • 필요한 것 : root사용자의 패스워드만 필요

시나리오 2 : root로 바로 로그인은 못하고 일반 사용자로 로그인 후 su 로 root전환

  • 🔐⭐🌟필요한 것 : 일반 사용자 id, 일반 사용자 PW, root PW
  • 좀 더 안전하게 사용할 수 있다.

4. su 변경해서 아무나 su 명령어 입력 못하게 하기

cd /etc/pam.d
ls
vi su

  • pam_wheel.so : 그룹 중 wheel에 속해있는 사용자는 trust 믿을 수 있는 사용자로 추가해서 패스워드를 따로 물어보지 않아도 됨

5. 특정 사용자만 root 사용자를 이용할 수 있게

  • trust 가 들어가면 패스워드를 안 물어봄, wheel이라고 그룹에 추가된 사용자만 su명령어를 통해 root를 사용하는데, 비밀번호를 물어봄
  • 일반사용자 추가함.

  • test 사용자는 거짓값이 반환되기 때문에, su명령어를 쓸 수 없다.

6. 특정 시간에 이용하도록

(원격에 접속)🖥️ 특정 사용자는 로그인을 평일 9시 반부터 18시 반까지 주말에는 이용 불가
/etc/pam.d/sshd 파일에 다음 설정 추가
account (공백) requisite (공백) pam_time.so

  • pam_time.so : 시간값으로 설정할 수 있는 모듈
    /etc/security/time.conf sshd 프로그램을 이용하는 모든 터미널 장치는 일주일 중에서 아침 9시부터 저녁 5시까지는 접속을 금지
    sshd;*;user;!Wk0900-1700
    프로그램;터미널;사용자;시간

원격 접속을 위한 네트워크 세팅 (간단히)

  • vi /etc/sysconfig/network-scripts/ifcfg

restart하면 ifconfig보면 ip주소를 볼 수 있다.
putty 로 설정 후에 확인!


7. 원격 접속을 특정 시간에만 가능하도록 함

  • vmware에서 vi /etc/pam.d/sshd 명령어 입력
  • 맨 윗줄 account required pam_time.so 타임 모듈 추가
  • /etc/security/time.conf 설정된 내용 대로 확인을 하는 모듈이다. 모듈만 적용한다고 되는 게 아니고, time.conf에다가 특정 시간 값을 추가로 설정해주어야 한다.
  • vi /etc/security/time.conf 파일 열고, 주석 맨 아랫줄에

    추가한다.

sshd;*;root;!Wk0900-1700

  • 어떤 서비스인지, *(터미널 장치를 지정(어떤 터미널을 통해서든)), root(사용자 이름),특정 사용자 시간 앞에 !는 저 시간을 제외(저 때만 접속이 안 되게 설정)
  • 저장 후 putty 에서 root사용자로 로그인 하면
  • 오류가 뜨게 된다. vi로 다시 시간을 바꿔준다면?(느낌표를 제거)
  • 접속할 수 있게 된다!!!
    위에 시간 값에 따라서, 접속이 허용되기도, 거부되기도 한다.

0개의 댓글