Linux에서 chroot Jail에 대해 많이 듣거나 읽었지만 사용해본 적이 없습니다(저는 매일 Fedora를 사용합니다). 그러면 chroot "감옥"이란 무엇입니까? 언제, 왜 사용/사용하지 않을 수 있으며, 추가적으로 알아야 할 사항이 있나요? 어떻게 만들 수 있나요?
답변1
Chroot Jail은 프로세스와 해당 하위 프로세스를 시스템의 나머지 부분과 격리하는 방법입니다. 루트 사용자는 쉽게 탈옥할 수 있으므로 루트로 실행되지 않는 프로세스에만 사용해야 합니다.
아이디어는 프로세스를 실행하는 데 필요한 모든 시스템 파일이 복사되거나 링크되는 디렉토리 트리를 만드는 것입니다. 그런 다음 chroot()
시스템 호출을 사용하여 루트 디렉터리를 새 트리의 루트 디렉터리로 변경하고 chroot 환경 내에서 실행되는 프로세스를 시작합니다. 수정된 루트 디렉터리 외부의 경로를 실제로 참조할 수 없기 때문에 해당 위치에서 악의적으로 작업(읽기/쓰기 등)을 수행할 수 없습니다.
Linux에서는 바인드 마운트를 사용하는 것이 chroot 트리를 채우는 좋은 방법입니다. 예를 들어, 이를 사용하면 및 같은 /lib
폴더를 가져올 수 있지만 /usr/lib
그렇지 않은 폴더는 가져올 수 있습니다. /usr
원하는 디렉토리 트리를 감옥 디렉토리에서 생성한 디렉토리에 바인딩하기만 하면 됩니다.
답변2
"chroot 감옥"은 정말 사라져야 할 잘못된 이름이지만 사람들은 여전히 그것을 사용하고 있습니다. chroot
파일 시스템의 디렉터리를 파일 시스템의 루트로 에뮬레이트할 수 있는 도구입니다. 이는 다음과 같은 폴더 구조를 가질 수 있음을 의미합니다.
-- foo
-- bar
-- baz
-- bazz
chroot foo
이렇게 하면 다음이 표시 ls /
됩니다.
-- bar
-- baz
ls
(그리고 실행하는 다른 도구들 까지 ) 이것은 파일 시스템의 유일한 디렉터리입니다. '교도소'가 잘못된 명칭인 이유 chroot
는 그것 때문이 아니다.힘에뮬레이트된 파일 시스템에 남아 있는 프로그램; 자신이 chroot "감옥"에 있다는 것을 알고 있는 프로그램은 상당히 쉽게 탈출할 수 있으므로 chroot
프로그램이 에뮬레이트된 파일 시스템 외부의 파일을 수정하는 것을 방지하기 위한 보안 조치 로 사용해서는 안 됩니다.
답변3
기본적으로 환경의 루트 디렉터리만 변경하면 됩니다. 그래서
/
~이 되다
/some-jail/ (or whatever directory you want)
애플리케이션이 /에 접근하면 /some-jail/을 얻게 됩니다. 또한 응용 프로그램은 /some-jail/에서 벗어날 수 없으므로 컴퓨터의 다른 어떤 것에도 액세스할 수 없다는 것을 알 수 있습니다. 이는 "이봐, 당신은 내가 제공한 것들에만 액세스할 수 있고 시스템의 다른 어떤 것에도 액세스할 수 없습니다"라고 말하는 매우 간단한 방법입니다.
답변4
chroot는 보다 현대적인 용어인 가상 환경으로 쉽게 이해됩니다. 프로세스는 경로 가시성을 설정하기 위해 새로운 가상 루트 디렉터리를 얻습니다. 이는 주로 프로세스가 참조할 수 있는 파일과 라이브러리를 제어하는 편리하고 간단한 방법입니다. 이는 실제 파일 시스템에서 버전이 다를 수 있는 항목을 격리하는 데 매우 유용합니다.
파일 시스템에 표시되는 내용에 대한 일종의 필터로 생각할 수도 있습니다.
예상치 못한 파일 시스템 보기를 방지하려면 chroot 이후 현재 작업 디렉터리를 변경하는 것도 고려하는 것이 중요합니다.
오해하기 쉬운 것 중 하나는 "감옥"이라는 단어입니다. Chroot는 역사적으로 FreeBSD가 감옥이라고 부르는 것을 시뮬레이션하는 데 사용되었습니다(다른 사람들은 이를 샌드박스라고 부를 수도 있음). 이렇게 하려면 프로세스의 권한을 직접 낮춰야 합니다. 이는 좋은 보안 모델이 아닙니다.
일반적인 사용 사례는 시스템이 실제로 가지고 있는 것의 하위 집합인 특정 도구 체인이나 라이브러리, 파일 및 도구 집합에 대한 참조가 필요한 소프트웨어를 컴파일하는 것입니다.