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
이 파일들은 다음과 같습니다.복사원본은 원본이 아닙니다.할 수 있다바인드 마운트). 운영 체제는 노출되지 않습니다.
chroot
docker
또는 ... 을 사용하든 lxc
동일한 파일 세트를 포함해야 합니다.
이제 이 점을 참고하시기 바랍니다.반품운영 체제 자체도 마찬가지입니다. 귀하 yum install
또는 apt-get install
패키지가 라이브러리를 포함하여 일부 종속성을 가져올 수 있습니다! 귀하의 운영 체제에는 모든 것이 없습니다! 그것은 단지큰사람들이 더 쉽게 사용할 수 있도록 하는 기본 항목 집합입니다.