본문 바로가기
정보보안기사 필기/1. 정보보안 일반

정보보안기사 필기 4-3. 유닉스/리눅스 서버 보안(파일시스템, 하드/심볼릭 링크)

by kkmin93 2022. 4. 19.
반응형

정보보안기사 필기 4-3. 유닉스/리눅스 서버 보안(파일시스템, 하드/심볼릭 링크)

1. 유닉스(UNIX)

  • 유닉스의 링 구조는 4개로 "하드웨어, 커널, 셀, 응용 프로그램"으로 구성되어 있으며, 윈도우보다 링 구조가 더 명확하게 나눠져 있어 조금 더 높은 보안 수준을 유지한다.

 1) 유닉스 시스템의 특징

구분 설명
대화식 운영체제 - 사용자와 운영체제간의 상호작용은 명령어 해석기인 셸(Shell)에 의해 이루어짐
멀티태스킹 - 여러 개의 명령어를 동시에 처리하는 방식
멀티유저 - 동시에 여러 사용자가 하나의 컴퓨터를 사용 가능 → 보안 ▲
호환성 및 이식성 - 하드웨어적인 구조에 독립적으로 응용프로그램을 작성할 수 있는 환경 제공
계층적 파일시스템 - 정보의 고유구조를 반영하도록 그룹화하는 기능으로 파일관리에 상당한 유연성 제공
통신 기능 - TCP/IP에 기반한 통신기능을 운영체제 자체에 내장하고 있어 프로세스 간을 연결하는
파이프 기능이 있어서 명령어 간의 데이터 전달이 수월
다양한 기능과 유틸리티 제공 - 수백여 개의 명령어와 유틸리티를 사용자 및 개발자에게 제공하여 도움을 준다.

 2) 유닉스의 구성

  2-1) 커널(Kernel)

  • 커널은 항상 메모리에 상주하여 CPU, 메인 메모리, 하드디스크 등의 하드웨어 자원을 제어하면서 프로세스 스케줄링, 기억장치 관리, 파일 관리, 시스템 호출 인터페이스, 입출력서비스 등의 기능을 사용자에게 제공한다.
  • 가장 하위 수준에서 하드웨어와 직접 관계하며, 커널의 일부분은 특정 컴퓨터 시스템의 하드웨어에 종속적이다.
  • 이중모드에서 사용자 모드는 명령어 제한이 있는데 이런 경우에 사용자 프로세스는 운영체제에 도움을 요청하게 되고 이를 시스템 호출이라고 한다.
  • 시스템 호출(System call)은 커널 내에 서브루틴 형태로 존재하고 있으며, 사용자 프로그램이 커널에 접근하는 인터페이스를 제공한다. 즉 실행 중인 프로그램과 운영체제 사이에 인터페이스를 제공하는 것이다.

  2-2) 셸(Shell)

  • 운영체제와 사용자가 대화하기 위한 기반을 제공하는 중요한 프로그램으로, 일반적인 운영체제에서 명령어 해석기라 불리는 부분의 기능을 담당한다.

  2-3) 파일시스템(File System)

  • 유닉스의 파일시스템은 디렉터리와 파일로 구성되어 있다. 디렉터리는 계층화된 트리(Tree) 구조를 가지며 최상위 디렉터리는 루트(root)로 효과적인 파일 처리 및 접근의 편의성을 제공해준다.
  • 물리적인 디스크는 논리적인 파티션으로 나누어지며, 각 파티션별로 고유한 파일시스템을 생성한다.

[ 그림 1-1. 유닉스 디렉터리 트리 구조 ]

디렉터리 내용
/etc - 시스템의 환경 설정 및 주요 설정 파일을 담고 있다. (passwd, hosts 등)
/dev - 프린터나 터미널 같은 물리적인 장치를 다루기 위한 특수 파일을 담고 있다.
/usr/bin - 기본적으로 실행 가능한 파일을 담고 있다. (echo, mv, copy, pwd 등)
/usr/include - C 언어 라이브러리 헤더 파일이 저장되는 디렉터리이다.
/usr/lib - 기본 프로그램의 모듈을 담고 있다.
/usr/sbin - 시스템 관리 명령어가 저장되는 디렉터리이다.
/home - 사용자 홈 디렉터리가 저장되는 디렉터리이다.
/tmp - 프로그램 실행 및 설치 시 생성되는 임시 파일을 담고 있으며, 이 디렉터리에 파일을 저장하게 되면 재부팅 시 임의로 파일이 삭제될 수 있다.
/var - 시스템 로그가 저장되는 디렉터리이다.

  2-4) 파일시스템의 구조

  • 파티션에 생성된 파일시스템은 "부트 블록(Boot Block), 슈퍼 블록(Super Block), I-node 리스트, 데이터 블록(Data Block)의 네 가지 영역으로 분리된 자료구조를 가진다.

