
학생들이 C 코드를 업로드할 수 있는 서버를 설정하고 싶습니다. 서버는 C 코드를 컴파일하고 바이너리를 실행하며 출력을 학생들에게 보여줍니다.
이제 보안 문제가 발생했습니다. 학생들은 어떤 코드든 업로드할 수 있지만 지정된 파일 2개(읽기용 1개, 쓰기용 1개 fopen
)와 stdout에만 액세스할 수 있기를 바랍니다 . 나는 그들이 인터넷이나 시스템의 다른 파일에 액세스하는 것을 원하지 않습니다.
내가 가지고 있는 서버는 컨테이너화된 Linux이며 루트가 없습니다.
나는 다음과 같은 해결책을 생각해 보았습니다.
chroot
또는firejail
. (서버의 루트가 없습니다. 컨테이너화되어 있어 euid 설정이 허용되지 않습니다.)일부
gcc
옵션,.h
파일 또는 C 라이브러리 제한을 사용하십시오. (저는 컴파일에 대한 지식이 거의 없습니다. 이론적으로 사람들은 헤더 파일이나 라이브러리를 사용하지 않고도 C로 무엇이든 할 수 있습니다)strace
또는 같은 것을 사용하여ptrace
프로세스를 모니터링하고 내가 원하지 않는 작업을 수행하려는 경우 프로세스를 종료하십시오.
그게 가능할까요?