SELinux 샌드박스에서 학생 과제로 만들어진 프로그램을 실행하고 싶습니다(일부 학생들이 처음에 "흥미로운" 작업을 시도했는지 여부를 매우 주의 깊게 확인할 필요 없이 과제 채점의 첫 번째 부분으로 출력 및 동작 확인). .
대부분의 작업은 입력을 읽고 출력을 생성해야 합니다. 일부는 시스템의 파일을 읽을 수도 있습니다. 그런 다음 시스템에서 누구나 읽을 수 있는 파일을 읽을 수 있기를 원합니다.
sandbox assignment.py
CentOS 7의 SElinux 샌드박스에 있는policycoreutils-python에서 샌드박스가 제공되는 일부 영역에서 잘 작동합니다 . 그러면 copy.py는 파일에 쓸 수 없고 네트워크에 액세스할 수 없으며 기타 여러 가지 나쁜 문제가 발생합니다. 하지만 여전히 내 파일을 읽을 수 있습니다.
실제로 로컬 파일을 읽을 수 있지만 NFS 마운트 파일은 읽을 수 없습니다. 또한 NFS 마운트 파일에 액세스 할 sandbox -t sandbox_min_t
수 있지만(이것이 바로 내가 원하는 것임) 테스트 중인 프로그램이 내 모든 파일에 액세스할 수 있다는 문제가 남아 있습니다. 전 세계가 읽을 수 있는 파일에만 액세스하거나 지정된 사용자가 읽을 수 있는 파일에만 액세스하도록 어떻게 알릴 수 있나요?
(다른 샌드박스에서 더 쉽게 달성할 수 있다면 CentOS의 다른 샌드박스를 사용해도 됩니다.)
(단순히 프로그램을 테스트하기 위해 새 사용자 계정을 만들고 싶지는 않습니다. 부분적으로는 여러 교사/보조가 이 작업을 수행해야 할 수 있기 때문에 그렇게 하고 싶지 않으며 계정이 개인용이고 개인 계정이 아니기를 바랍니다. 사용자 이름 공간이 너무 복잡해요.)
답변1
이미 열려 있는 파일 설명자를 읽고 쓸 수 있는 비교적 간단한 샌드박스는 다음을 사용하여 구현할 수 있습니다.seccomp
. Python 프로그램은 샌드박스를 초기화한 다음 신뢰할 수 없는 스크립트를 실행합니다.libseccomp 2.2.0(LWN)에 대한 Python 바인딩이 추가되었습니다.Python에서 libseccomp2 API를 사용하는 방법에 대한 일반적인 예가 있습니다.
SELinux 샌드박스는 신뢰할 수 없는 애플리케이션을 실행할 수 있는 보다 일반적인 샌드박스를 제공할 수 있습니다.sandbox
이 명령에는 파일에 대한 액세스를 차단하는 데 충분할 수 있는 몇 가지 유용한 옵션이 있습니다. 이 옵션을 사용하면 -M
홈 디렉터리와 임시 디렉터리가 tmpfs 마운트로 가려져 샌드박스가 기본 파일에 액세스하지 못하게 됩니다. -i
옵션 과 함께 필요한 파일을 임시 디렉터리에 복사할 수 있습니다. 파일이 크지 않은 경우 가장 쉬운 방법은 파일을 샌드박스에 복사하는 것입니다. 이상적으로는 사용 사례에 맞게 사용자 정의 샌드박스 도메인을 작성하는 것이 좋습니다.
LXC 컨테이너는 또 다른 옵션을 제공합니다. 그러나 모든 것을 설정하는 것은 약간 더 많은 작업이지만 결과 컨테이너는 많은 유연성을 제공합니다. 컨테이너는 읽기 전용 파일 시스템을 가질 수 있으며 쓰기 가능한 애플리케이션 디렉터리의 바인드 마운트를 사용할 수 있습니다. 구성옵션애플리케이션이 새로운 권한을 얻지 못하도록 방지하는 데 사용할 수 있습니다.