Linux의 인증과 권한 관리

00SNU3K·2021년 8월 9일

01. Password File

  • Linux 시스템을 사용하려면 로그인을 해야함, 사용자 ID와 PW가 필요함

  • PW를 입력하면 Linux는 /etc/passwd 파일에는 해쉬로 암호화된 PW가 있지만, /etc/passwd에 PW를 저장하지 않고 /etc/shadow에 저장할 수도 있음

    • passwd->shadow : pwconv 명령어 사용
    • shadow->passwd : pwunconv 명령어 사용
  • /etc/passwd 파일 구조

    • root : x : 0 : 0 : root : /root : /bin/bash

      (1) :(2):(3):(4) : (5) : (6) : (7)

      1. 사용자 계정
      2. PW, PW를 암호화한 값, 만약 x로 되어 있으면 /etc/shadow 파일에 PW가 저장됨
      3. User ID, 만약 0일 경우, root를 의미
      4. User Group ID, 만약 0일 경우, root 그룹을 의미
      5. Comments, 사용자의 코멘트 정보를 적는 곳
      6. Home Directory : 사용자의 홈 디렉터리를 지정
      7. Shell : 사용자가 기본으로 사용하는 셸 종류가 지정됨
  • /etc/shadow 파일 구조

    • root : $1Fz4q1Gje/ : 14806 : 0 : 99999 : 7 : : :

      (1) : (2) : (3) : (4) : (5) :(6):(7):(8):(9)

      1. 사용자 계정
      2. Encrypted PW, PW를 암호화한 값
      3. Last Changed, 1970년 1월 1일부터 PW가 수정된 날짜의 일수 계산
      4. Minimum, PW 변경 전 최소 사용기간(일수)
      5. Maximum, PW 변경 전 최대 사용기간(일수)
      6. Warn : PW 사용 만기일 전에 경고 메시지를 제공하는 일 수
      7. Inactive : 로그인 점속차단 일 수
      8. Expire : 로그인 사용을 금지하는 일 수 (월/일/연도)
      9. Reserved : 사용되지 않음
  • Linux에서 PW 만료날짜를 확인하는 명령

    • chage -I <사용자명>

  • Join the ripper를 사용한 패스워드 크래킹(Cracking)

    • 크래킹(Craking)?

      • PW를 알아내기 위한 공격
      • 수학적인 해독이 아닌, 평문 X -> 암호문 Y가 나오는것을 알고 있을때 이러한 쌍을 여러개로 파일에 저장하고 무작위로 계속 입력하는 것
      • Join the ripper 도구는 패스워드 파일을 지정해서 크랙할 수 있는 도구
      • format 옵션은 어떤 암호화 알고리즘을 사용했는지 지정
      • /root/passwd.txt는 평문과 암호문이 저장된 파일
    • john --format=raw-MD5 /root/passwd.txt --crack-status

  • Linux의 PW 변경

    • /etc/passwd 파일 수정한다??

    • 파일 소유자인 root만 읽기/쓰기가 가능함, 따라서 수정 못하네?

    • ㄴㄴ, 패스워드를 변경하려면 passwd 프로그램을 실행해야 하고, 이 프로그램이 /etc/passwd파일을 수정하하는 방식임, passwd 프로그램은 /usr/bin/passwd에 있는데

    • 실행 권한을 나타내는 x field에 소문자 's'는 특수 권한, 실행 시 해당 파일의소유자의 권한으로 실행

    • 이 파일의 소유자는 root라서 root, 같은 그룹, 다른 사용자도 모두 실행 가능

    • 일반 사용자도 순간적으로 소유자인 root의 권한을 획득 => 이를 특수 권한인 setuid라고 함

