ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • /etc/passwd & /etc/shadow
    System 2024. 8. 19. 14:19

    /etc/passwd

    사용자 계정 정보를 관리하는 파일

    UNIX / LINUX 사용자 관리

    • 시스템을 이용하는 사용자 계정과 인증을 관리
      • passwd 파일에 사용자 계정 비밀번호를 저장
      shadow 패스워드 정책
      • shadow 파일에 암호화 하여 비밀번호를 저장 후 root 계정만 접근 가능
    • 일반 패스워드 정책

    passwd 파일 구조

    [user_account] : [user_password] : [user_ID] : [group_ID] : [comment] : [home_directory] : [login_shell]

    user_account

    • 사용자 계정명, root 계정은 시스템에 대한 총괄 권한을 가지고 있는 계정으로 공격자의 목표가 될 수 있으므로 원격 접속을 금지하는 것이 보안상 안전하다.
    • 일반적으로 root 계정으로 su(switch user) 명령을 허용하는 계정 그룹을 생성한 후 해당 계정으로 접속 후 root 계정으로 전환하여(su 명령) 사용한다.

    UID

    • 사용자 ID(User ID), root 계정의 경우 0으로 부여한다.
    • UID는 중복되어 사용될 수 있으며 동일한 UID가 부여된 계정은 계정명이 달라도 동일한 권한을 부여받는다. 따라서 임의로 생성된 계정에 UID가 0으로 부여되어 있다면 root 권한 탈취를 위한 행위로 의심해 보아야 한다.

    GID

    • 사용가 기본 그룹ID(Group ID), root 그룹의 경우 0으로 부여한다.
    • GID도 UID와 동일하게 중복되어 부여될 수 있으므로 임의로 생성된 그룹에 GID가 0으로 부여되어 있는지 점검하여야 한다.

    comment

    • 설명, 사용자 관련 기타 정보로 일반적으로 사용자 ID를 설정한다.

    home_directory

    • 홈 디렉터리, 로그인에 성공한 후에 사용자가 위치할 홈 디렉터리로 root 계정은 /root 디렉터리를 사용하며 일반 사용자는 /home 디렉터리 하위에 위치한다.

    login_shell

    • 로그인 쉘(shell), Linux의 경우 기본 쉘로 bash shell을 사용하며, 로그인이 불필요한 계정(일반적으로 시스템 및 어플리케이션 계정)에 대해서는 로그인을 금지하는 것이 보안 상 안전하다.

    💡 사용자 로그인 쉘(7번 필드)점검 로그인이 불필요한 계정에 대해서는 로그인을 금지하도록 설정하여 공격자에 의한 불법적인 시스템 접근에 악용되지 않도록 해야한다 → 해당 계정의 로그인 쉘을 /sbin/nologin 또는 /bin/false로 설정한다

    /sbin/nologin : FTP SSH 서비스를 비롯하여 시스템의 로그인이 불가능하다. 또한 홈 디렉터리를 사용할 수 없다 /bin/false : SSH 접근 및 홈 디렉터리 서비스는 사용이 불가능하지만 FTP 서비스는 사용 가능하다

     

    /etc/shadow

    /etc/shadow 파일에 암호화된 패스워드가 저장되도록 하고 관리자만이 읽을 수 있도록 제한하여 구현할 수 있다.

    shadow 파일에는 계정별로 암호화된 패스워드 정보와 패스워드 에이징(aging) 정보가 저장되어 있다. 패스워드 에이징 정보는 시간의 흐름에 따른 패스워드 관리 정책을 말한다.

    [user_account] : [encrypted_password] : [last_change] : [minlife] : [maxlife] : [warn] : [inactive] : [expires]

    user_account

    • 사용자 계정명

    encrypted_password

    • 암호화된 패스워드

    last_change

    • 마지막으로 패스워드를 변경한 날 (1970년 1월 1일 기준으로 지난 일수로 표시)

    minlife

    • 패스워드 최소 사용기간 설정으로 패스워드를 마지막으로 변경한 날 이후부터 패스워드를 변경할 수 없는 일수를 의미한다.
    • 패스워드 최소 사용기간을 설정하지 않으면 익숙한 패스워드를 재사용할 문제점이 있으므로 1일(혹은 1주)로 설정할 것을 권장한다.

    maxlife

    • 패스워드 최대 사용기간 설정으로 패스워드를 마지막으로 변경한 날 이후부터 패스워드 만료 일수를 의미한다.
    • 패스워드 최대 사용기간을 설정하지 않으면 패스워드 유출 발생 시 공격자의 계속적인 접근이 가능하므로 90일(12주)로 설정할 것을 권장한다.

    warm

    • 패스워드 만료 이전 경고 일수

    inactive

    • 패스워드가 만료된 이후 계정이 잠기기 전까지의 비활성 일수로 해당 비활성 기간 동안 패스워드를 변경하지 않으면 계정이 잠기게 된다.
    • Unix 계열에서는 마지막 로그인 이후 비활성 일수 동안 로그인을 하지 않으면 계정을 잠근다는 의미로 Linux와 차이가 있다.

    expires

    • 계정 만료일 설정으로 1970년 1월 1일을 기준으로 일수로 표시한다.

    💡 encrypted_password 구성

     

    encrypted_password 필드는 $ID$Salt$encrypted_password 형식으로 되어있다.

    ex) $1$1Tyc0bAE$CGxLH0klyFWnzMvAHFLFZ

    ID는 암호화에 적용된 일방향 해시 알고리즘을 식별하기 위한 ID로 1:MD5, 2:Blowfish, 5:SHA-256, 6:SHA-512를 의미한다. 최근에는 MD5 알고리즘이 더 이상 안전하지 않기 때문에 SHA-256 이상의 해시 알고리즘이 권장된다.

    정리

    1. UNIX / Linux 패스워드 정책에는 /etc/passwd와 /etc/shadow 2가지 정책이 존재
    2. passwd 파일의 로그인 쉘을 점검하여 로그인이 불필요한 계정에 대한 접근권한 설정
    3. shadow 파일은 암호화된 패스워드를 가지고 있어 보안 상 shadow 정책을 사용하는 것이 안전

    'System' 카테고리의 다른 글

    PAM (Pluggable Authentication Modules)  (0) 2024.08.19
    su root / sudo su 차이  (0) 2024.08.19
Designed by Tistory.