[ 그림 1-2. 파일시스템 구조 ]

  • 부트 블록(Boot Block)은 유닉스 시스템의 부팅 과정에서 필요한 운영체제의 실행 파일정보를 저장하고 있다.
  • 슈퍼 블록(Super Block)은 파일시스템의 정보를 유지하는 자료구조로 전체 파일시스템의 정보 뿐만아니라, 요약정보와 함께 사용하지 않고 있는 I-node와 디스크 블록의 위치정보도 가지고 있다.
  • 데이터 블록(Data Block)은 실제 데이터가 저장되는 공간이다.
  • i-node list(Index node)는 유닉스에서 각 파일에 대한 정보를 기억하는 약 120 Byte의 고정된 크기의 구조체이다.
  • i-node는 파일에 대한 정보(파일의 허가권, 소유권, 그룹, 최근 수정된 시간 등)와 이 파일에 할당된 디스크 블록의 주소를 저장하는 필드들로 구성되어 있다. 단, 파일이름은 i-node 리스트에 존재하지 않고 i-node의 번호와 함께 디렉터리에 저장된다.
  • i-node 포인터 구조를 통해 파일의 실제 데이터가 저장된 블록의 정보를 포함하여 파일의 메타 데이터 정보만 저장한다.
속성 설명
I-node number - 파일시스템 내에서 해당 파일을 식별하기 위한 고유 식별자(전체 파일시스템X)
파일타입 - 일반파일, 디렉터리, 장치파일 등의 파일 유형
접근권한 - 파일에 대한 접근권한
link count - 해당 I-node를 참조하는 링크 개수(하드링크 카운트)
소유자 - 파일의 소유자/UID
소유그룹 - 파일의 소유그룹/GID
파일크기 - 파일의 크기
MAC Time - last Modification Time : 파일의 내용을 마지막으로 수정한 시간
- last Access Time : 파일을 마지막으로 접근한 시간
- last Change Time : 파일의 속성(I-node의 정보)을 마지막으로 변경한 시간
 → 즉 소유자, 접근권한 등의 I-node의 정보가 변경되면 last Change Time이 변경된다.
Block index - Data Blocks에 저장되어 있는 파일 내용에 대한 색인 정보
  • 특정 파일/디렉터리에 대한 속성정보는 stat 명령을 통해 확인할 수 있다.

[ 그림 1-3. stat 명령을 통한 파일/디렉터리 속성정보 ]

  2-5) 파일시스템의 유형

  • 일반파일 : 실행가능한 프로그램 파일, 원시 프로그램 파일, 문서파일 등 사용자가 정의한 그대로의 파일을 디스크 등에 내용이 저장된다. (Text File, Binary File)
  • 디렉토리 파일 : 디스크에 저장되며 디렉토리에 포함되어 있는 여러가지 파일들과 디렉토리에 관한 정보 등을 저장하는 논리적 영역이다. (/, /bin(실행파일), /dev(장치파일))
  • 특수파일 : 주변 장치 또는 파이프와 소켓 같은 프로세스간 상호통신, 표준입출력 시스템 호출(문자/블록 특수파일) 

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

  3-1) 개요

  • 링크(link)는 윈도우의 바로가기 아이콘처럼 기존 파일에 대한 또 다른 접근 포인트를 만들어주는 기능이다. 즉 A(Chrome 설치 경로)까지 꼭 가지 않더라도 B(바탕화면 바로가기)에서 실행시킬 수 있게 된다.

[ 그림 1-4. 링크(바로가기) 예시 ]

  • 링크에는 하드 링크(Hard link)와 심볼릭 링크(Symbolic link)로 구분할 수 있다.
문법 - ln [-s] source_file | source_directory target_file
옵션 - [-s] 이 옵션이 있으면 심볼릭 링크, 없으면 하드 링크를 만든다.
설명 - 하드 링크는 파일에만 링크하고, 심볼릭 링크는 파일 또는 디렉터리에 링크할 수 있다.

  3-2) 하드 링크

  • 유닉스 초기시절부터 지원해주던 방식으로 기존파일과 동일한 i-node number를 가지는 파일을 생성하여 원본 데이터와 직접적으로 연결하여 접근하는 방식을 말한다. (동일한 파일시스템에서 파일에만 부여가능)
  • 하드 링크 파일은 원본 파일과 동일한 내용의 다른 파일이라고 할 수 있으며, 같은 i-node 값을 가지고 있어, 원본 파일을 수정하여도 하드 링크 파일이 수정되고, 하드 링크 파일을 수정하여도 원본 파일에 반영이 되는 구조이다.

[ 그림 1-5. test.txt 원본 파일에 하드 링크 파일 test_hl.txt 생성 ]
[ 그림 1-6. 원본파일만 수정했을 시 변화 ]

 

  • 하드 링크 파일을 생성하면 해당 i-node의 링크 카운트가 1 증가하며, 파일 삭제 시에는 링크 카운트를 1 감소시킨 후 그 값이 0이 되었을 때 해당 파일의 i-node 정보 및 데이터가 삭제된다. 단, i-node를 참조하는 파일이 있으면 삭제되지 않는다.

