유닉스를 기반으로 파생된 모든 리눅스 시스템은

암호화된 패스워드를 포함하여 사용자 계정 정보를 /etc/passwd 파일에 보관합니다.

그러나 이 파일은 수정은 못하지만 누구나 볼 수 있습니다.

이런 이유로 해커들이 crack과 같은 툴로 사용자들의 패스워드를 알아낼 수 있습니다.

shawdow 패스워드를 사용하게 되면 /etc/passwd 에 있는 패스워드 부분을

/etc/shadodw 에 두고 root 만이 읽을 수 있는 퍼미션(400)으로 설정해 두게 됩니다.

기존의 /etc/passwd 누구나 읽을 수 있지만 /etc/shadow 는 root 만 읽을 수 있습니다.
/etc/passwd/ 파일이 암호화되어 저장되어있지만 누구나 읽을 수 있기 때문에
암호를 해독하고 사용하는 게 어렵지 않습니다.

이런 이유로 패스워드는 실제로 root 와 superuser 만 볼 수 있는 /etc/shadow 파일에 보관되어 있습니다.

[shadow 패스워드의 기능]

  •  실제로 암호화된 패스워드들을 일반 사용자는 보지 못하도록 /etc/shadow 파일에 저장할 수 있습니다.
  • Encrypted group 패스워드들과 group administrator에 대한 정보를 대체되는 파일에 저장할 수 있습니다.
  • 사용자의 패스워드의 최대 길이를 8자에서 16자로 늘여줍니다.
  • 패스워드가 일정 기간 경과하면 사용자로 하여금 패스워드를 바꾸도록 합니다.

자세한 설명을 위해 shawdow 파일의 구조를 살펴보겠습니다.

[vi /etc/shadow 구조]

root:$6$5H0QpwprRiJQR19Y$bXGOh7dIfOWpUb/Tuqr7yQVCqL3UkrJns9.7msfvMg4ZO/PsFC5Tbt32PXAw9qRFEBs1254aLimFeNM8YsYOv. : 16431 : 0 : 99999 : 7 : : :

|-1–|———————————–2——————————————————————————————————————————————-|—3—|-4-|—5–|-6-|-7-|-8-|

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

*여기서 2번 항목 앞쪽 부분을 잘 보시면 $ 로 구분이 지어져 있습니다.
이 구분은 다음과 같은 값이 적용됩니다.

[$Hashid $Salt $Hash vlaue]

– Hashid

어떤 scheme 를 이용해 hash 를 했는지 보여줍니다.

아래 표와 같이 어떤 scheme 를 사용했느냐에 따라 id 값이 달라지며 주로 많이
사용되는 것은 $1, $5, $6입니다.

– Salt

해시는 단 방향 함수입니다.

다시 말하면, A->B는 가능하지만 B->A는 불가능하다는 뜻입니다.
결국 해시를 하고 난 값을 가지고 해시 하기 전의 값을 못 구한다는 뜻입니다.
그래서 이를 공격하기 위해서 해커들은 레인보우테이블을 미리 구해둡니다.
레인보우테이블은 모든 해시 쌍들을 구해놓은 것으로,
이를 통해 해시값들을 대입하여 고속으로 패스워드를 크랙할 수 있게 합니다.<
일반 사용자는 아무리 비밀번호를 어렵게 해도 이에 대한 해시 값만 해커가 대입을 한다면
패스워드가 노출될 수 밖에 없습니다.
그래서 이를 좀 더 어렵게 하기 위해 salt 를 넣습니다. salt 는 해시를 하기 전에 랜덤한 값을 참고하는데,
해커가 salt 값을 모른다면 레인보우테이블을 가지고 있어도 의미가 없습니다. 해당 salt 따른 값이 아니기 때문입니다.

-Hash value

hash value 는 hashid 에 따른 해시 방법과 salt 값을 가지고 hash function 을 수행한 결과입니다.

출처 :

https://www.linux.co.kr/home/lecture/?leccode=474
http://idchowto.com/?p=10251
http://www.yourownlinux.com/2015/08/etc-shadow-file-format-in-linux-explained.html