패스워드 정책
- 대/소문자, 숫자, 특수문자를 혼용하여 8개 글자 이상의 패스워드를 사용
- 동일 문자를 연속 4회 이상 사용 금지
- 패스워드 히스토리를 관리하여 2~3개 이상의 동일 패스워드 사용금지
- 패스워드 변경주기를 설정(패스워드 유효기간을 90일 이하로 설정)
- 사전에 나오는 쉬운 단어나 이름은 패스워드로 사용하지 못하도록 설정
- 기본 설정된 패스워드는 사용하지 못하도록 설정
- 초기 부여된 패스워드는 사용자 최초 접속 시 변경하도록 설정
공격자 ==> crack(8글자 이상 + 숫자 + 특수문자)
패스워드 정책 설정 파일
Cent OS에서 실행합니다.
[root@localhost ~]# cd /etc/security
[root@localhost security]# ls -l
[root@localhost security]# nano pwquality.conf
dc redit = -1 => 숫자가 최소 1글자는 있어야 함
dc redit = 1 => '숫자 하나만 들어가면 돼'라는 의미
패스워드 기본값 설정 파일
- 사용자 추가할 때 참고하는 메인 디렉터리
- 패스워드 관련 설정(최대 사용기한, 최소 사용기한, 최소 길이, 만기 이전 경고 주는 날짜)
- UID/GID의 최솟값 및 최댓값
- 홈 디렉터리 생성 여부
- 기본 umask 값
- 패스워드에 적용되는 암호화 알고리즘 등이 정의되어 있는 파일
[root@localhost ~]# nano /etc/login.defs
/etc/shadow의 기본값은 어디에서 설정될까? 바로 이 파일에서 가져온 것입니다.
앞으로 생성하는 계정들의 default 값을 바꾸고 싶으면 이 부분을 수정하면 됩니다.
'시스템 계정은 1~999, 일반계정은 1000번 이상이다'라는 것을 지정하는 곳도 이 파일입니다.
PAM을 이용한 인증관리
PAM은 중앙 집중형 인증 시스템입니다.
PAM의 환경설정 파일에 들어가 보겠습니다.
[user@localhost 바탕화면]$ cd /etc/pam.d
[user@localhost pam.d]$ ls
[user@localhost pam.d]$ cat su
su 명령어는 관리자, 일반사용자 모두 사용가능하고, 로컬/원격 모두 사용가능합니다. 이러한 su의 보안정책을 모두 여기에 넣어놓은 것입니다.
관리자 root는 로컬로 다이렉트로 들어가면 안 됩니다. 로컬이든 원격이든 관리자 ID로 로그인하는 것은 막아야 합니다. 관리자가 드러나면 위험하다고 판단하기 때문입니다.
[실습1] 계정 root로 콘솔 로그인 막기
[root@localhost pam.d]# cat gdm-password
인증정책은 사용자인증, 패스워드 정책, 계정 정책, 사용자별 관련 프로세스 연동 정책이 있습니다.
[root@localhost pam.d]# nano gdm-password
[내용입력]
auth required pam_succeed_if.so uid >= 1000
=> pam_succed_if.so : UID가 1000일 경우에만 true 값을 반환하는 모듈 실패 시 아래 라인 실행
root는 원래 로그인을 못하는데 왜 password를 물어보는 창에서 인증실패가 나올까?? 대부분 비밀번호가 틀려서 로그인이 안되었을 것이라 생각합니다.
PAM을 설정 파일 구성
#1 Type
- 어떠 타입의 인증이 사용될 것인지를 알려주는 항목
#2 Control
- PAM이 무엇을 해야할지를 알려줌
=> x는 예를 들어, auth required pam_succeed_if.so uid >= 1000 이 부분에서 pam_succeed_if.so uid >= 1000 값이 false일 때
=> o는 true일 때를 뜻한다.
[/etc/pam.d/system-auth : 로컬 로그인의 인증 설정]
위의 그림에서 auth required pam_succeed_if.so uid >= 1000 이 부분을 보면,
이것이 실행되는 방식은 pam_succeed_if.so uid >= 1000 이 값이 true일수도 있고 false일수도 있습니다. 이 값이 true라면 그때 required가 실행됩니다.
현재 auth 정책이 5개 걸려있습니다. 첫 번째(auth required)가 false가 오면, 그다음 인증을 받습니다. (표랑 같이 봐)
sufficient는 성공일 경우 다음 실행을 하지 않습니다. 실패할 경우 다음을 실행합니다.