2012-03-22 4 views
1

신뢰할 수있는 사용자가 소스 코드를 작은 C++ 프로그램에 업로드하고 해당 코드가 서버의 파일에 자동으로 저장되도록하는 기능을 Linux 기반 웹 서비스에 추가하려고합니다. gcc로 컴파일 된 다음 실행되어 표준 출력을 캡쳐합니다. (이되지 ideone.com, 또는 spoj.pl, 또는 topcoder.com, 또는 codechef.com, 또는 이렇게 다른 웹 사이트의 많은과는 달리 기능입니다.)샌드 박스 공개적으로 접근 가능 GCC

내 질문은 :

Q1 . 파일 시스템을 손상 시키거나 네트워크에 액세스하려는 악의적 인 사용자를 막기 위해 어떻게 실행 파일을 샌드 박트합니까?

2. 프로세서 시간과 메모리 사용량과 같은 공정에 대한 시스템 자원을 공정하고 정확하게 측정하는 방법이 있습니까?

+0

왜 downvote입니까? 당신이 의견을 남겨두기보다는 downvote에가는 경우에. –

+0

이것은 더 많은 행정 질문입니다. http://serverfault.com/ 커뮤니티에 문의하십시오. –

+0

@Tom Kerr : 프로그래밍 솔루션이 필요합니다. – Joshua

답변

1
  1. chroot로 uid가에 의해
  2. ulimit를
  3. 패치 커널 소켓 때문에() 실패로이를 실행하고 있습니다.
+0

그리고 장비를 개인 데이터 및 네트워크에 잘 닿지 않게하십시오. 그리고 필연적으로 손상되었을 때 실행 및 실행하기위한 빠른 복구 계획을 수립하십시오. 그리고 아마 신경 쓰지 마라. 컴파일러는 정말로 안전하도록 설계되지 않았습니다. – ams

+0

그래서 감옥에있는 사용자로 컴파일러를 실행해야합니다. – Joshua

+0

커널을 패치 할 필요가 없습니다. 실제 라이브러리 앞에 스텁 libc를 링크하는 것으로 충분하며, 그 스텁 라이브러리에서'socket'을 nop으로 만드십시오. 그러나'syscall '과 같이 몇 가지 더 스텁해야합니다. – MSalters