June/리눅스

리눅스 계정 패스워드 관리(passwd/ shado)

개요

클라우드 환경에서 리눅스는 기본적으로 각 클라우드 공급업체의 계정을 가지고 있다.
ec2-user나 ncloud와 같은 기본계정이 있지만, 일반적으로는 사용자들이 별도의 계정을 만들어서 사용한다.
그렇게 관리가 되어야 각 사용자별로 활동 로그를 남길 수도 있고, 파일이나 서버 내에 구동되는 시스템의 권한 분리가 가능하기 때문이다. 최초에 사용자 계정을 만들게 되면 (PEM이나 PPK와 같은 키파일을 사용할 수도 있지만) 보통 패스워드 설정을 해준다. 어느정도 규모가 있는 서비스라면 패스워드의 변경 주기나 규칙과 같은 관리가 필수보안사항이기 때문이다. 그렇다면 이렇게 계정을 생성하게 되면 어떻게 비밀번호가 관리되고 암호와 알고리즘은 어떤 것들이 있는지를 살펴보자.

리눅스 계정의 암호를 담당하는 파일들

리눅스의 계정을 생성하게 되면 크게 두가지 파일에서 계정의 비밀번호에 대한 정보를 가지게 된다.
첫번째가 passwd 이고, 두번째는 shadow 파일이다
두 파일은 모두 /etc/ 의 하위에 존재하고 있다.

조금 자세히 들여다 보면,
Passwd 파일 내부의 정보 구조는 아래와 같다.
root : x : 0 : 0 : root : /root : /bin/bash
1      2   3   4  5        6        7
중간 중간 구분을 나타내는 ' : ' 에 따라 분류하면,

1: 사용자 계정
2: 사용자 패스워드, x문자가 들어있으며 암호화된 패스워드는 /etc/shadow 에 있음
3: 사용자 ID를 의미함(root의 경우 0)
4: 사용자가 속한 그룹 ID를 의미함(root의 경우 0)
5: 사용자의 코멘트 정보
6: 사용자의 홈 디렉토리
7: 사용자가 기본으로 사용하는 쉘 종류 지정

이다. 하지만 주로 passwd에 있는 정보는 리눅스 서버의 많은 유저가 접근 가능하기 때문에 보안적으로 굉장히 취약한 요소가 되었고, 더 구체적인 사항들은 /shadow 파일에 담기게 되며, 해당 파일은 root만이 확인 가능하다.

Shadow
root : $6werwerae : 15426 : 0 : 99999 : 7 :   :   :
1       2                 3         4    5         6  7  8  9

1: 사용자 계정
2: 패스워드를 암호화시킨 값(비어있다면 패스워드가 필요 없음)
    $1 : MD5
    $2a : Blowfish
    $md5 : MD5
    $5 : SHA256
    $6 : SHA512
3: 1970년 1월 1일부터 패스워드가 수정된 날짜의 일수를 계산한 값
4: 패스워드가 변경되기 전 최소 사용기간(0이면 언제든 바꿀 수 있다는 의미)
5: 패스워드 변경 전 최대 사용기간(일수)
6: 패스워드 사용 만기일 전에 경고 메시지를 제공하는 일수
7: 로그인 접속차단 일 수
8: 로그인 사용을 금지하는 일 수(월/일/연도)
9: 예약 필드로 사용되지 않음

위와 같이 구분된다. 
하지만 여기서 중요한 것은 shadow 파일의 2번째 항목이다.
별다른 설정을 해주지 않았다면 기본적으로는 $1을 가져가게 되고 이는 곧 MD5 알고리즘으로 패스워드가 암호화 됬다는 뜻이다. 해당 사항은 매우 취약한데 그래서 기본적으로 $5나 $6의 방식으로 암호화를 권장한다.

패스워드 암호화 알고리즘 변경

패스워드 암호화 같은 경우는 authconfig라는 커맨드를 통하여 변경 작업을 할 수 있다.

authconfig --test | grep hashing
authconfig --test | grep password
authconfig --passalgo=sha512 --update

맨 아래의 문장에서 sha512와 같이 암호화 방식을 5개 중 하나를 선택하여 변경하면 된다.
변경 후에는 반드시 암호를 재설정해주어야 한다.