history chroot container

BERT·2023년 5월 21일
0

Docker

목록 보기
2/7

chroot

change root directory
root 경로를 특정 디렉터리로 변경
UNIX command 및 system call로 존재

private mount layout 가질 수 있음

chroot 부수적 기능

보안적 측면의 격리
chroot를 통해서 기초적인 격리 가능
sandbox 개념 : 격리된 공간의 타입을 의미
chroot로 격리된 directory hierarchy를 통해 경로를 속일 수 있음

ftp

chroot의 이해를 돕기 위한 예시
vsftpd 설치

sudo apt -y install vsftpd
sudo systemctl is-active vsftpd
sudo systemctl start vsftpd
sudo apt -y install filezilla
filezilla

Site Manager > New Site
Host : hostname -I
Protocol : FTP
Logon Type : Normal
Charset : Force UTF-8

vsftpd.conf 수정

sudo vim /etc/vsftpd.conf
chroot_local_user=YES
allow_writeable_chroot=YES

추가 후 저장

vsftpd 재시작

sudo systemctl restart vsftpd
sudo systemctl status vsftpd

HOME 디렉터리가 root 디렉터리로 변경됨

Isolation

시스템 내의 한정적인 자원을 효율적으로 분배하여 시스템 가용성 증대

  1. 보안, 자원 관리적 측면
    특정 파일 경로의 접근 제한
  2. 호환, 충돌 측면
    동일 디렉터리를 사용하는 프로세스의 독립된 실행
    다른 버전의 파일을 사용하는 프로세스

Namespace

History

분산 컴퓨팅 시스템으로서 local system, remote system을 계층적 파일 시스템으로 표현

Linux Namespace

한정된 리소스를 NS의 계층적 파일 시스템 관리 형태로 구현

namespace kinds

mount, UTS*, IPC, network, PID, user, cgroup

binary

unshare, lsns, nsenter

unshare, lsns 실습

unshare

unshare로 격리된 프로세스를 생성
프로세스 이름은 bash
-p --pid : PID 격리
-f --fork : 자식 프로세스를 만들어서 실행
--mount-proc : proc 파일 시스템을 고유 공간으로 가져감

sudo su
unshare -pf --mount-proc /bin/bash
ps
exit

bash PID 1 확인

unshare : net

unshare로 네트워크 격리
-n

unshare -n /bin/bash
ps
ss -nlt
nc -l 5000 >nc_ns_output.txt &
ss -nlt

nc 7840이 5000포트를 점유하였지만 unshare로 격리
ss 명령어 입력 시 아무것도 출력되지 않음
다시 5000포트 점유
확인

lsns

unshare 유지한 상태로 다른 터미널 생성
lsns
unshare에서 생성한 bin/bash 확인 가능
PID 7907이 net type의 NS, 4026532880을 가지고 있음

cgroup

control group : 자원 제어 기능
2006년도 Paul Menage, Rohit Seth가 Process container 이름으로 개발
2007년도 cgroup으로 이름 변경
2016년도 cgroup v2로 버전 업

OS level abstraction

그룹 별로 가상화된 공간을 만들고 자원을 제약할 수 있게 됨

LXC

LinuX Container
2008년 IBM의 Daniel Lezcano와 Google의 협동으로 개발
2014년 v1.0 발표

초창기 리눅스 컨테이너 기술의 발판
docker의 경우도 초창기에 lxc 사용 후에 교체

docker

container runtime 기술로써 2008년 설립, 2013년 릴리즈

Standards : docker(de facto), OCI v1.0(2017) 제정

OCI : Open Container Initiative

docker는 container를 세련된 방식으로 구현한 제품의 일종

격리된 자원의 묶음(image)과 런타임으로 구성
기본적으로 client/server 구조를 가지므로 daemon이 작동
Host OS위에서 작동하는 격리된 프로세스의 일종이므로 virtual machine과 달리 Memory, File system의 I/O에서 발생되는 심각한 overhead가 없음

단점

daemon으로 작동하면서 child process로 수직 관리
관리자 권한 사용

Container(docker) vs Hypervisor(VM)

docker는 Hypervisor에서 App으로 가는 리소스 손실 없음

podman

alternative of linux container
docker가 가장 많이 쓰이고 있지만 단점과 상용화 문제로 인해 대안 요구
podman은 RedHat에서 지원
no daemon service, no admin account
systemd unit support

Future of Container

docker

입지가 불안하고 구조적, 기술적 문제가 있지만 여전히 매력적인 기술
docker의 대안이 계속해서 제안되고 있음
하지만 docker와 그 기본 개념을 잘 이해하면 다른 container 기술 이해에 도움됨

Container 기술의 복잡성 증가

maturity level 부족으로 자주 변경되는 개념

Virtualization

Isolation : Virtual machine

Full virtualization(Hypervisor) 사용

소프트웨어로 가상화된 하드웨어 구현
완전히 격리된 공간 제공
보안 문제, 호환성 문제를 거의 대부분 해결

단점

낮은 성능
독점적인 자원 점유
Host-Guest간의 자원 교환 어려움

VM을 사용하면 overhead가 커지는 단점 존재

Isolation : sandbox

격리가 목적이라면 굳이 VM을 쓸 필요가 없음
lightweight container로 작성하려면 host OS와 공유하는 부분이 있으므로 이기종 OS 사용 불가
container 구현체로 docker, podman 등장

0개의 댓글