맨위로가기

Chroot

"오늘의AI위키"는 AI 기술로 일관성 있고 체계적인 최신 지식을 제공하는 혁신 플랫폼입니다.
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.

1. 개요

chroot는 유닉스 계열 운영체제에서 사용되는 시스템 호출로, 프로세스의 루트 디렉토리를 변경하여 해당 프로세스가 특정 디렉토리 내에서만 파일 시스템에 접근하도록 제한하는 기술이다. 1979년 버전 7 유닉스에서 처음 도입되었으며, 소프트웨어 테스트, 보안 강화, 격리된 환경 구축 등 다양한 목적으로 활용된다. chroot는 샌드박스 환경을 구성하는 데 사용되지만, 루트 권한을 가진 사용자에 의한 변조를 완전히 방지하지는 못하며, 여러 가지 제한 사항을 가지고 있다. Postfix, OpenSSH, ChromeOS 등 다양한 소프트웨어 및 운영체제에서 chroot 기술을 활용하고 있으며, fakechroot와 같은 관련 도구도 존재한다.

더 읽어볼만한 페이지

  • 시스템 호출 - 포크 (시스템 호출)
    포크는 유닉스 계열 운영체제에서 새로운 프로세스를 생성하는 시스템 호출로, 호출 시 부모 프로세스의 복사본인 자식 프로세스가 생성되어 파일 서술자를 상속받으며, 유닉스 철학의 핵심 개념으로 필터 개발 및 파이프라인 구축에 용이하고 vfork, rfork, clone 등 다양한 변종이 존재한다.
  • 시스템 호출 - Stat (시스템 호출)
    `stat` 시스템 호출은 파일의 크기, 접근 권한, 수정 시간 등 다양한 속성 정보를 담은 `stat` 구조체를 반환하여 파일 상태 정보를 가져오는 데 사용되며, C 언어에서 `stat()`, `lstat()`, `fstat()` 함수와 대용량 파일 지원을 위한 `stat64()`, `lstat64()`, `fstat64()` 함수를 통해 호출된다.
  • 컴퓨터 보안 절차 - 사이버 전쟁
    사이버 전쟁은 국가나 비국가 행위자가 사이버 공간에서 국가 안보를 위협하거나 정책을 수행하기 위해 컴퓨터 네트워크를 이용해 공격과 방어를 하는 행위이다.
  • 컴퓨터 보안 절차 - 컴퓨터 포렌식
    컴퓨터 포렌식은 디지털 증거를 수집, 분석하여 법적 증거로 제시하는 과학 수사 기법으로, 사이버 범죄 수사, 민사 소송, 기업 감사 등 다양한 분야에서 활용되며 자동화, 인공지능, 머신러닝과 같은 첨단 기술을 통합하는 방향으로 발전하고 있다.
  • 자유 가상화 소프트웨어 - LXC
    LXC는 리눅스 커널의 cgroup과 네임스페이스 격리 기능을 이용하여 운영 체제 수준의 가상화를 제공하는 기술로, IBM 연구원들이 개발했으며 보안 강화 및 LXD 컨테이너 관리자 프로젝트를 통해 발전해왔다.
  • 자유 가상화 소프트웨어 - 커널 기반 가상 머신
    커널 기반 가상 머신(KVM)은 리눅스 커널의 가상화 확장 기능으로, CPU와 메모리 가상화를 지원하며 QEMU와 함께 완전한 가상화 솔루션을 구성하고 다양한 관리 도구를 제공한다.
Chroot - [IT 관련 정보]에 관한 문서
기본 정보
개발
작성자빌 조이
AT&T 벨 연구소
개발자다양한 오픈 소스
상용 개발자
출시
최초 출시1979년
기타
장르명령

2. 역사

chroot 시스템 호출은 1979년 버전 7 유닉스 개발 중에 도입되었으며, 1982년 3월 18일 빌 조이가 BSD에 추가하였다.[1]

chroot에 "jail"이라는 용어가 적용된 것은 1991년 빌 체스윅이 해커를 감시하기 위한 허니팟을 만들면서 시작되었다.[4]