02. Linux 권한 관리

  • Linux의 권한 관리

    • 소유자, 그룹, 다른 사용자

    • 읽기 r, 쓰기 w, 실행 x

    • 파일을 만들때마다 사용자가 매번 권한을 부여하기는 귀찮음-> Default 권한

    • 이러한 Default 권한 값을 가지고 있는 것이 unmask

    • umask명령어를 통해 umask값 확인, 0022 라면

      • 천의 단위 : 0은 특수권한, 4000 = setuid, 2000 = setgid, 1000 = sticky 비트
      • 백~일의 단위 : 0은 소유자 - 2는 그룹 - 2는 다른사용자를 의미하며 6에서 빼서 의미를 확인할 수 있음
    • 666 - 022 = 644

      • 6은 rwx가 220, 즉 읽기와 쓰기만 가능
      • 4는 rwx가 200, 즉 읽기만 가능
    • 단, Directory 생성을 mkdir 명령을 통해 생성하면 Default 권한이 666이 아닌,777 - 022 = 755가 됨

    • 따라서 보안상 가장 안전한 umask 설정 값은 Directory 생성을 고려해서 unmask 077이라고 할 수 있음.

      • 777-077 = 700, 즉 파일 소유자만 읽고 쓰고 실행할 수 있기 때문.
  • Linux의 권한 변경
    • chmod 권한값 파일명 : 예로 chmod 777 test.txt , 최고권한은 777, 각자 rwx 알지?ㅇㅋ
    • chmod 권한의미 파일명 : 예로 chmod u+x, g+w, o-r test.txt
      • user의 권한에 실행 권한을 추가하고, group에 쓰기 권한을 추가하고, other 사용자에 읽기 권한을 회수해라.

03. Linux의 특수 권한 관리(x field)

  • setuid

    • setuid 권한 설정된 파일이 실행되면 그 파일의 소유자 권한으로 실행됨
    • chmod 4000 해당실행파일
    • x field 에 s 로 setuid설정
      • 소문자 s : 실행 파일에 setuid를 설정할 때 -> 정상 실행 가능
      • 대문자 S : 실행파일이 아닌데 setuid를 설정할 때 -> 실행 불가
  • setgid

    • 파일 생성자의 그룹 소유권을 얻는 것
    • 특정 사용자가 해당 Directory에 쓰기 권한이 없을때, root가 chmod 2777 해당Directory 으로 setgid를 부여하면 다른 사용자가 해당 Directory에 쓰기를 할 수 있다
    • 예로) 메일박스(MBox)

      - /var/mail Directory는 소유자가 root이고 그룹이 mail이며 setgid가 설정되어 있음
      - 때문에 일반 사용자는 메일 계정을 생성할때 /var/mail에 자신의 Directory를 생성하고 메일을 보관할 수 있게 됨
  • sticky bit

    • 공용 Directory를 만들어 누구나 자유롭게 사용할 수 있도록 함

    • chmod 1000 해당Directory

    • 해당 Directory는 누구나 자유롭게 사용할 수 있지만, 해당 Directory삭제는 소유자만(root 제외) 가능하다.

    • 예로) /tmp Directory를 확인하면 drwxrwxrwt로 나타나며, 여기서 t라는 것은 sticky bit가 설정되어있음을 의미함

  • 특수 권한 파일 검색

    • find / -perm 4000 -print 등등... 숫자만 4, 2, 1 으로 바꾸면 됨

    • 하지만, 실제 4000을 검색했을때는 정확하게 4000권한이 있는 파일만 검색함(대문자 S만 있는..). 소문자 "s" 로 설정된 파일은 검색하지 못함

    • 따라서, find / -perm 4755 -print로 하면 실행 권한을 가지고 있는 setuid를 찾을 수 있음.

    참고.

  • ls 명령어 상세 내용

    • (1)          (2)(3)   (4)   (5)  (6)    (7)   (8)
      drwxr-xr-x    2 root root  4096  6월 29 14:54 bin
    • (1)은 10글자로 첫 글자는 d, l, - 처럼 이루어져 있으며 l은 링크, -는 파일을 의미

    • (2)는 하드링크 번호로 링크된 파일의 수를 의미

    • (3), (4)는 소유자, 소유 그룹의 이름을 의미

    • (5)는 byte 단위의 파일 크기, 보통 4096이면 Directory임

      • 용량이 너무커서 보기 힘들면 -h 옵션을 추가하면 4.2M, 3.3K처럼 쉽게 읽을수 있음
    • (6), (7)은 파일 생성 또는 수정 일자

    • (8)은 파일 및 Directory 이름

profile
네트워크 전문가를 꿈꾸며

0개의 댓글