ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 리눅스 shadow 구조
    시스템 2019. 11. 11. 17:26
    반응형

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

    암호화 된 패스워드를 포함하여 사용자 계정 정보를 /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을 수행한 결과입니다.

     

    -SHADOW 패스워드와 관련된 리눅스 명령어

    pwconv 명령어

    일반 패스워드에서 shadow 패스워드로 변경하는 명령어.

    이 명령어가 수행되고 나면 /etc/passwd 의 내용 중 두번째 필드에 있는 암호화된 패스워드 부분만이 /etc/shadow 파일에 따로 저장되게 됨.

    pwunconv 명령어

    shadow 패스워드에서 일반 패스워드로 되돌리는 명령어임.

    이 명령어는 /etc/shadow 파일에 보관되었던 패스워드를 다시 /etc/passwd 파일에 저장 하게 됨.

     

    출처 :

     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

    반응형

    '시스템' 카테고리의 다른 글

    우분투 ipv6 비활성화  (0) 2020.01.02
    리눅스 패킷 Overrun  (0) 2019.12.18
    리눅스 계정 잠금 임계값 설정  (0) 2019.11.11
    리눅스 서버 60초안에 상황파악하기  (0) 2019.10.01
    Centos 소프트웨어 RAID  (0) 2019.04.03
Designed by Tistory.