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 : 특수문자가 가질 수 있는 크레디트값을 지정.
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
Post a Comment