2016-11-06 8 views
3

나는 꽤 일반적인 상황에 있다고 생각한다. 나는 초보 교사이며 학생들에게 C 프로그래밍 언어의 기초를 가르쳐야 만합니다. 그들의 숙제를 확인하는 데는 많은 시간이 걸리고이 과정을 어떻게 자동화 할 수 있을지 궁금합니다. 본인의 이메일 주소를이 용도로 사용하기로 결정했습니다. 기본적으로, 나는 학생으로부터의 새로운 메시지, 첨부 파일 다운로드 (각 학생은 소스 코드가 저장되어있는 디렉토리를 가지고있다.), 컴파일, 실행을위한 이메일 주소를 체크하는 스크립트를 작성하고 싶다. 일부 테스트 후 결과를 학생들에게 보냅니다. 문제는 누군가가 시스템 ("rm -rf ../ ..")과 같은 명령을 포함하는 프로그램을 내게 보낼 수 있다는 것입니다.. 이 명령을 실행하지 못하게하고 싶습니다. 그러나 학생들은 자신의 디렉토리에서 파일을 수정하고 다른 디렉토리의 테스트 데이터로 파일을 읽을 수 있어야합니다. 이것을 달성 할 수있는 간단하고 안전한 방법이 있습니까? 가능한 경우 몇 가지 예를 제공 할 수 있습니까?주어진 디렉토리를 제외한 모든 파일을 읽기/수정하는 실행 파일을 금지하는 방법은 무엇입니까?

나는이 질문을하는 사람이 처음은 아니라는 것을 알고 있지만, 나는 대답 할 수있는 모든 대답이 나에게 불분명했으며 몇 년 전 게시되었다. 사람들은 대개 chroot jail을 사용하도록 권장하지만이 방법은 루트 권한이 필요하며 감옥에서 탈출하기가 쉽기 때문에 안전하지 않습니다. 또한 strace에 대해 읽었지만 모든 시스템 호출을 stdin으로 출력합니다. strace로 일부 시스템 호출을 허용하지 않거나 프로그램을 중지 할 수 있습니까?

양해 해 주셔서 감사합니다.

+1

내가 가르치는 내용을 모르지만 devops/sysadmin이 아니기를 바랍니다. 어쨌든 제한된 사용자로 프로그램을 실행할 수 있습니까? – andlrc

+4

기본 프로그래밍 만 가르치는 경우에는 나쁜 생각으로 만드는 두 가지 문제가 있습니다. 첫째, 과제가 너무 커서 시간이 너무 오래 걸려서는 안됩니다. 둘째, 학생들이 프로그래머를 시작할 때 코드가 테스트 스위트를 통과하는지 확인하는 것이 아니라 코드를 살펴야합니다. – chepner

+0

@chepner, 과제가 너무 크지는 않지만 많은 학생들이 있으며 알고리즘이 옳고 테스트를 통과한다면 공식적으로해야합니다. 나는 여전히 프로그램을 살펴볼 것이지만, 테스트 시스템이 덜주의 깊게하고 중요한 부분과 오류에만 집중하는 데 도움이되기를 바랍니다. 또한 원래 문제를 해결하는 방법을 찾고 기본 프로그래밍뿐만 아니라 가르 칠 수 있기를 바랍니다. – user7122617

답변

-1

아마 당신은 그것은 당신에게 prorgram로 내 보낸 시스템이 수출 또는 기타 승인되지 않은 기능의 경우, 프로그램을 실행하지 않고 그것을 볼 수있는 모든 기능을 보여줍니다

nm 

를 사용하여 내 보낸 심볼 볼 수 있습니다.

+0

지금은 꽤 좋고 단순 해 보이지만, 내가 찾는 시스템을 제외하고는 어떤 전화인지 모르겠다. 나는 그것에 대해 생각해야한다. 시스템 호출을 수신 할 다른 방법이 없으면 사용자의 접근 방식을 사용합니다. 고맙습니다. – user7122617

0

VM 내부에서 학생 코드를 실행하기 전에 테스트 VM을 설정하고 미러링하십시오.

재해에서 복구하려면 미러를 사용하십시오.

또한 매일 밤, 주간에 자동으로 미러를 다시 초기화하도록 VM을 스크립팅 할 수 있습니다.

0

사용중인 Linux의 맛을 모르지만 fakechroot을 사용해 보셨습니까? 특정 시스템 호출을 가로 채고 루트가 아닌 사용자가 chroot를 사용할 수있게하는 shim 라이브러리를 만들어 작동합니다. 너에게 잘 맞는 것 같아. 어떤 이유로 든 적합하지 않다면 LXC 또는 docker과 같은 컨테이너 시스템을 사용하는 것이 좋습니다.