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