(새 문서: 분류: 리눅스 커널 분류: 가상화 분류: 파일시스템 == 개요 == chroot란 프로그램이 실행되는 root directory를 변경하는 것을 말한다. 어떠한 한 프로세스는 그 프로세스의 환경 변수에 루트 디렉토리에 대한 정보를 가지고 있다. 그 프로세스가 찾아가는 모든 경로는 그 루트디렉토리에서 시작하게 되는데, chroot은 이 경로를 바꿀 수 있도록 해준다. chroot new_root...)
 
편집 요약 없음
 
(같은 사용자의 중간 판 하나는 보이지 않습니다)
1번째 줄: 1번째 줄:
[[분류: 리눅스 커널]]
[[분류: 리눅스 커널]]
[[분류: 가상화]]
[[분류: 가상화]]
[[분류: 파일시스템]]
[[분류: 파일 시스템]]


== 개요 ==
== 개요 ==
17번째 줄: 17번째 줄:
특히 이 chroot의 기능을 최대한으로 이용한 것이 [[Container]]기반의 가상화 기술이다. [[Docker]]로 대변되는 이 기술은 호스트 시스템을 Isolation하여 Guest에게 제공하기 위해서 chroot을 많이 이용하였다.  
특히 이 chroot의 기능을 최대한으로 이용한 것이 [[Container]]기반의 가상화 기술이다. [[Docker]]로 대변되는 이 기술은 호스트 시스템을 Isolation하여 Guest에게 제공하기 위해서 chroot을 많이 이용하였다.  


== 리눅스 에서의 chroot ==
== 리눅스에서의 chroot ==
리눅스에서 chroot 환경을 사용하려면 커널 가상 파일 시스템과 구성 파일 또한 host에서 chroot로 마운트/복사되어야 한다. 즉 chroot이 되는 폴더에 실행 파일, 동적 라이브러리 파일, 설정 파일등이 위치해 있어야 한다.   
리눅스에서 chroot 환경을 사용하려면 커널 가상 파일 시스템과 구성 파일 또한 host에서 chroot로 마운트/복사되어야 한다. 즉 chroot이 되는 폴더에 실행 파일, 동적 라이브러리 파일, 설정 파일등이 위치해 있어야 한다.   



2023년 2월 11일 (토) 02:08 기준 최신판


개요

chroot란 프로그램이 실행되는 root directory를 변경하는 것을 말한다. 어떠한 한 프로세스는 그 프로세스의 환경 변수에 루트 디렉토리에 대한 정보를 가지고 있다. 그 프로세스가 찾아가는 모든 경로는 그 루트디렉토리에서 시작하게 되는데, chroot은 이 경로를 바꿀 수 있도록 해준다.

chroot new_root_dir programe_name

이처럼 생성된 환경에서는 지정된 루트 트리 밖의 파일들은 접근할 수 없음으로 이러한 환경을 chroot jail이라고 부른다.

생각보다 chroot은 오래된 역사를 가지고 있는데, chroot 시스템 호출은 1979년 버전 7 유닉스의 개발 중에 도입되었으며, 1982년 3월 18일 빌 조이가 BSD에 추가하였다. chroot은 다음과 같은 분야에 쓰인다.

  • 테스트
  • 의존성 제어
  • 호환성
  • 복구
  • 권한 분리

특히 이 chroot의 기능을 최대한으로 이용한 것이 Container기반의 가상화 기술이다. Docker로 대변되는 이 기술은 호스트 시스템을 Isolation하여 Guest에게 제공하기 위해서 chroot을 많이 이용하였다.

리눅스에서의 chroot

리눅스에서 chroot 환경을 사용하려면 커널 가상 파일 시스템과 구성 파일 또한 host에서 chroot로 마운트/복사되어야 한다. 즉 chroot이 되는 폴더에 실행 파일, 동적 라이브러리 파일, 설정 파일등이 위치해 있어야 한다.

# Mount Kernel Virtual File Systems
TARGETDIR="/mnt/chroot"
mount -t proc proc $TARGETDIR/proc
mount -t sysfs sysfs $TARGETDIR/sys
mount -t devtmpfs devtmpfs $TARGETDIR/dev
mount -t tmpfs tmpfs $TARGETDIR/dev/shm
mount -t devpts devpts $TARGETDIR/dev/pts

# Copy /etc/hosts
/bin/cp -f /etc/hosts $TARGETDIR/etc/

# Copy /etc/resolv.conf
/bin/cp -f /etc/resolv.conf $TARGETDIR/etc/resolv.conf

# Link /etc/mtab
chroot $TARGETDIR rm /etc/mtab 2> /dev/null
chroot $TARGETDIR ln -s /proc/mounts /etc/mtab