루트가 아니어도 지정된 파일과 표준 출력에 대한 프로세스의 액세스를 제한할 수 있습니까?

루트가 아니어도 지정된 파일과 표준 출력에 대한 프로세스의 액세스를 제한할 수 있습니까?

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

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

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

저는 다음과 같은 솔루션을 고려했습니다.

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

  2. 특정 gcc옵션, .h파일 또는 C 라이브러리 제한 사항을 사용하십시오. (저는 컴파일에 대해 거의 알지 못합니다. 이론적으로는 헤더 파일이나 라이브러리를 사용하지 않고도 C에서 무엇이든 할 수 있습니다.)

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

이것이 가능합니까?

관련 정보