본문 바로가기

보안

보안기사 - PAM

PAM (Pluggable Authentication Modules, 장착형 인증 모듈)

리눅스 시스템 내에서 사용되는 각종 어플리케이션 인증을 위해 제공되는 다양한 인증용 라이브러리들
/lib/security 또는 /usr/lib/security 디렉터리에 해당 라이브러리 저장
프로그램 개발 시 인증모듈을 별도 개발하지 않고 플러그인 방식의 PAM을 사용함으로써 인증 방식 및 정책의 유연성과 중앙 통제가 가능

각 프로그램은 인증이 필요한 부분에 PAM 라이브러리를 호출
->PAM라이브러리 호출되면 해당 프로그램의 PAM 설정파일 참조하여 등록된 여러 PAM 모듈 수행하고 그 결과를 응용 프로그램에 반환
->응용 프로그램은 반환된 결과를 이용해 인증여부 결정

PAM 설정 파일

  • /etc/pam.d
    PAM 라이브러리 이용하는 각 응용 프로그램(서비스)의 설정파일이 위치

    설정파일명은 응용프로그램(서비스)명과 동일

    type   control   module-path   module-arguments
    (p. 76 참고)

  • /etc/security
    PAM 모듈 실행에 필요한 추가 설정 파일 위치

PAM 활용 예

root 계정 원격 접속 제한

  • 설명
    /etc/securetty 파일에 등록되어 있는 터미널이 아니면 root의 접속을 허용하지 않도록 PAM 설정
    (pam_securetty.so 모듈이 사용하는 파일로 터미널 접속 시 root 접근 제한 설정 파일)

  • 방법
    /etc/pam.d/remote 파일에 pam_securetty.so 모듈 추가
          auth   required   pam_securetty.so

    /etc/securetty 파일에 "pts/~" 터미널을 모두 제거(주석처리)

    * tty(terminal-teletype) : 서버와 연결된 모니터, 키보드 등을 통해 사용자가 콘솔로 직접 로그인
    pts(pseudo-terminal, 가상터미널) : Telnet, 터미널 등을 통해 접속하는 가상터미널

  • 유닉스/리눅스 시스템별 root 계정 원격 접속 제한 설정

    OS          점검 파일 위치 및 방법
    SOLARIS          /etc/default/login 파일
          CONSOLE=/dev/console
    LINUX          /etc/pam.d/login 파일
          auth required /lib/security/pam_securetty.so
       /etc/securetty 파일
          pts/~ 관련 설정 존재X
    AIX          /etc/security/user 파일
          rlogin = false
    HP-UX          /etc/securetty파일
          console
  • 점검
    'w' 명령으로 현재 접속 중인 root 사용자 정보를 확인하여 TTY 필드의 값이 pts/~로 설정되어있지 않은 것을 확인

  • SSH(Secure Shell) root 원격 접속 제한 설정
    /etc/ssh/sshd_config 파일        PermitRootLogin no

계정 잠금 임계값 설정

  • 설명
    패스워드 크래킹 발생 시 암호입력 실패 횟수를 제한하고 공격시간을 지체시켜 패스워드 유출 위험 줄이기 위함
    계정잠금 임계값(5회 이하 권장) 초과시 패스워드를 일정시간 잠근다
    pam_tally2.so(pam_tally.so) 모듈 이용

  • 방법
    /etc/pam.d/system-auth 파일에 pam_tally2 모듈 추가
    auth required pam_tally2.so deny=5 unlock_time=120
    (pam_tally 모듈 인수 : deny=5, unlock_time=120)

    * pam_tally2 명령
    로그인 실패 횟수 확인 (pam_tally2 -u 계정명)
    실패 횟수 초기화 (pam_tally2 -u 계정명 -r)

  • 유닉스/리눅스 시스템별 계정 잠금 임계값 설정
    OS          점검 파일 위치 및 방법
    SOLARIS          /etc/default/login 파일
         RETRIES=5
       5.9 버전 이상이면 '/etc/security/policy.conf' 파일도 확인
         LOCK_AFTER_RETRIES=YES
    LINUX          /etc/pam.d/system-auth 파일(pam_tally.so모듈일 경우 - 2는 위에서 확인)
         auth required /lib/security/pam_tally.so deny=5 unlock_time=120 no_magic_root
         account required /lib/security/pam_tally.so no_magic_root reset
    AIX          /etc/securityuser 파일
         loginretries=5
    HP-UX          /tcb/files/auth/system/defult 파일
         u_maxtries#5
       11.v3 이상일 경우 '/etc/default/security'파일 확인
         AUTH_MAXTRIES=5

root 계정 su 제한

  • 설명
    권한이 없는 일반 사용자가 su명령으로 로그인을 시도하고 패스워드 크래킹을 통해 root 권한을 획득할 수 있다
    su 명령어 사용이 허용된 사용자만 root 계정으로 접속할 수 있도록 설정
    pam_wheel.so 모듈 이용

  • 방법
    wheel그룹(su 명령어 사용그룹)에 su 명령어 사용할 사용자 추가
          usermod -G wheel 계정명   또는 직접 /etc/group 파일 수정
    /etc/pam.d/su 파일에 pam_wheel.so 모듈 추가
          auth required pam\_wheel.so use_uid debug

  • 유닉스/리눅스 시스템별 계정 잠금 임계값 설정
    OS          점검 파일 위치 및 방법
    SOLARIS, LINUX, AIX, HP-UX          1. wheel 그룹 확인
       2. wheel 그룹이 su 명령어 사용할 수 있는지 설정 여부 확인 (p.82)
       3. /usr/bin/su 파일 권한 확인 : 4750(=-rwsr-x---)이면 양호
    LINUX PAM 모듈 이용시          1. wheel 그룹 확인
       2. wheel 그룹이 su 명령어 사용할 수 있는지 설정 확인
          /etc/pam.d/su 파일   auth required /lib/security/pam_wheel.so debug group=wheel
  • sudo 명령
    su보다는 제한적으로 특정 명령어만 root 권한으로 수행할 수 있게 sudo 명령어를 사용하는 것 보안적으로 권장
    sudo 명령 설정파일 : /etc/sudoers 파일

    계정명   호스트명=(실행권한계정명)   [NOPASSWD:]명령어

    • ex)   algisa   ALL=(root,kiwi)   ALL
      algisa 계정은 sudo 명령을 통해 모든 호스트에서 roo, kiwi 계정 권한으로 모든 명령을 실행할 수 있다