FreeBSD는 2000년 이 개념을 확장하여 jail 명령을 도입했다.[6]

2005년 은 "스테로이드를 맞은 chroot"로 묘사되는 솔라리스 컨테이너 (솔라리스 존)를 출시했다.[9]

2008년 LXC (이후 도커가 구축됨)는 "컨테이너" 용어를 채택했으며,[10] 2013년 리눅스 커널 3.8에 사용자 네임스페이스가 포함되면서 인기를 얻었다.[11]

3. 이용 목적

chroot는 다음과 같은 다양한 목적에 유용하게 사용될 수 있다.


  • 테스트 및 개발: chroot는 프로덕션 시스템에 배포하기에는 위험한 소프트웨어를 위한 테스트 환경을 구축하는 데 사용될 수 있다. 이를 통해 실제 사용 중인 시스템에서 평가하기에는 위험한 소프트웨어를 테스트할 수 있다.[1]
  • 의존성 제어: chroot는 예상되는 종속성만으로 채워진 환경에서 소프트웨어를 개발, 빌드 및 테스트하는 데 사용될 수 있다. 이를 통해 개발자는 서로 다른 프로그램 라이브러리 집합으로 인해 발생할 수 있는 연결 왜곡을 방지할 수 있다. 또한, 빌드에 필요한 최소한의 환경만 갖추어 의도하지 않은 라이브러리가 링크되는 것을 방지할 수 있다.[1]
  • 호환성: 레거시 소프트웨어나 다른 ABI를 사용하는 소프트웨어는 지원 라이브러리나 데이터 파일이 호스트 시스템의 것과 충돌할 수 있으므로 chroot에서 실행해야 할 수 있다. 예를 들어, 동적 링크되는 라이브러리가 동일한 이름으로 다른 내용을 필요로 하는 경우가 있다(네임스페이스 충돌 회피).[1]
  • 복구: 시스템을 부팅할 수 없게 된 경우, chroot를 사용하여 손상된 환경으로 다시 이동하여 복구할 수 있다. 대체 루트 파일 시스템(예: 설치 미디어 또는 라이브 CD)에서 부트스트랩한 후 chroot를 사용한다. UNIX 설치에서도 처음에는 설치 매체로 시작하고, 최소한의 설치가 완료된 시점에서 chroot로 디스크를 루트 디렉터리로 만들기도 한다.[1]
  • 권한 분리: 프로그램은 열린 파일 디스크립터 (파일, 파이프라인 및 네트워크 연결)를 chroot로 전달할 수 있다. 이를 통해 chroot 디렉토리 내에 작업 파일을 남겨둘 필요가 없으므로 jail 설계를 단순화할 수 있다. 또한 보안 위반을 예방하기 위해 권한 있는 프로그램의 잠재적으로 취약한 부분을 샌드박스에서 실행하는 일반적인 방식도 단순화한다. 그러나 chroot는 root 권한이 있는 프로세스를 격리하기에 충분하지 않을 수 있으며, 시스템 호출을 불가능하게 하거나 블록 장치에 대한 접근을 거부하는 것은 아니므로 특권을 얻은 공격자에게는 효과가 제한적이다.[1]
  • 허니팟: chroot는 네트워크 서비스를 실행하는 실제 시스템을 시뮬레이션하는 데에도 사용될 수 있다. 그러나 chroot는 시스템 호출을 가상화하지 않고, 블록 장치나 가상 파일 시스템(Linux의 `/proc` 및 `/sys`)에 대한 접근을 차단하지 않으므로, 허니팟에 잡힌 공격자가 허니팟임을 깨달을 가능성이 있다.[1]

4. 리눅스에서의 활용

리눅스에서 chroot 환경을 사용하려면 커널 가상 파일 시스템과 구성 파일 또한 호스트에서 chroot로 마운트/복사해야 한다.[22][23]

