본문 바로가기

정보보안기사 실기

정보보안기사 _ 3일차 _ 시스템 기본 학습 _ Unix/Linux 기본 학습

시스템 기본

 

시스템 접근 (로그인, 로그아웃)

1. 로그인 과정

  1) 사용자 계정과 패스워드를 입력시 로그인 담당하는 프로그램이 입력 패스워드와 /etc/passwd 파일의 해당필드 비교

     (유닉스는 모든 과정이 별개의 프로그램으로 실행된다 - 라는 설명은 유닉스가 리눅스랑 다르다고 말하는거지?)

  2) 패스워드 확인 후 로그인 프로그램은 쉘이 사용할 변수(??)들을 근거로 초기 환경을 설정한다. 

      HOME, SHELL, USER, LOGNAME 변수들은 /etc/passwd 파일에 기록된 정보로 값이 설정된다.

      밑줄의 말은 알겠고, 쉘이 사용할 변수를 근거로 초기 환경을 설정한다는건 무슨 말인지....

      /etc/passwd 파일에 설정되어있는 변수를 말하는 것 같다..

      - HOME 변수 : 사용자의 홈 디렉토리 지정

      - SHELL 변수 : 로그인 쉘 지정

      - USER 또는 LOGNAME 변수 : 사용자의 사용자 계정(로그인 이름)을 지정

  3) 모든 절차가 끝나면 로그인 쉘 실행

  4) 로그인 쉘(/bin/sh, /bin/csh, /bin/ksh 등)은 일반적으로 /etc/passwd 파일의 마지막 필드에 정의되어있다.

     쉘은 사용자가 입력한 명령어를 해석하고 처리하는 기능을 한다.

 

2. 로그아웃 

   UNIX 시스템 로그아웃 명령어는 logout, exit 아니면 키보드의 Ctrl + d

 

사용자 정보

1. /etc/passwd 파일

  1) UNIX는 시스템 관리자가 사용자 계정 만들 때 마다 해당 사용자 관련 정보 /etc/passwd에 저장

  2) passwd 파일은 UNIX 시스템 이용시 필요한 기본 정보 담겨 있음

     파일의 각 라인은 개별 사용자 정보로 이루어짐, 7개 필드로 구분, 구분자 : 사용해 표현

  3) 형식 

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

       [user_account] : 사용자 계정명

       [user_password] : 사용자 패스워드, x 로 표시되어 있으면 shadow 패스워드를 사용한다는 뜻

       [user_ID] : 사용자 ID (UID)

       [group_ID] : 그룹 ID (GID)

       [comment] : 사용자 관련 기타 정보(코멘트, 별도로 설정 안하면 계정명 그대로)

       [home_directory] : 로그인에 성공한 후 사용자가 위치할 홈 디렉토리

       [login_shell] : 로그인 쉘

 4) 해킹시 주로 UID, GID를 0으로 변경한다. 시스템이 UID, GID 정보 참조해 권한 부여할 때가 많아서이다.

    계정 이름이 root가 아니라도 UID, GID가 0 이면 root가 되는 것

    이는 윈도우의 보안식별자 SID가 500번인 것과 같은 개념

 5) UID, GID가 0으로 변경 된 계쩡이 있는지 주기적 확인하여 취약점 제거해야 함

    로그인 쉘을 변경해 사용자가 로그인 시 악성 쉘이 실행되게 하는 경우도 있음

 

2. 사용자 확인

  1) UNIX 시스템에 접속중인 사용자를 확인하려면 id명령 사용, UID와 GID를 출력해줌

     id , id algisa

 

3. 패스워드 변경

    사용하던 패스워드를 변경하거나 패스워드가 없는 사용자 계정에 패스워드 부여시 passwd 명령 사용

    일반 사용자는 자신의 패스워드만 변경할 수 있지만 수퍼 유저는 자신 포함 등록된 모든 사용자 패스워드 변경가능

 

그룹정보

1. 그룹명과 그룹 ID

  1) UNIX 시스템은자원 접근 및 보안 등의 관리 목적 사용자와 사용자가 소속된 그룹에 대한 식별 필요

  2) UID, GID는 사용자와 그룹을 식별하는 식별자, 유일한 정수값 (UID가 1002 인데 두 명에게 할당된 경우는 없다고)

   