[ 그림 1-7. 원본파일 삭제 후 변화 ]

  3-3) 심볼릭 링크

  • 원본 파일에 대한 파일 경로를 파일 내용으로 하는 새로운 파일을 생성해서 접근하는 방식으로 하드 링크와 달리 i-node number가 아닌 파일 경로를 기반으로 하므로 파일시스템에 제한이 없으며 디렉터리도 가능하다.
  • 심볼릭 링크 파일은 원본 파일의 포인터를 가리키고 있어 원본 파일이 삭제되면 심볼릭 링크는 아무런 구실을 못한다.
  • 일반적으로 디렉터리의 경로 단축이나 변경에 사용이 되며, 생성된 링크 파일의 크기는 매우 작으며 원본 파일과 무관하게 퍼미션의 값은 777로 표시된다.

[ 그림 1-8. 심볼릭 링크 생성 ]
[ 그림 1-9. 심볼릭 링크 ]

2. 유닉스 기본 사용법

 1) 파일시스템 응용

  1-1) 파일과 디렉터리 관리

  • 디렉터리(파일) 정보 출력 - ls : 특정 디렉터리에 있는 디렉터리와 파일을 열거하고 추가 옵션으로 이들에 관한 여러가지 정보(크기, 소유주, 만든 시간, 변경 시간, 이름, 접근권한 등)도 알 수 있다.
문법 ls [-alFR] [file_name | directory_name]
옵션 -l : 목록(List) 형태로 디렉터리 및 파일의 정보를 자세히 보여준다.
-a : 도트(.) 파일을 포함하여 디렉터리 내에 있는 모든 디렉터리 및 파일을 보여준다.
-R : 하위 디렉터리에 있는 내용까지 보여준다.
-F : 디렉터리인지 어떤 종류의 파일인지를 알려준다.
 → 디렉터리 : /, 실행파일 : *, 심볼릭링크 : @
-i : 디렉터리 및 파일에 지정된 i-node 번호를 보여준다.
  • 파일 유형
문자 파일 유형
- - 일반(정규) 파일
d - 디렉터리 파일
l - 심볼릭 링크 파일
b - 블록 장치 특수 파일
c - 문자 장치 특수 파일
p - 파이프, 프로세스간 통신에 사용되는 특수 파일
s - 소켓, 네트워크 통신에 사용되는 특수 파일
  • 접근권한 : 유닉스 운영체제에서는 권한 부여의 대상을 user, group, other 세 종류로 구분한다.
  • user : 파일을 만든 소유주
  • group : 파일을 만든 소유주가 속한 그룹의 사용자
  • other : 기타 사용자
    권한 파일 디렉터리
    읽기(r, 4) - 파일을 일거나 복사할 수 있다. - ls 명령으로 디렉터리 목록을 볼 수 있다.
    - ls 명령의 옵션은 실행권한이 있어야 사용할 수 있다.
    쓰기(w, 2) - 파일을 수정, 이동, 삭제할 수 있다.
    - 디렉터리에 쓰기 권한이 있어야 한다.
    - 파일을 생성하거나 삭제할 수 있다.
    - touch, mkdir, rmdir, rm 등
    실행(x, 1) - 파일을 실행할 수 있다.
    - 셀 스크립트나 실행 파일의 경우
    - 파일을 디렉터리로 이동하거나 복사할 수 있다.
    - cd 명령의 사용이 가능하다.
  • 유닉스 시스템에서는 각각 파일과 디렉터리를 생성할 때, 일반 파일의 경우 접근권한으로 666(rw_rw_rw_)을, 디렉터리의 경우 접근권한으로 777(rwxrwxrwx)을 디폴트 값으로 취한다.
  • 디렉터리가 777인 이유는 실행 권한(x)가 없으면 디렉터리 안으로 들어갈 수 없기 때문이다.
  • 단, 파일이 갖지 말아야 할 접근권한을 명시하는 명령어인 "umask"로 지정한 값만큼 디폴트 값에서 빼야한다. 

 2) 파일 권한 관리

  2-1) 접근 권한 변경(chmod)

  • 기존 파일 또는 디렉터리에 대한 접근권한을 변경할 때 사용하며 해당 파일의 소유주 또는 슈퍼 유저(root)만 사용할 수 있다.
  • 예1) chmod go-w test.c : test.c의 group, others에 w 권한 제거
  • 예2) chmod a=rw test.c : test.c의 모든 사용자에 rw 권한 설정
  • 예3) chmod g+x,o-x test.c : test.c의 group에 x 권한 추가, others에 x 삭제
  • 예4) chmod 664 test.c : user, group에 rw 권한, others에 r 권한 설정

  2-2) 소유권 또는 그룹 변경(chown/chgrp)

  • 파일이나 디렉터리의 소유주나 그룹을 변경할 때 사용하며 명령을 실행하고 나면 파일의 이전 소유주는 해당 파일에 이 명령을 다시 실행할 수 없으며, 슈퍼 유저(root)만 실행할 수 있다.
반응형