2019년 3월 5일 화요일

[리눅스] 패스워드 관리 - shadow의 구조

리눅스 시스템의 패스워드 관리 방법

- 리눅스에서는 사용자의 정보를 /etc/passwd 파일에 보관합니다.
- passwd파일의 수정은 불가하지만 누구나 볼 수 있습니다.
- 과거에는 패스워드 정보도 함께 포함되었지만, 보안상의 이유로 /etc/shadow 파일에 별도 보관됩니다.
- shadow파일은 root만 읽을 수 있도록 설정되어 있습니다. (퍼미션 400)

- shadow에 저장되는 패스워드는 단방향 해시함수에 의하여 암호화됩니다.
  "A > B"는 가능하지만, "B > A"는 어렵습니다.
- 패스워드는 임의의 값(salt)과 추가 연산되어 보안을 강화하여 저장됩니다.


shadow의 구조 
- 9개 항목으로 구성되며, 각 항목은 콜론(:)으로 구분됩니다.
 1. Login Name: 사용자 계정
 2. Encrypted: 패스워드를 암호화시킨 값 (다시 3개의 항목으로 나뉘며, "$"로 구분됩니다.)
 3. Last Changed: 1970년부터 1월 1일부터 패스워드가 수정된 날짜의 일수를 계산
 4. Minimum: 패스워드가 변경되기 전 최소사용기간 (일)
 5. Maximum: 패스워드 변경 전 최대사용기간 (일)
 6. Warn: 패스워드 만기일 전 경고 메시지 제공 기간
 7. Inactive: 로그인 접속 차단(패스워드 파기/비활성화) 기간
 8. Expire: 로그인 사용을 금지하는 계정 만료 기간 (월/일/연도)
 9. Reserved: 사용되지 않음 (예약필드)



**암호화된 패스워드는 다음의 구조로 저장됩니다.
 [$Hashid $Salt $Hash vlaue]
Hashid 
- 어떤 "scheme"을 사용했는지 표시합니다.]
- 사용한 scheme에 따라 값이 달라지며, 주로 $1, $5, $6이 사용됩니다.

Salt 
- 해시함수의 특성상 해시 값으로 원래 값을 구할 수 없습니다.
- 공격자들은 모든 해시 쌍을 미리 구해놓은 "레인보우테이블"을 사용하여 크래킹을 시도합니다.
- 이를 통해 값을 대입하여 고속으로 패스워드를 크랙할 수 있습니다.
- 레인보우 테이블의 사용을 방해하기 위하여 "salt" 값을 넣습니다.
- salt는 해시 함수가 참고하는 임의의 값입니다.
- salt값을 모른다면 레인보우테이블을 가지고 있어도 의미가 없습니다.

Hash value 
hashid의 방법과 salt값을 가지고 해시함수를 수행한 결과입니다.



참고자료

댓글 없음:

댓글 쓰기

[Network] DMZ의 정의

DMZ (De-Militarized Zone) - 보안을 위하여 내부/외부 네트워크를 분리할 때,  외부로 서비스는 제공 하면서  내부의 보안을 유지 하기 위한 방법입니다. - 내부망과 외부망 사이에 위치한 네트워크입니다. ...