2. 기본그룹과 보조그룹

  1) UNIX 시스템은 자원의 소유주가 소속된 그룹에 별도의 접근권한을 지정할 수 있음

     같은 그룹에 소속된 사용자는 자원에 대해 동일한 접근 권한을 가짐

  2) UNIX 시스템의 사용자 계정은 하나의 기본그룹(Primary Group)과 복수의 보조그룹(Secondary Group)에 소속가능

     (몰랐던 사실이네. 여러그룹에 소속될 수 있다는 것은 알았는데 메인이 꼭 있어야하나부지)

  3) 기본그룹은 사용자가 자원(파일 등) 생성시 해당 자원의 소유그룹을 지정하는데 사용되며

     /etc/passwd 파일의 4번째 필드에 명시

 

여기서 /etc/passwd 파일 필드 다시 외우기

 사용자 계정명 : 패스워드 : UID : GID : 설명(코멘트) : 홈디렉토리 : 쉘

    

3. /etc/group 파일

  1) /etc/group 파일은 현재 시스템에 정의된 모든 그룹의 정보 저장

    cat /etc/group 오르 확인 (실제로 해보면 내가 만들지 않았어도 기본적으로 그룹 겁나많음)

  2) 형식

    [group_name]:[unvariable]:[group_ID]:[user_account_entry_in_group]

 

    [group_name] : 그룹명

    [unvariable] : 그룹의 암호화된 패스워드 (여기서 x는 shadow가 아니고 안쓴다는 뜻)

    [group_ID] : 기본 그룹 ID(GID)로 그룹명을 대신하는 정수형 숫자

    [user_account_entry_in_group] : 소속된 사용자 계정들

 

    

 

4. 입출력 재지정(I/O Redirection)

  1) 입출력 대상으로 표준입력, 표준출력, 표준 에러를 사용하지 않고 다른 경로인 파일로 재지정하는 것

     (이 말 자체가 나한테는 좀 이해가 안된다. 화면에 출력되는걸 표준 입출력 이라고 하는건가)

     (그냥 텍스트파일 추출할때 쓰는 기능이라고만 생각했었는데)

     * 표준 입력(Standard input)은 프로그램에 입력되는 데이터의 표준적인 출처(장비나 파일)를 일컬으며

       stdin 으로 줄여 표현한다. 유닉스 쉘에서는 표준 입력이 키보드로 설정되어 있다.

      (c언어때 많이 본 단어네)

  2) 키보드(표준입력)에서 들어오는 입력을 파일에서 받도록 대체하는 것을 입력 재지정(Input Redirection) 이라 함

  3) 명령의 실행 결과나 에러 상황을 화면(표준 출력, 표준 에러)에 출력하지 않고 파일로 대체하는 것을 출력 재지정

    (Output Redirection)

  4) 입력 문법

    who -l > who.txt (출력 파일 존재시 새롭게 출력한다, 덮어쓴다고)

    who -l >>who.txt (출력 파일 존재시 추가하여 출력한다)

 

5. 파이프(Pipe) (실무에서 나는 이걸 거의 이해를 못했었음, 그니까 쓰던 것만 쓰고 응용을 못함)

  1) 둘 이상의 명령을 함꼐 묶어 출력 결과를 다른 프로그램의 입력으로 전환하는 기능

  2) 명령어와 명령어 연결은 "|" 기호 사용, 선행 명령의 출력 데이터가 후행 명령의 입력 데이터로 전달

    * 우선 명령어가 명령어지 거기에 데이터를 입력하는 경우 자체를 내가 잘 못 떠올리는 것 같음

  3) 입력 문법

     ls -l | more (명령 결과를 끊어서 보여줌)

      * more  명령어를 치면 usage 에서 more [options] file ... 이라고 나오면서 옵션 설명이 있는데

        결국 more 라는 명령어 자체가 어떤 파일명 같은 것을 을 입력어로 가져야 하는 것이고 

        그렇기 때문에 ls -l 이나 cat /etc/group 같은 출력의 결과를(표준출력을) 입력어로 가져갈 수 있는거네

     ps -ef | grep vsftpd  (명령 결과에서 vsftpd 문자열을 포함하는 행만 필터링해서 결과로 보여줌)

      * grep 도 grep [option] ... PATTERN [FILE] 이라는 구조로 되어있으므로... (그 때도 grep 에서 이해하길 넘어갔던)

 

