Docker: Linux file system 자료 조사

김태호·2022년 5월 4일
0

Docker

목록 보기
3/4

완벽한 IT 인프라 구축을 위한 Docker (2판)


해당 서적의 Chapter 1.3 의 OS(Linux) 기초지식 부분을 소개

Docker 에서 주로 사용하는 Linux 파일 시스템에 대해 작성한다.
일반적인 Linux 의 파일 구조를 설명한다.

직접적인 Docker 와 연동은 해당 문서와 관계가 없다.
간략한 Linux 의 디렉터리 구조일뿐, 깊은 수준의 Linux 운영체제에 관한 문서가 아님.

Linux 파일 시스템

Linux 커널이 갖고 있는 중요한 기능으로 파일 시스템이 있습니다. 파일 시스템은 Linux에서 하드디스크나 USB 메모리, CD, DVD 등과 같은 데이터에 액세서 하기 위한 장치 입니다.

보통 컴퓨터가 데이터를 읽어 들일 때는 데이터가 어떤 디스크에 어떻게 저장되어 있는지를 인식해야 합니다. 하지만 데이터를 이용하는 애플리케이션의 관점에서 보면 데이터가 하드디스크에 저장되어 있든지, 플래지 메모리에 저장되어 있든지, 네트워크 너머의 스토리지 서버에 저장되어 있든지 상관없이 투과적으로 액세스할 수 있는 방법이 있다면 편리할 것 입니다.

Linux 커널은 VFS(Virtual File System; 가상 파일 시스템) 이라는 장치를 사용하여 데이터에 대한 투과 액세스를 가능하게 하고 있습니다.

VFS에서는 각 디바이스를 "FILE"로 취급하는 것이 특징입니다.
1. VFS 예시

2. 파일구성 예시

Linux 주요 파일 시스템

file 이름설명
ext2Linux 운영체제에서 널리 이용되던 파일 시스템.
초기 ext 파일 시스템을 확장하여 ext2 라고 이름이 붙여짐
ext3Linux 커널 버전 2.4.16부터 사용할 수 있음
ext4ext3의 후속 저널링 파일 시스템.
확장 기능을 사용하지 않는 경우에 한해 ext3으로 마운트할 수 있다.
스토리지는 1EiB까지 지원하며, 파일의 단편화를 방지하는 extend file writing이라는 시스템이 도입되었다.
tmpfsUnix 계열의 OS에서 임시파일을 위한 장치를 말한다.
tmpfs는 파일 시스템으로 마운트 되지만, 하드디스크와 같은 영구성을 갖고 있는 기억장치 대신에 메모리상에 저장할 수 있다.
/tmp로 마운트되는 경우가 많으며, /tmp에 저장한 파일의 실체는 메모리상에 저장되어 있기 때문에 서버를 재시작하면 파일은 모두 사라진다.
UnionFS여러 개의 디렉토리를 겹쳐서 하나의 디렉토리로 취급할 수 있는 파일 시스템이다.
쓰기 가능한 디렉토리와 읽기 전용 디렉토리를 겹침으로써, 읽기 전용 디렉토리의 내용을 가상적으로 변경할 수 있다.
변경된 내용은 쓰기 가능한 디렉토리에 저장된다.
신뢰성과 퍼포먼스를 개선한 AUFS(AnotherUnionFS)도 있다.
ISO-96601988년에 ISO에서 표준화된 CD-ROM의 파일 시스템.
Linux 뿐만 아니라 다양한 운영체제에서 똑같은 CD-ROM을 읽어 들일 수 있다.
NFSRFC 1094, RFC 1813, RFC 3530 등으로 정의되어 Unix에서 이용하는 분산 파일 시스템 및 프로토콜이다.

Linux 디렉토리 구성

현재 대부분의 주요 배포한은 다음의 FHS(Filesystem Hierarchy Standar)를 바탕으로 디렉토리를 구성하고 있습니다.
하지만 이 규격에 완벽히 준거하여 구성하는것은 아니므로 Linux 배포판에 따라 차이가 있습니다.

