루트 없이 지정된 파일 및 stdout에 대한 프로세스 액세스를 제한할 수 있습니까?

루트 없이 지정된 파일 및 stdout에 대한 프로세스 액세스를 제한할 수 있습니까?

학생들이 C 코드를 업로드할 수 있는 서버를 설정하고 싶습니다. 서버는 C 코드를 컴파일하고 바이너리를 실행하며 출력을 학생들에게 보여줍니다.

이제 보안 문제가 발생했습니다. 학생들은 어떤 코드든 업로드할 수 있지만 지정된 파일 2개(읽기용 1개, 쓰기용 1개 fopen)와 stdout에만 액세스할 수 있기를 바랍니다 . 나는 그들이 인터넷이나 시스템의 다른 파일에 액세스하는 것을 원하지 않습니다.

내가 가지고 있는 서버는 컨테이너화된 Linux이며 루트가 없습니다.

나는 다음과 같은 해결책을 생각해 보았습니다.

  1. chroot또는 firejail. (서버의 루트가 없습니다. 컨테이너화되어 있어 euid 설정이 허용되지 않습니다.)

  2. 일부 gcc옵션, .h파일 또는 C 라이브러리 제한을 사용하십시오. (저는 컴파일에 대한 지식이 거의 없습니다. 이론적으로 사람들은 헤더 파일이나 라이브러리를 사용하지 않고도 C로 무엇이든 할 수 있습니다)

  3. strace또는 같은 것을 사용하여 ptrace프로세스를 모니터링하고 내가 원하지 않는 작업을 수행하려는 경우 프로세스를 종료하십시오.

그게 가능할까요?

관련 정보