6. 파이프(Metacharacter)

  1) 쉘 명령에서 일부 문자들은 사전에 정의된 특별한 기능이 있다. (쉘 스크립트던가 이게)

    이런 문자들을 Shell Metacharacter (특수문자)라고 하며 정의된 기능대로 동작함

    ~ 홈 디렉토리

    . 현재 디렉터리

    .. 상위 디렉터리

    # 주석

    $ 쉘 변수

    & 백그라운드 작업

    * 문자열 와일드카드

    ? 한 문자 와일드카드

    ; 쉘 명령 구분자

    | 파이프

    < 입력 재지정

    > 출력 재지정

 2) 사용방법 

    cd ~ (현재 위치와 상관없이 홈 디렉토리로 바로 이동)

    ls ?a? 3글자로 된 파일들 중 가운데 a가 들어간 파일만 출력

 

파일시스템 응용

 

1. 개요

물리적인 저장장치(하드디스크)에 파일을 생성, 저장, 관리하기 위한 논리적인 자료구조를 파일시스템 이라고 한다.

물리적인 디스크는 논리적인 파티션으로 나뉘어지며, 각 파티션별로 구유한 파일시스템을 생성(NTFS, EXT2, EXT3, EXT4)

(무슨 말이야...)

 

무튼 그림 설명을 보면 하드가 파티션으로 나누어져 있고

그 파티션별로 부트블럭, 수퍼블럭, 아이노드 리스트, 데이터 블록이 있어 파일시스템을 구성하네

데이터 블록은 왠지 우리가 아는 그 데이터 블록이라서

 

2. 파일시스템 구성

 1) 부트 블럭(Boot Block)

    운영체제를 부팅하거나 초기화하기 위한 부트스트랩 코드를 담고 있는 블럭

    (듀얼부팅 하는건 파티션별로 다른 운영체제를 깔았던건가? 왜 이게 파티션별로 있지)

 2) 슈퍼 블럭(Super Block)

    해당 파일시스템을 관리하기 위한 정보를 담고 있는 블럭 (?? 그래서 무슨정보?)

 3) 아이노드 리스트

    inode number : 파일시스템 내에서 해당 파일을 식별하기 위한 고유한 식별자

    파일 타입 : 일반파일, 디렉터리, 장치파일 등 파일유형

    접근 권한 : 파일에 대한 접근권한

    link count : 해당 inode를 참조하는 링크 개수(하드링크 카운트)

    소유자 : 파일의 소유자 UID

    소유그룹 : 파일의 소유자 GID

    파일 크기 : 파일크기

    MAC Time : Modification, Access, Change 타임

      - last Modification Time : 파일의 내용을 마지막으로 수정한 시간

      - last Access Time : 파일을 마지막으로 접근한 시간

      - last Change Time : 파일의 속성을 마지막으로 변경한 시간

        파일의 속성은 inode 정보를 의미, (소유자, 접근권한 등의 속성이 변경되면 이게 변경됨)

    Block index : Data blocks에 저장되어 있는 파일 내용에 대한 색인 정보

 

   위의 것들이 파일들에 대한 속성정보를 담고 있는 inode 구조체 리스트로 이루어져 있음(구..조체?)

   각 파일의 속성 정보는 위와 같은데 inode에는 파일명이 없으며 파일명은 디렉터리를 통해 관리됨

   침해 사고가 발생하면 피해 시스템 파일에 대한 무결성 확인을 위해 타임라인 분석 수행

   이 때 inode 구조체의 MAC Time 을 점검함

   특정 파일의 inode에 대한 속성 정보는 stat(Linux) 명령을 통해 확인할 수 있다.

 

4) 데이터블록

  실제 파일의 내용(데이터)이 저장되는 블럭

  고정크기 block 들로 이루어져 있다

 

* 이해 안되는 부분은 이 파일시스템이 그래서 결국 한 파티션 이라는거냐 , 파일에 대한 것이라는 거냐

  그 부분이 애매하다고 생각한다. 왜냐면 stat 명령으로 inode 정보를 파악할 때에는.... 파일명이 옵션이자너

 

 

파일시스템과 링크(link) 파일

1) 개요

링크란 윈도우의 바로가기 아이콘처럼 기존 파일에 대한 또 다른 접근 포인트를 만들어주는 기능

링크에는 하드링크와 심볼릭 링크가 있다.

입력 문법 -s (이 옵션이 있으면 심볼릭, 없으면 하드 링크 만든다)

 ln /user/local/include/mylib.h ~/work/include/mylib.h

 ln -s /usr/local/include ~/work/include

하드링크는 파일에만 링크하고, 심볼릭 링크는 파일 또는 디렉터리에 링크 가능

 

