[Linux] system-auth, password-auth

 



system-auth: 보통 로컬 로그인 담당.

password-auth: 원격 로그인 담당.


PAM설정은 엄청 비슷하게 보여도 그 순서가 뭐가 위냐 아래냐에 따라서 결과값이 천차만별로 달라질 수 있기 때문에 설정에 각별한 주의가 필요하다.

■CENT OS 6  ■ /etc/pam.d/system-auth


특징: system-auth 에서 설정까지 한번에 다 등록해버림.


password    requisite     pam_cracklib.so try_first_pass retry=5 type= minlen=8 lcredit=-1 
ucredit=-1 dcredit=-1 ocredit=-1
retry=3 : password 변경 때 3번 틀리면 변경 실패
minlen=8 : 최소 8자리 이상의 문자
lcredit=-1 : 최소 1개 이상의 소문자 포함
ucredit=-1 : 최소 1개 이상의 대문자 포함
dcredit=-1 : 최소 1개 이상의 숫자 포함
ocredit=-1 : 최소 1개 이상의 특수문자 포함

■CENT OS 7■  /etc/security/pwquality.conf

특징: pam_cracklib.so -> pam_pwquality.so 로 변경됨.

  minlen = 8              // 최소 암호 길이  
  dcredit = -1            // 패스워드에 숫자 필요
  ucredit = -1            // 패스워드에 영문 대문자 필요
  lcredit = -1             // 패스워드에 영문 소문자 필요 
  ocredit = -1            // 패스워드에 특수문자 필요
=> 

                                -1이 절대값 판정으로 1 과 같다고 함 즉 1개 이상 필요 
  ※ 위 네가지(숫자, 대문자, 소문자, 특수문자)를 모두 포함하는 설정은 "minclass"


<주요 지원 모듈 목록>

1. pam_securetty.so : root 계정인 경우에만 적용되는 모듈로써,

/etc/securetty 파일을 참고하여 해당 파일에 root가 있으면 특정 서비스에 대한 root 접근을 허용하는 모듈.


표준 UNIX securetty를 이용- 검사해서 etc/securetty 파일에 기록된 내용과 비교

 (root계정일 경우만 확인) (root 이외의 계정일 경우, 항상 인증 성공값을 반환함.)

(sufficient < required 인증방법으로 등록하는 것이 표준 사용 방식.)


2. pam_cracklib.so : password를 설정한 정책과 비교, 검사하는 모듈.

- dcredit=N : 숫자문자가 가질 수 있는 크레디트값을 지정. 기본값 1. (이하동문)

- ucredit=N : 대문자가 가질 수 있는 크레디트값을 지정.

- lcredit=N : 소문자가 가질 수 있는 크레디트값을 지정.

- ocredit=N : 특수문자가 가질 수 있는 크레디트값을 지정.

- use_authok : 사용자에게 새 패스워드를 묻지 말고 앞서 실행된 패스워드 모듈에서 받은 것을 사용하도록 모듈에게 강제하는 인자.


3. pam_nologin.so : /etc/nologin파일이 존재하면

                    root만 로그인할 수 있고 다른 사용자들은 에러메시지와 함께 거부됨.

                    /etc/nologin파일이 존재하지 않으면 이 모듈은 성공 리턴.

(이 모듈을 효과적으로 사용하려면,)

1)모든 login방법들(login, rlogin등)이 이걸 사용하도록 해야함.

2) sufficient 모듈 앞에 required로 설정해야 한다.


4. pam_deny.so : 접근을 거부하는데 사용. 응용프로그램에게 always 실패 리턴.

    4.1  모든 계정에 대한 로그인을 막는다:

      ex)  /etc/pam.d/login파일 내:    account    required    /lib/security/pam_deny.so


    4.2 응용프로그램이 사용자의 패스워드를 변경하는 것을 막고

    login이 예전에 사용하던 패스워드가 만료되어

    새 패스워드를 자동으로 묻는 것을 막으려면:

    ex)    /etc/pam.d/login파일 내:     password    required    /lib/security/pam_deny.so


5. pam_wheel.so : su 명령어 사용 인증에 사용.

root 권한을 얻을 수 있는 사용자를 wheel(gid=0)이라는 그룹으로 묶어서 사용하도록 지원하는 모듈.


<PAM 인증 절차 프로세스 과정 예시 >

(출처 : 이글루코퍼레이션 에서 내용 발췌.)

# try_first_pass : 이전 모듈에서 이미 입력받은 패스워드가 있을 경우,

사용자에게 패스워드 입력을 요청하기 전에 먼저 해당 패스워드로 인증을 시도한다.

이전에 입력받은 패스워드가 없을 경우, 사용자에게 패스워드 입력을 요청한다.


'[3]번' 에 주목

    1) auth required : 인증결과가 실패 일 경우 최종 결과가 어떻든 간에 실패 를 반환.

    2) 공격자(일경우) 다음 [4]번으로 넘어가서 패스워드를 입력. (이미 탈취되었을 수도 있는)

    3) 최종값 인증 실패 가 도출된다.

('required' flag의 진면목: 인증 요청자(어쩌면 공격자)는 wheel 그룹에 속하지 않아서 인증 실패가 났음에도 불구하고,

password 입력 요청을 받았고 그 패스워드를 쳐봤기 때문에 단순히 password가 틀려서 생기는 입력 오류라고 생각할 수 있다.

이는 에러 발생 원인이 직접적으로 표출되지 않기 때문에 보안 상 매우 좋다!


++Case1++

[ /etc/pam.d/su ] #            

(1)    auth    required    pam_succeed_if.so    user=sia    quiet

        auth    sufficient    pam_unix_so    try_first_pass

(2)    auth    requisite    pam_succeed_if.so    user=sia    quiet

        auth    sufficient    pam_unix_so    try_first_pass

(비슷해보이지만, 인증 과정과 사용자에게 노출되는 에러문구는 완전히 다르다!)


++Case2++

[ /etc/pam.d/su ] #            

(1)    auth    required    pam_succeed_if.so    user=sia    quiet

        auth   sufficient    pam_unix_so    try_first_pass

(2)    auth    sufficient    pam_rootok.so

       auth    required    pam_succeed_if.so    user=sia    quiet


(답은 이글루 사이트에 확인. 이글루 감사합니다......!!!!)


<참고 사이트>

https://boanchung.tistory.com/24#:~:text=*system%2Dauth%EA%B3%BC%20password%2D,%EC%98%88%EC%99%B8%EC%9D%98%20%EA%B2%BD%EC%9A%B0%EB%8F%84%20%EC%9E%88%EB%8B%A4.

https://se.uzoogom.com/131

Comments