```sh

# 커널 가상 파일 시스템 마운트

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

# /etc/hosts 복사

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

# /etc/resolv.conf 복사

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

# /etc/mtab 링크

chroot $TARGETDIR rm /etc/mtab 2> /dev/null

chroot $TARGETDIR ln -s /proc/mounts /etc/mtab

```

다음 방식을 이용하여 chroot 환경에서 그래픽 응용 프로그램을 구동할 수 있다.[13][14]


  • xhost 사용 (또는 .Xauthority에서 secret 복사)
  • Xnest 또는 더 현대적인 Xephyr와 같은 중첩된 X 서버 (또는 jail 내부에서 실제 X 서버 시작)
  • X11 포워딩(ssh -X) 기능을 사용하여 SSH를 통해 chroot에 접근
  • [http://www.elstel.org/xchroot/ xchroot] 사용자와 Xorg/X11 포워딩(socat/mount)을 위한 chroot의 확장 버전
  • X11 VNC 서버를 사용하고 환경 외부에서 VNC 클라이언트를 연결.

5. 제한 사항

chroot 메커니즘은 루트 권한을 가진 사용자가 의도적으로 조작하는 것을 막는 데 한계가 있다. NetBSD는 예외적으로 chroot를 보안 메커니즘으로 간주하여 탈출 방법이 알려져 있지 않지만, 대부분의 시스템에서는 chrooted 프로그램이 충분한 권한을 가지면 두 번째 chroot를 실행하여 탈출할 수 있다.[12] 이러한 보안 취약점을 완화하려면 chrooting 후 가능한 한 빨리 루트 권한을 포기하거나, FreeBSD jail과 같은 다른 메커니즘을 사용해야 한다.

일반적인 파일 시스템에서 장치 노드를 지원하는 시스템에서, chrooted 루트 사용자는 여전히 장치 노드를 생성하고 파일 시스템을 마운트할 수 있다. 따라서 chroot는 권한 있는 사용자의 시스템 장치에 대한 낮은 수준의 접근을 차단하거나, I/O, 대역폭, 디스크 공간, CPU 시간 등의 자원 사용을 제한하는 데 사용될 수 없다. 대부분의 유닉스 시스템은 완전히 파일 시스템 지향적이지 않으므로, 네트워킹 및 프로세스 제어와 같이 잠재적으로 파괴적인 기능도 시스템 호출 인터페이스를 통해 chrooted 프로그램에서 사용 가능하다.

프로그램은 시작 시 임시 공간, 구성 파일, 특수 파일, 공유 라이브러리를 특정 위치에서 찾을 것으로 예상한다. chrooted 프로그램이 성공적으로 시작하려면 chroot 디렉터리에 이러한 파일들의 최소 집합이 있어야 한다. 이 때문에 chroot를 일반적인 샌드박스 메커니즘으로 사용하기는 어렵다.

루트 사용자만이 chroot를 수행할 수 있다. 이는 사용자가 조작된 chroot jail 안에 setuid 프로그램을 넣어 권한 상승을 유발하는 것을 막기 위함이다. 따라서 일반 사용자가 임의로 샌드박스 환경을 구성하는 데 chroot를 사용할 수 없다.

일부 유닉스 시스템은 이러한 제한 사항 중 일부를 해결하기 위해 chroot 메커니즘의 확장을 제공한다. ( OS 수준의 가상화 참조)


  • Solaris 의 Solaris Containers
  • 리눅스는 cgroups, LXC, OpenVZ, Parallels Virtuozzo Containers, Linux-VServer, 리눅스 FreeVPS에서의 보안 컨텍스트
  • FreeBSD 의 FreeBSD jail
  • NetBSDOpenBSD 의 sysjail

6. 확장 기술

chroot 메커니즘은 몇 가지 제한 사항을 가지고 있어, 이를 보완하기 위해 다양한 운영 체제 수준 가상화 기술이 개발되었다. 이러한 기술들은 chroot의 보안 및 격리 수준을 강화하는 데 도움을 준다.

몇몇 유닉스 시스템은 이러한 chroot의 제한 사항을 해결하기 위해 확장된 기능을 제공한다. (운영 체제 수준 가상화 기술의 구현 참조)


  • FreeBSD의 FreeBSD jail[12]
  • Solaris의 Solaris Containers
  • 리눅스는 cgroups, LXC, OpenVZ, Parallels Virtuozzo Containers, Linux-VServer, 리눅스 FreeVPS에서의 보안 컨텍스트
  • NetBSDOpenBSD의 sysjail

7. 주요 응용 사례


  • Postfix 메일 전송 에이전트는 개별적으로 chroot된 도우미 프로그램의 파이프라인으로 작동한다.[16]
  • 데비안, 우분투, SUSE, 페도라, 레드햇 등 많은 리눅스 배포판은 패키지 빌드 시 chroot를 사용하여 의도하지 않은 빌드 종속성을 확인한다.
  • 많은 FTP 서버는 chroot를 사용하여 신뢰할 수 없는 FTP 클라이언트를 샌드박싱한다.
  • OpenSSH 데몬은 권한 분리를 활성화하여 권한 없는 도우미 프로세스를 chroot 환경에서 실행하여 사전 인증 네트워크 트래픽을 처리한다.[19]

8. fakechroot

fakechroot는 LD_PRELOAD영어를 사용하여 `open()` 등의 시스템 호출을 가로채 루트 권한 없이 chroot와 유사한 환경을 만드는 도구이다.[21]

참조

[1] 웹사이트 jail, section 9. https://docs.freebsd[...] 2016-03-14
[2] 웹사이트 Warner's Random Hacking Blog: Whither chroot? https://bsdimp.blogs[...] 2000-02-02
[3] 웹사이트 Data Infrastructures for the rest of us - III - software https://blog.dionres[...] 2020-06-28
[4] conference An Evening with Berferd: In Which a Cracker is Lured, Endured, and Studied https://www.cheswick[...] The Association 1991
[5] 웹사이트 Summertime potluck http://sunsite.uakom[...] Carole Fennelly
[6] 웹사이트 FreeBSD Handbook "Jails" Chapter http://www.freebsd.o[...] The FreeBSD Project 2018-10-30
[7] 웹사이트 chroot shell http://membres.lycos[...] Nicolas Boiteux 2018-03-24
[8] 웹사이트 Girafon http://girafon.org:8[...] girafon 2018-03-24
[9] 서적 High Availability and Disaster Recovery: Concepts, Design, Implementation https://books.google[...] Springer Science & Business Media 2006-09-02
[10] 웹사이트 SourceForge LXC Download Files http://sourceforge.n[...] 2014-08-21
[11] 웹사이트 Linux Containers and the Future Cloud http://www.haifux.or[...] 2014-03-26
[12] 웹사이트 chroot(2) https://www.freebsd.[...] 2020-12-02
[13] 웹사이트 Development/Howto/Chroot http://wiki.mandriva[...] 2011-07-25
[14] 웹사이트 HOWTO startx in a chroot 2011-10-13
[15] 웹사이트 Atoms is a Linux Chroot Management Tool with a User-Friendly GUI https://linuxtldr.co[...] 2023-10-10
[16] 웹사이트 sshd_config(5) manual page https://man.openbsd.[...] 2018-02-04
[17] 웹사이트 Chromium OS Universal Chroot Environment (on github) https://github.com/d[...] 2016-12-17
[18] 문서 How to break out of a chroot() jail http://www.bpfh.net/[...]
[19] 웹사이트 sshd_config(5) manual page http://www.openbsd.o[...] 2008-04-27
[20] 웹사이트 Live upgrading many thousand of servers from an ancient Red Hat distribution to a 10 year newer Debian based one. http://marc.merlins.[...] 2018-08-13
[21] Github fakechroot/fakechroot - GitHub https://github.com/f[...]
[22] 웹인용 보관된 사본 http://wiki.mandriva[...] 2016-02-28
[23] 웹인용 보관된 사본 http://www.gentoo-wi[...] 2011-10-13



본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.

문의하기 : help@durumis.com