file 이름설명
/binls 커맨드나 cp 커맨드와 같은 기본 커맨드를 저장하는 디렉토리. 특권 및 일반 사용자 모두 이용하는 명령들이 배치되어 있다.
/bootLinux 커널 등 OS 시작에 필요한 파일을 배치하는 디렉토리.Linux 커널의 정체는 vmlinuz라는 이름의 파일이다.
/dev하드디스크, 키보드, 디바이스 파일을 저장하는 디렉토리. 예를 들어 /dev/hda는 IDE 타입 하드디스크, /dev/sda는 SCSI 타입 하드디스크를 나타낸다. /dev/tty는 표준 입출력이 되는 단말 디바이스이다. 또한 /dev/null 이라는 특수한 디바이스도 마련되어 있다. 필요없어진 출력을 버릴 때 사용하거나 빈 파일로 사용.
/etcOS 나 애플리케이션이 작동하는 데 필요한 설정 파일이 저장되어 있는 디렉토리. 예를 들어, /etc/hosts는 IP 주소와 도메인명을 연결하는 파일이며, /etc/passwd는 사용자의 비밀번호가 저장되어 있다. 웹 서버를 시작할 때의 http 데몬 설정 파일도 이 디렉토리 아래에 배치된다.
/home일반 사용자의 홈 디렉토리. 시스템 이용자가 자유롭게 사용할 수 있는 디렉토리. 독자적인 쉘 설정 파일 등도 여기에 배치할 수 있다. 또한 특권 사용자(root)는 /root를 홈 디렉토리를 사용한다.
/proc커널이나 프로세스에 관한 정보가 저장되어 있는 디렉토리. /proc 아래에 있는 숫자 폴더는 프로세스 ID 를 의미한다. 또한 /proc/cpuinfo는 CPU의 정보, /proc/partitions 는 디스크의 파티션 정보, /proc/version은 리눅스 커널의 버전 정보가 저장된다.
/sbin시스템 관리용 마운트가 저장되어 있는 디렉토리. 예를 들어, mount 커맨드나 reboot 커맨드 등. 관리 커맨드는 /usr/sbin 또는 /usr/local/sbin 등에 배치되는 경우도 있다.
/tmp일시적으로 사용하는 파일 등을 저장하는 임시 디렉토리. 하드디스크에 저장되어 있는 보통의 파일처럼 보이지만, /tmp 는 보통 tmpfs 파일 시스템을 사용하여 메모리상에 전개되기 때문에 서버를 재시작 하면 사라져 버린다.
/usr각종 프로그램이나 커널 소스가 저장되는 디렉토리./usr/local은 시스템 관리자가 애플리케이션을 설치하는 장소로 이용한다.
/var시스템의 가동과 함께 변화하는 파일을 놓아두는 디렉토리. 예를 들어 /var/log 에는 가동 로그, /var/spool 에는 애플리케이션이 임시 파일로 사용하는 스풀이 저장된다. 또한, 메일 등의 큐나 프로세스의 다중 기동을 막기 위한 로그 파일 등도 배치된다.

Linux의 대표적인 3가지 보안기능

계정에 대한 권한 설정

리눅스에서는 시스템을 이용할 수 있는 사용자 계정에 권한을 설정할 수 있습니다.
권한은 시스템 전체를 관리할 수 있는 특권 사용자인 'root'와 그 외의 일반 사용자가 있습니다.
root 는 시스템의 종료나 파일 시스템의 마운트/언마운트, 애플리케이션의 설치와 같은 실행 권한을 가지며, 시스템 전체를 관리할 수 있습니다.
또한 미들웨어와 같은 데몬을 가동시키기 위한 시스템 계정도 작성할 수 있습니다.
시스템 계정은 특정 프로세스를 작동시키기 위한 계정입니다.
사용자가 시스템 계정을 직접 이용하는 경우는 없기 때문에 로그인 할 수 없도록 해 둘 필요가 있습니다.
계정에는 그룹을 설정할 수도 있습니다. 리눅스의 파일이나 디렉토리에 대한 액세스 권한을 계정 및 그룹별로 세세하게 설정할 수 있습니다.
이러한 액세스 권한을 Permission 이라고 합니다.

네트워크 필터링을 사용한 보안

리눅스는 원래 네트워크를 경우하여 멀티유저가 이용하는 것을 전제로 한 OS이기 때문에 네트워크에 관한 기능이 풍부합니다.
iptables는 리눅스에 내장된 패킷 필터링 및 네트워크 주소 변환(NAT) 기능을 설정하는 기능입니다.
패킷 필터링이란 패킷이 헤더 부분(송신원 IP 주소와 수신처 IP 주소, 포트 번호 등)을 보고 조건과 일치하면 설정한 액션(전송, 파기, 주소 수정 등) 을 수행하는 것입니다.
방화벽과 같은 역할을 하므로 비정상적인 패킷을 파기할 수 있습니다.

SELinux (Security-Enhanced Linux)

SELinux는 미국 국가안전보장국이 제공하는 Linux 커널에 강제 액세스 제어 기능을 추가한 기능입니다.
리눅스 시스템에서 디렉토리나 파일에 대한 액세스는 퍼미션에 기초하여 허가하고 있습니다.
Permission에서는 '오너', '그룹', '기타' 에 대한 각각 '읽기(read)', '쓰기(write)', '실행(execute)' 허가를 설정할 수 있습니다.
하지만 root 사용자는 이러한 권한과 상관없이 모든 액세스가 가능하기 때문에 만약 비밀번호를 도난당하면 시스템에 치명적인 결점이 생기는 셈 입니다.
SELinux는 보안 대상에 따라 HTTP/FTP 와 같은 프로세스마다 액세스 제한을 거는 Type Enforcement(TE)와 root도 포함한 모든 사용자에 관해 제어를 거는 RoleBase Access Control(RBAC)등으로 리눅스를 제어합니다.
이렇게 root 사용자에게 권한이 집중되는 것을 막음으로써 보안성이 높은 시스템을 구축할 수 있습니다.

profile
신입 모바일 개발자 입니다!

0개의 댓글