일종의 샌드 박스에서 bash 스크립트를 실행할 수 있습니까?


13

우리 제품은 특정 목표를 달성하기 위해 섬세한 서버에서 알 수없는 bash 스크립트를 실행해야합니다. 이 bash 스크립트는 사용자가 제공합니다. 우리는 특정 명령 만 허용하고 다른 명령은 모두 허용하지 않기를 원합니다. 또한 일부 명령을 다른 명령으로 바꿔야합니다.

예를 들어 스크립트를 실행하고 다음 명령을 허용하려고합니다. echo cat awk

그러나 다른 명령을 허용하지 마십시오 (여기서는 특정 목록을 제공하고 싶지 않습니다).

또한 스크립트에 cp 명령이 포함되어 있으면 스크립트를 캡처하여 다른 명령 (별명을 사용하여 수행 할 수 있음)으로 리디렉션하려고합니다.

이것이 어떻게 수행되는지 아십니까?

답변:


9

가장 쉬운 방법은 스크립트를 실행할 수있는 명령 만 포함 된 chroot jail 을 사용하는 것 입니다. 그런 다음 chroot디렉토리 를 호출 한 다음 스크립트를 실행하는 랩퍼를 통해 스크립트를 실행하십시오.


17

가상 머신 내에서 스크립트를 실행하는 데 100 % 안전 부족이 없으므로 스크립트가 목표를 달성하지 못할 수 있습니다. 그러나 도움이 될 수있는 두 가지 기능이 있습니다. 악의적 인 사람이 스크립트를 작성했다고 걱정되는 경우 이러한 기능으로는 충분하지 않습니다. 그러나 스크립트가 부주의 한 프로그래머가 작성했거나 다른 목표를 염두에두고 스크립트가 시스템에 악영향을 미칠 수 있다고 걱정하는 경우이 두 기능 중 하나가 적절한 샌드 박싱 환경을 제공합니다.

  • bash를로 호출 하여 제한된 쉘 을 실행할 수 있습니다 bash -r. 자세한 설명은 bash 매뉴얼을 참조하십시오. 기본 아이디어는 스크립트가에 있지 $PATH않거나 변경 $PATH될 수없고 파일로 또는 파일에서 리디렉션 할 수없는 명령 및 몇 가지 추가 제한 사항을 호출 할 수 없다는 것 입니다. 이것은 설정하기가 매우 간단하지만 알 수없는 스크립트가 검토하기에 너무 복잡한 경우 제한된 쉘에서 금지 된 많은 것들을 사용할 가능성이 있습니다.

  • chroot jail을 설정할 수 있습니다 . 아이디어는 디렉토리 트리를 설정 하고 전체 파일 시스템 /some/root이라고 생각하는 환경에서 스크립트를 실행하는 것입니다 /some/root( chroot루트 변경이 짧음). 디렉토리 트리가 설정되면로 스크립트를 (로 복사 /some/root/myscript) 실행하십시오 chroot /some/root /bin/bash /myscript. 예를 들어, /some/root/bin허용하려는 명령 으로 디렉토리 를 설정 하면 chrooted 프로그램은이 디렉토리를로 간주 /bin합니다. 라이브러리, 데이터 파일, bash스크립트 자체 등 chroot 내에서 프로그램 실행에 필요한 모든 것을 복사해야합니다 . 스크립트 /proc는 chroot 내에 마운트 해야 합니다. 같은 명령 으로이 작업을 수행 할 수 있습니다 mount -t proc proc /proc.

    스크립트에서 전체 디렉토리 트리를 사용할 수있게하려면 /var/example몇 가지 선택 사항이 있습니다. 아래에서 사본을 만들 수 /some/root있습니다. 하드 링크를 만들 수 있습니다 (응용 프로그램에서 작동하고 chroot가 동일한 파일 시스템에있는 경우). 리눅스에서, 당신은 chroot 안에서 mount --bind /var/example /some/root/var/example“그 래프팅” 할 수 있습니다 /var/example. 링크 대상이 chroot 내에서 결정되므로 기호 링크가 작동하지 않습니다.

    chroot는 특히 루트로 실행되는 프로세스에 대해 절대적인 보안을 제공하지 않습니다. 예를 들어, 루트 프로세스는 chroot 내에 장치 파일을 작성하고이를 통해 전체 디스크에 액세스 할 수 있습니다. 여전히 네트워크 연결을 할 수있는 chroot에 프로세스가 (당신은 chroot 안에서 모든 네트워킹 프로그램을 포함하지 않음으로써이를 금지 할 수 신뢰할 수없는 프로그램이 파일을 생성하고 실행 만들거나 기존의 실행 파일을 덮어 쓸 수 없도록).


필요한 모든 것을 복사해야합니다. 복사 하지 않고 기호 나 하드 링크를 만들 수 있습니까?
kyb

1
@kyb 하드 링크 : 예. 심볼릭 링크 : 아니요, 심볼릭 링크는 볼 수있는 파일 만 가리킬 수 있으며 chroot를 벗어날 수는 없습니다. 하드 링크는 이것을 사용하기 어렵고 어리석게도 : 파일을 바꾸면 끊어지고 chroot 내에서 쓰기 가능하면 원래 사본이 노출됩니다. 전체 트리를 사용 가능하게하려면이를 복사하거나 읽기 전용 바인드 마운트를 수행하십시오.
Gilles 'SO- 악마 그만'

나는처럼 사용할 수 일반적인 명령을 내리는 데 필요한 grep, awk, units, 수동으로 모든 bin 파일과 모든 의존성을 복사하거나 유틸은 chroot에서 일을해야하는지 명시 적으로 말할 수있는 몇 가지 편리한 해킹이하는 등해야합니까 필요?
kyb
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.