뿌리째 뽑다
chroot의 사용 예 chroot특수 루트 디렉터리로 대화형 셸을 실행하는 Rasberry Pi OS에서 | |
| 원본 작성자 | AT&T 벨 연구소 빌 조이 |
|---|---|
| 개발자 | 다양한 오픈 소스 및 상업용 개발자 |
| 초기 릴리즈 | 1979; 전 ( |
| 운영 체제 | Unix, Unix 유사, Plan 9, Inperno |
| 플랫폼 | 크로스 플랫폼 |
| 유형 | 명령 |
A on 유닉스 및 유닉스 유사 운영체제는 현재 실행 중인 프로세스와 그 하위 프로세스의 겉보기 루트 디렉터리를 변경하는 작업이다.이러한 수정된 환경에서 실행되는 프로그램은 지정된 디렉토리 트리 외부에 있는 파일의 이름을 지정할 수 없으며(따라서 일반적으로 액세스할 수 없음)"chroot"라는 용어는 다음을 가리킬 수 있다. chroot(2)system 호출 또는 chroot(8) 래퍼 프로그램.변형된 환경을 '뿌리 감옥'이라고 부른다.
역사
root 시스템 호출은 1979년 버전 7 유닉스를 개발하는 동안 도입되었다.한 소식통은 빌 조이가 1982년 3월 18일 - 4.2 이전 17개월 전에 그것을 추가했다고 말한다.BSD는 설치 및 빌드 시스템을 테스트하기 위해 출시되었다.[1]커널을 가진 BSD의 모든 버전은 chroot(2)를 가지고 있다.[2][3]칡에 적용되는 '제일'이라는 용어는 빌 체스윅이 1991년 해커를 감시하기 위해 허니팟을 만든 데서 유래한다.[4]
탈옥에 대한 첫 번째 기사는 캐롤 페넬리가 쓴 선월드 온라인 보안 칼럼에 대해 논의되었다; 1999년 8월판과 1999년 1월판은 대부분의 루트() 주제를 다루고 있다.[5]
가상화에 유용하게 사용하기 위해 FreeBSD는 개념을 확장했고 2000년 4.0 릴리스에서 감옥 명령을 도입했다.[6]
2002년까지 니콜라스 보이텍스가 쓴 기사는 Linux에 감옥을 만드는 방법을 묘사했다.
2003년까지 리눅스 감옥을 가진 최초의 인터넷 마이크로 서비스 제공업체들은 사용법에[8] 의해 감옥으로 소비된 SAAS/PAAS(쉘 컨테이너, 프록시, ircd, bots, ...) 서비스를 제공한다.
2005년까지 Sun은 "Hoot on Strophy"로 묘사되는 Solaris Containers (Solaris Zones라고도 알려져 있다)를 출시했다.[9]
2008년까지 LXC(이후 도커가 건설된 업포온)는 '컨테이너' 용어를[10] 채택하여 2013년 Linux 커널 3.8의 사용자 네임스페이스에 포함되면서 인기를 얻었다.[11]
사용하다
별도의 가상화된 소프트웨어 시스템 복사본을 생성하고 호스팅하는 데 chroot 환경을 사용할 수 있다.이는 다음 경우에 유용할 수 있다.
- 테스트 및 개발
- 그렇지 않으면 너무 위험해서 프로덕션 시스템에 배포할 수 없는 소프트웨어에 대한 테스트 환경을 root에 설정할 수 있다.
- 종속성 제어
- 소프트웨어는 기대 의존성이 있는 경우에만 칡에서 개발, 구축 및 테스트할 수 있다.이를 통해 개발자가 서로 다른 프로그램 라이브러리를 설치한 프로젝트를 구축함으로써 발생할 수 있는 일부 연결 스큐를 방지할 수 있다.
- 호환성.
- 다른 ABI를 사용하는 레거시 소프트웨어 또는 소프트웨어는 지원 라이브러리 또는 데이터 파일이 호스트 시스템의 이름이나 링크에서 충돌할 수 있기 때문에 때때로 츄루트에서 실행되어야 한다.
- 회복
- 시스템을 부팅할 수 없게 렌더링할 경우 대체 루트 파일 시스템(예: 설치 미디어 또는 라이브 CD)에서 부트스트래핑한 후 손상된 환경으로 다시 이동하는 데 츄루트를 사용할 수 있다.
- 권한 분리
- 프로그램은 열려 있는 파일 설명자(파일, 파이프라인, 네트워크 연결용)를 츄루트로 운반할 수 있게 되어 있어, 츄루트 디렉토리 내에 작업 파일을 둘 필요가 없게 되어 감옥 설계를 간소화할 수 있다.이것은 또한 보안 침해를 사전에 억제하기 위해 특권 프로그램의 잠재적으로 취약한 부분을 샌드박스에서 실행하는 공통적인 배치를 단순화한다.chroot는 루트 권한이 있는 프로세스를 포함하기에 반드시 충분하지 않다는 점에 유의하십시오.
제한 사항
root 메커니즘은 특권한 (root) 사용자에 의한 의도적인 변조로부터 방어하기 위한 것이 아니다.대부분의 시스템에서 chroot 컨텍스트가 제대로 쌓이지 않으며 충분한 특권을 가진 루트 프로그램은 두 번째 root를 수행하여 root를 발생시킬 수 있다.이러한 보안 취약성의 위험을 완화하기 위해, 뿌리깊은 프로그램들은 투표 후 또는 FreeB와 같은 다른 메커니즘을 통해 가능한 한 빨리 루트 특권을 포기해야 한다.SD 감옥 – 대신 SD 감옥을 사용해야 한다.FreeBSD와 같은 일부 시스템은 두 번째 root 공격을 방지하기 위한 예방 조치를 취한다는 점에 유의하십시오.[12]
일반 파일 시스템에서 장치 노드를 지원하는 시스템에서 루트 사용자는 여전히 장치 노드를 생성하고 그 위에 파일 시스템을 탑재할 수 있으므로, 권한 있는 사용자가 시스템 장치에 대한 낮은 수준의 액세스를 차단하기 위해 chroot 메커니즘을 단독으로 사용하는 것은 아니다.I/O, 대역폭, 디스크 공간 또는 CPU 시간과 같은 리소스의 사용을 제한하려는 것은 아니다.대부분의 유닉스는 완전한 파일 시스템 지향적이지는 않으며 시스템 호출 인터페이스를 통해 네트워킹 및 프로세스 제어와 같은 잠재적으로 파괴적인 기능을 뿌리내린 프로그램에 남겨둔다.
시작할 때 프로그램은 특정 사전 설정 위치에서 스크래치 공간, 구성 파일, 장치 노드 및 공유 라이브러리를 찾을 것으로 예상한다.루트 프로그램이 성공적으로 시작되려면, root 디렉토리를 이러한 파일의 최소 집합으로 채워야 한다.이것은 칡을 일반적인 샌드박스 메커니즘으로 사용하기 어렵게 만들 수 있다.Japekit과 같은 툴은 이러한 프로세스를 완화하고 자동화하는 데 도움을 줄 수 있다.
루트 사용자만 root를 수행할 수 있다.이는 사용자가 특권 상승으로 속이는 특수하게 조작된 root 감옥(예를 들어 가짜 /etc/passwd 및 /etc/shadow 파일 포함) 안에 setuid 프로그램을 넣는 것을 방지하기 위한 것이다.
일부 유닉스에서는 이러한 제한 사항 중 최소한 일부를 해결하기 위해 chroot 메커니즘의 확장을 제공한다(운영 체제 수준의 가상화 기술 구현 참조).
chroot의 그래픽 애플리케이션
다음과 같은 방법을 사용하여 뿌리 깊은 환경에서 그래픽 애플리케이션을 실행할 수 있다.[13][14]
- xhost 사용(또는 .X Authority에서 암호 복사)
- Xnest와 같은 중첩된 X 서버 또는 최신 Xephyr(또는 감옥 내부에서 실제 X 서버를 시작)
- X11 전달(SSH -X) 기능을 사용하여 SSH를 통해 chroot에 액세스
- Xchroot 사용자용 확장 버전 chroot 및 Xorg/X11 전달(socat/mount)
- X11 VNC 서버 및 환경 외부의 VNC 클라이언트 연결.
주목할 만한 애플리케이션
포스트픽스 메일 전송 에이전트는 개별적으로 뿌리 뽑은 도우미 프로그램의 파이프라인으로 작동한다.
4.2처럼BSD 이전에 데비안과 우분투 내부 패키지 구축 농장은 의도하지 않은 패키지 간 빌드 의존성을 잡기 위해 광범위하게 chroots를 사용한다.SUSE는 빌드 프로그램과 유사한 방법을 사용한다.Fedora, Red Hat 및 다양한 RPM 기반 배포는 모의와 같은 root 도구를 사용하여 모든 RPM을 구축한다.
POSIX 시스템용 많은 FTP 서버는 신뢰되지 않은 FTP 클라이언트를 샌드박스하기 위해 chroot 메커니즘을 사용한다.이것은 들어오는 연결을 처리하기 위한 프로세스에 대해 포킹한 다음 어린이를 칭하는 것으로 수행될 수 있다(프로그램 시작에 필요한 라이브러리로 chroot를 채울 필요가 없도록).
권한 분리가 활성화된 경우 OpenSSH 데몬은 권한 없는 도우미 프로세스를 빈 디렉토리로 root하여 각 클라이언트에 대한 사전 인증 네트워크 트래픽을 처리한다.데몬은 또한 SFTP와 셸 세션을 chroot(버전 4.9p1 이후)로 샌드박스할 수 있다.[15]
Chrome OS는 Crouton을 사용하여 리눅스 인스턴스를 실행하기 위해 chroot를 사용할 수 있으며,[16] 그렇지 않으면 씬 OS에 하드웨어 리소스에 대한 액세스를 제공할 수 있다.이 기사와 관련된 보안 관련 의미는 여기에 적용된다.
Linux 호스트 커널 가상 파일 시스템 및 구성 파일
Linux에서 기능적인 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 # 링크 /etc/mtab chroot $TARGETDIR rm /etc/mtab 2> /dev/null chroot $TARGETDIR ln/pec/mount /etc/mtabs참고 항목
참조
- ^ "jail, section 9". docs.freebsd.org.
- ^ Losh, Warner (February 2, 2000). "Warner's Random Hacking Blog: Whither chroot?".
- ^ "Data Infrastructures for the rest of us - III - software".
- ^ Cheswick, Bill (1991). "An Evening with Berferd: In Which a Cracker is Lured, Endured, and Studied" (PDF). USENIX Summer Conference Proceedings, Volume 1. USENIX. San Francisco, California: The Association. p. 163.
- ^ Carole, Fennelly. "Escap Chroot". SunWorld Online. Carole Fennelly. Archived from the original on 2000-01-09.
- ^ Riondato, Matteo. "FreeBSD Handbook "Jails" Chapter". freebsd.org. The FreeBSD Project. Retrieved 2018-10-30.
- ^ Nicolas, Boiteux. "chroot shell". lycos.fr. Nicolas Boiteux. Archived from the original on 2002-10-14. Retrieved 24 March 2018.
- ^ "Girafon". girafon.org. girafon. Archived from the original on 2004-06-12. Retrieved 24 March 2018.
- ^ Schmidt, Klaus (2006-09-02). High Availability and Disaster Recovery: Concepts, Design, Implementation. Springer Science & Business Media. p. 186. ISBN 9783540345824. Retrieved 2014-08-21.
- ^ "SourceForge LXC Download Files". sourceforge.net. Retrieved 2014-08-21.
- ^ Rosen, Rami (2014-03-26). "Linux Containers and the Future Cloud" (PDF). Retrieved 2014-08-21.
- ^ "chroot(2)". www.freebsd.org.
- ^ "Development/Howto/Chroot". Mandriva Wiki. 25 July 2011. Archived from the original on 2014-03-26.
- ^ "Archived copy". Archived from the original on 2011-08-31. Retrieved 2011-10-13.
{{cite web}}: CS1 maint: 타이틀로 보관된 사본(링크) - ^ "sshd_config(5) manual page". 2017-10-26. Retrieved 2018-02-04.
- ^ "Chromium OS Universal Chroot Environment (on github)". Retrieved 2016-12-17.
