xattrs와 함께 binfmt-misc 사용

xattrs와 함께 binfmt-misc 사용

현재 Linux 바이너리를 서로 격리하는 14.04 시스템에서 샌드박싱 소프트웨어를 사용하고 있습니다(AppArmor와 다른 특수한 유형의 네임스페이스 격리 사용).

현재 샌드박스를 호출하는 방법은 다음과 같습니다.

/usr/local/bin/sandbox /path/to/binary --optional-arguments

내 문제는 임의의 특정 바이너리를 호출하여 샌드박스에서 실행하고 싶다는 것입니다.없이/usr/local/bin/sandbox내 쉘 명령 앞에 해당 부분을 추가해야 합니다 . 즉:

/usr/local/bin/sandbox /path/to/binary --optional-arguments --> *new process*

다음과 같이 됩니다:

/path/to/binary --optional-arguments --> *binfmt-misc* --> *new process*

나는 binfmt-misc 덕분에 이 작업을 쉽게 수행할 수 있다고 생각했습니다. 그러나 문서를 읽은 후에는 파일 자체의 매직 비트나 파일 확장자를 통해서만 인터프리터 요청을 지원하는 것으로 보입니다. 이 특정한 경우에는 이러한 작업을 수행하는 것이 비용이 들지 않기 때문에 binfmt-misc에서 읽을 수 있는 샌드박스에서 시작하려는 특정 바이너리에 대한 확장 속성을 지정할 수 있는 옵션을 binfmt-misc에서 찾았습니다. 이 바이너리가 "인터프리터"에 의해 실행되어야 하는지 결정하는 데 사용됩니다 /usr/local/bin/sandbox. 하지만 아직까지 그렇게 할 수 있는 기능을 찾지 못했습니다.

샌드박스를 사용하여 내 컴퓨터와 동일한 아키텍처에 대해 컴파일된 확장 없이 임의의 ELF 바이너리를 자동으로 시작할 수 있는 방법이 있습니까?

답변1

나는 binfmt-misc와 xattrs를 통해 이를 수행하는 방법을 모르지만 다른 접근 방식을 제안하겠습니다. 나는 그것을 시도하지 않았지만 왜 작동하지 않는지 알 수 없습니다.

아이디어는유니온 마운트샌드박스를 호출하는 래퍼 스크립트로 실제 바이너리를 숨깁니다. 상위 디렉터리를 대부분 읽고 그림자가 없는 파일에 쓰는 작업은 하위 디렉터리로 이동하는 통합 마운트가 필요합니다. 이는 모든 통합 마운트 시스템에서 지원되지 않습니다. 특히 이는 현재 Linux 커널에 내장된 OverlayFS를 배제합니다.

일반 래퍼 스크립트를 작성합니다.

#!/bin/sh
exec /usr/local/bin/sandbox "${0#/sandboxed}" "$@"

디렉토리를 생성 /sandbox하고 루트 파일 시스템을 섀도잉하는 통합 마운트를 생성합니다. 나는 사용할 것이다aufs(우분투:aufs-tools), 안타깝게도 최근에 폐기되었습니다. 더 나은 선택이 있을 수 있습니다.

mount -t aufs -o br:/,br:/sandbox aufs-sandbox /

샌드박스하려는 각 실행 파일에 대해 /sandbox/path/to/foo래퍼 스크립트에 연결합니다( /path/to아래에 필요한 디렉터리를 만든 후 /sandbox).

관련 정보