Linux 샌드박스에서 완전한 격리

Linux 샌드박스에서 완전한 격리

iOS의 애플리케이션(및 OS X의 샌드박스 애플리케이션)은 애플리케이션별 파일 및 디렉터리만 포함하는 가상 루트 파일 시스템으로 제한됩니다. iOS 애플리케이션에 표시되는 루트 디렉터리는 다음과 같습니다.

/
    Application.app/
    Documents/
    Library/
    tmp/

보시다시피, 애플리케이션을 실행하는 데 필요한 chroot와 달리 샌드박스 루트에는 시스템 실행 파일이나 공유 라이브러리가 노출되어 있지 않습니다. 이는 Tizen, bada 및 많은 J2ME 운영 체제에서도 마찬가지입니다. Linux는 현재 LXC, Docker, Chrome OS와 같은 소프트웨어에서 사용되는 네임스페이스, cgroup, seccomp-bpf와 같은 샌드박싱을 위한 새로운 기술을 얻었습니다. 이러한 기술 중 하나를 사용하여 다음과 유사한 응용 프로그램의 루트를 만들 수 있습니다.

/
    app/
    data/
    resources/
    app.xml

임베디드 플랫폼이나 가전제품 장치에서 누군가 장치의 나머지 파일 시스템을 애플리케이션에 노출하고 싶어하지 않을 수 있습니까? 저는 iOS 앱이 감옥에 갇히지 않고도 Apple의 라이브러리와 프레임워크를 호출할 수 있다고 추측합니다. 그렇다면 Linux의 최신 기술도 같은 일을 할 수 있을까요?

답변1

당신은하지 않습니다필요chroot애플리케이션을 실행할 내부 시스템 라이브러리 또는 바이너리입니다 .

예를 들어:

$ ls chroot_test 
hello*
$ sudo chroot chroot_test /hello
Hello, World

이것이 작동하는 이유는 무엇입니까? 프로그램이 정적으로 링크되어 있으므로 hello종속성이 없습니다.

$ file chroot_test/hello 
chroot_test/hello: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), statically linked, stripped

기본적으로 어떤 기술을 사용하더라도 파일은필요"샌드박스"를 입력하는 것은 애플리케이션을 실행하는 데 필요한 최소한의 작업입니다. 따라서 동적으로 링크된 프로그램은 libc.so기다려야 할 수도 있습니다 ld.so.

간단한 bash환경에는 더 많은 파일이 필요할 수 있습니다.

$ find chroot-bash -type f
chroot-bash/lib64/libdl.so.2
chroot-bash/lib64/ld-linux-x86-64.so.2
chroot-bash/lib64/libc.so.6
chroot-bash/lib64/libtinfo.so.5
chroot-bash/bin/bash

우리는 할 수 없습니다하다그 안에는 많은 것이 있습니다(예: 명령은 없지만 ls실행 중인 쉘입니다 bash.

$ sudo chroot chroot-bash /bin/bash
bash-4.2# pwd
/
bash-4.2# ls
bash: ls: command not found
bash-4.2# echo *
bin lib64

이 파일들은 다음과 같습니다.복사원본은 원본이 아닙니다.할 수 있다바인드 마운트). 운영 체제는 노출되지 않습니다.

chrootdocker또는 ... 을 사용하든 lxc동일한 파일 세트를 포함해야 합니다.

작은 도커 컨테이너의 예

이제 이 점을 참고하시기 바랍니다.반품운영 체제 자체도 마찬가지입니다. 귀하 yum install또는 apt-get install패키지가 라이브러리를 포함하여 일부 종속성을 가져올 수 있습니다! 귀하의 운영 체제에는 모든 것이 없습니다! 그것은 단지사람들이 더 쉽게 사용할 수 있도록 하는 기본 항목 집합입니다.

관련 정보