2) 하드링크

 기존 파일과 동일한 inode number를 가지는 파일 생성

 inode number는 파일시스템별로 고유한 값이기 때문에 동일 파일시스템 내에서만 하드링크 가능, 디렉터리는 불가

 (이게 무슨말이지, 같은 파티션 내에서만 된다는 ... 뜻 이지?)

 하드링크 파일 생성시 해당 inode의 링크카운트가 1 증가 (stat 파일명.확장자)

 파일 삭제시에는 링크 카운트를 1 감소시킨 후 그 값이 0이 되었을 때 해당 파일의 inode 정보 및 데이터 삭제

 (inode를 참조하는 파일이 있으면 삭제하지 않는다, 링크 걸려있으면 삭제가 안되나봐)

 

3) 심볼릭 링크

 동일 파일시스템 내에서만 링크가 가능한 하드링크의 단점을 보완

 원본 파일에 대한 파일 경로를 파일 내용으로 하는 새로운 파일 생성해 접근하는 방식

 하드링크와 달리 inode number 아닌 파일 경로를 기반으로 하므로 파일시스템에 제한 없으며 디렉토리도 가능

 원본 파일이 삭제되거나 이동하게 되면 해당 경로가 바뀌게 되므로 심볼릭 링크 파일은 링크 끊어짐

 

내가 이해한 것

바로가기를 생성하는 건데, 하드링크는 링크넘버 증가하면서 생성하고 링크 연결되면 삭제불가

심볼릭링크는 링크넘버 증가 안하고 링크 연결되어도 삭제 가능, 디렉터리 가능

그리고 실습해보니 어쩌면 동일 파일시스템의 의미가 동일 디렉터리일지도 모르겠음

오 또 그건 아님 다른 디렉터리여도 이거 됨 그럼 진짜 동일 파티션 내의 의미인가보다. -_-.. 설명 진짜.. 하

백설명이 불여일실습

 

디렉터리 관리

1.  파일의 종류

  일반파일, 디렉터리, 특수파일

  1) 일반파일 : 일반적으로 데이터 또는 프로그램 코드, 일련의 바이트 스트림

    이런 정규 파일은 표준 파일 입출력 시스템 호출을 통해 참조됨

  2) 디렉터리 : 디렉터리에 포함된 파일명과 해당 파일에 대한 정보를 담고 있는 inode number 목록을 내용으로 가진 파일

    디렉터리 파일은 디렉터리의 명시적인 시스템 호출(ex ls명령)을 통해서 참조됨

    (진짜 어렵게 설명되어있네.  파일 리스트를 아이노드 넘버 목록이라고도 하나보네)

  3) 특수파일 : 기능에 따라 다양한 형태로 존재, 표준 입출력 시스템 호출을 통해 참조됨 (

   프로세스간 통신(IPC InterProcess Communication)을 위해 pipe, socket 등의 파일을 사용

  디스크, 프린터, 터미널, 키보드 등 주변장치를 사용하기 위한 장치파일(device file)로

  블록단위로 입출력하는 블럭 장치파일(버퍼링)과

  문자단위로 입출력하는 문자장치파일(비 버퍼링)로 구분 

  * 특수파일 무슨말인지 안 와닿네. 장치파일은 알겠는데.

 

2. 디렉터리 내용 출력(ls 명령)

 1) 특정 디렉터리에 있는 디렉터리와 파일목록을 보여주고 추가 옵션으로 여러 정보등 알수있음

 2) 디렉터리에는 파일명과 해당 파일의 inode number에 대한 매핑정보만을 가지고 있으며

     ls 명령의 추가 옵션을 통해 해당 파일에 대한 상세 내역을 볼 수 있는 것은

     해당 inode number를 통해 inode 구조체 정보를 참조하기 때문이라고 (오호)

 

 -l 자세히

 -a 도트(.)파일 포함 디렉터리 내 숨김파일까지 보여줌

 -R 하위 디렉터리에 있는 내용까지 보여줌

 -F 디렉터리인지 어떤 종류의 파일인지 알려줌 (디렉터리 / 실행파일 * 심볼릭링크@)

 -i 디렉터리 및 파일에 지정된 inode number를 보여줌

 

 

 

내단어로 정리

1. /etc/passwd 필드 7가지 알기

2. 

 

 

 

오늘의 느낀점 (위기감)

이 속도로 정리하면 1회독 하지도 못하고 시험볼 듯

읽는것은 읽는대로 진행하고 정리는 정리대로 진행해야 할 듯

읽기 두 섹션, 정리는 지금처럼, 문제는 30문제씩 풀어야 속도가 맞음 ㅠㅠ