2013-08-11 6 views
0

나는 spoj.pl과 같은 온라인 주드 사이트를 작성 중이며 프로그램 컴파일 및 실행을위한 감옥을 만들고 있습니다. 나는 c/C++ 소스 코드를 취하고 코드를 컴파일하고 실행하는 스크립트를 작성했습니다. debootstrap에 의해 생성 된 감옥에서이 프로그램을 실행해야하지만 스크립트에 대한 사용 권한을 제한하고 바이너리가 원래/home/우분투 시스템에있는 입출력 파일 만 읽을 수있게해야합니다.debootstrap 원래의 루트 시스템 chroot jail

가능합니까?

Linux system: 
/home/ubuntu: 
    This folder has 
    online_judge/scripts.py ... 
    input_output/input*.txt,output*.txt 

/Jail 
    submissions/code.c 
    submissions/code.cpp 

나는, 제한된 감옥 사용자와 함께 감옥에/홈/우분투의 scripts.py를 호출하는 코드를 컴파일하고 바이너리를 실행해야합니다. 감옥 사용자는 내가에/홈/우분투의 scripts.py를 호출 할 필요가

답변

0

input_output/입력 * 내가 줄 수있는 TXT 후 실행 권한을 제외하고/가정의/우분투 파일에 액세스 할 수해서는 안됩니다 제한된 감옥 사용자와 감옥,

당신은/집/우분투/online_judge의/감옥에 있지 않은 scripts.py가 위치한 말했다. 따라서 감옥 사용자가/감옥으로 제한되어 있거나 그렇지 않습니다. 제한된 감옥 사용자가 online_judge/scripts.py를 실행해야한다면/Jail의 어딘가에 액세스 할 수 있도록해야합니다.

감옥 사용자가 input_output/입력을 제외하고/가정의/우분투 파일에 액세스 할 수해서는 안 * 내가 허락 한 후 실행 줄 수있는 TXT

하드 링크가 도움이 될 수

, 예를 들어, "ln /home/ubuntu/online_judge/scripts.py /Jail/scripts.py"로 제한된 감옥 사용자는 /Jail/scripts.py를 통해 scripts.py에 액세스 할 수 있습니다. 해당 파일에 대한 쓰기 액세스를 제한하십시오. 그렇지 않으면 s/he는 "사본"을 모두 수정합니다.

+0

감사합니다. 하지만 현재 감옥 안에서 gcc/g ++을 실행하는 데 문제가 있습니다. 감옥에 모든 시스템 파일을 가져 오는 쉬운 방법이 있습니까? – user1159517

+0

질문에는 Ubuntu라는 태그가 붙어 있기 때문에 "apt-cache search jail"에는 Linux "jails"또는 chroot 환경 ("감옥"은 실제로 BSD 용어 인 IIRC)을 설정하는 데 도움이되는 도구가 있습니다. – ckujau

0

debootstrap을 사용해야합니다. 필요한 컴파일 링 툴체인을 다운로드 할 수 있습니다. 따라서 debootstrap의 제공된 toolchain에서 기존 시스템 toolchain 사용을 시도하는 대신 내부의 감옥에서 apt-get를 통해 toolchain을 다운로드 할 수 있습니다. 모두 실패한 경우 scratchbox (www.scratchbox.org)를 사용해보십시오. 실행 환경이 필요한 모든 컴파일 링 도구 체인이 포함되어 있습니다. 희망이 도움이 될 것입니다!