chroot "jail" - 이것이 무엇이며 어떻게 사용합니까?

chroot "jail" - 이것이 무엇이며 어떻게 사용합니까?

Linux의 chroot 감옥에 대해 많이 들었거나 읽었지만 아직 사용해 본 적이 없습니다(저는 매일 Fedora를 사용합니다). 그렇다면 chroot "감옥"이란 무엇입니까? 언제, 왜 사용/사용하지 않을 수 있으며, 제가 알아야 할 다른 사항이 있습니까? 어떻게 만들 수 있나요?

답변1

Chroot Jail은 프로세스와 그 자식을 시스템의 나머지 부분으로부터 격리하는 방법입니다. 루트 사용자는 매우 쉽게 감옥에서 탈출할 수 있으므로 루트로 실행되지 않는 프로세스에만 사용해야 합니다.

아이디어는 프로세스를 실행하는 데 필요한 모든 시스템 파일을 복사하거나 링크하는 디렉터리 트리를 만드는 것입니다. 그런 다음 chroot()시스템 호출을 사용하여 루트 디렉터리를 이 새 트리의 기반으로 변경하고 해당 chroot 환경에서 실행되는 프로세스를 시작합니다. 수정된 루트 외부의 경로를 실제로 참조할 수 없기 때문에 해당 위치에서 악의적으로 작업(읽기/쓰기 등)을 수행할 수 없습니다.

Linux에서는 바인드 마운트를 사용하는 것이 chroot 트리를 채우는 좋은 방법입니다. 이를 사용하면 예를 들어 /lib와 같은 폴더를 /usr/lib가져오지 않고도 폴더를 가져올 수 있습니다 /usr. 원하는 디렉토리 트리를 감옥 디렉토리에 생성한 디렉토리에 바인딩하기만 하면 됩니다.

답변2

"chroot Jail"은 정말 사라져야 할 잘못된 명칭인데도 사람들이 계속해서 사용하고 있습니다. 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 이후 현재 작업 디렉터리를 변경하는 것도 고려하는 것이 중요합니다.

오해의 소지가 있는 것 중 하나는 감옥이라는 용어입니다. 역사적으로 FreeBSD가 다른 사람들이 샌드박스라고 부를 수 있는 감옥이라고 부르는 것을 시뮬레이션하기 위해 chroot를 사용해 왔습니다. 이를 위해서는 프로세스의 권한을 자체적으로 줄여야 합니다. 훌륭한 보안 모델은 아닙니다.

일반적인 사용 사례는 시스템이 실제로 가지고 있는 것의 하위 집합인 특정 도구 체인이나 라이브러리, 파일 및 도구 집합을 참조해야 하는 소프트웨어를 컴파일하는 것입니다.

관련 정보