나는 꽤 일반적인 상황에 있다고 생각한다. 나는 초보 교사이며 학생들에게 C 프로그래밍 언어의 기초를 가르쳐야 만합니다. 그들의 숙제를 확인하는 데는 많은 시간이 걸리고이 과정을 어떻게 자동화 할 수 있을지 궁금합니다. 본인의 이메일 주소를이 용도로 사용하기로 결정했습니다. 기본적으로, 나는 학생으로부터의 새로운 메시지, 첨부 파일 다운로드 (각 학생은 소스 코드가 저장되어있는 디렉토리를 가지고있다.), 컴파일, 실행을위한 이메일 주소를 체크하는 스크립트를 작성하고 싶다. 일부 테스트 후 결과를 학생들에게 보냅니다. 문제는 누군가가 시스템 ("rm -rf ../ ..")과 같은 명령을 포함하는 프로그램을 내게 보낼 수 있다는 것입니다.. 이 명령을 실행하지 못하게하고 싶습니다. 그러나 학생들은 자신의 디렉토리에서 파일을 수정하고 다른 디렉토리의 테스트 데이터로 파일을 읽을 수 있어야합니다. 이것을 달성 할 수있는 간단하고 안전한 방법이 있습니까? 가능한 경우 몇 가지 예를 제공 할 수 있습니까?주어진 디렉토리를 제외한 모든 파일을 읽기/수정하는 실행 파일을 금지하는 방법은 무엇입니까?
나는이 질문을하는 사람이 처음은 아니라는 것을 알고 있지만, 나는 대답 할 수있는 모든 대답이 나에게 불분명했으며 몇 년 전 게시되었다. 사람들은 대개 chroot jail을 사용하도록 권장하지만이 방법은 루트 권한이 필요하며 감옥에서 탈출하기가 쉽기 때문에 안전하지 않습니다. 또한 strace에 대해 읽었지만 모든 시스템 호출을 stdin으로 출력합니다. strace로 일부 시스템 호출을 허용하지 않거나 프로그램을 중지 할 수 있습니까?
양해 해 주셔서 감사합니다.
내가 가르치는 내용을 모르지만 devops/sysadmin이 아니기를 바랍니다. 어쨌든 제한된 사용자로 프로그램을 실행할 수 있습니까? – andlrc
기본 프로그래밍 만 가르치는 경우에는 나쁜 생각으로 만드는 두 가지 문제가 있습니다. 첫째, 과제가 너무 커서 시간이 너무 오래 걸려서는 안됩니다. 둘째, 학생들이 프로그래머를 시작할 때 코드가 테스트 스위트를 통과하는지 확인하는 것이 아니라 코드를 살펴야합니다. – chepner
@chepner, 과제가 너무 크지는 않지만 많은 학생들이 있으며 알고리즘이 옳고 테스트를 통과한다면 공식적으로해야합니다. 나는 여전히 프로그램을 살펴볼 것이지만, 테스트 시스템이 덜주의 깊게하고 중요한 부분과 오류에만 집중하는 데 도움이되기를 바랍니다. 또한 원래 문제를 해결하는 방법을 찾고 기본 프로그래밍뿐만 아니라 가르 칠 수 있기를 바랍니다. – user7122617