현재 ACM과 같은 공공 프로그래밍 콘테스트 시스템의 백엔드에서 작업 중입니다. 그러한 시스템에서 모든 사용자는 일부 계산 문제를 해결하기 위해 컴파일되고 자동으로 실행되는 코드 소스를 제출할 수 있습니다 (즉, 사람 눈 사전 검토가 수행되지 않음을 의미).GNU/리눅스 시스템 호출을 금지하는 방법
백엔드는 GNU/Linux 전용 시스템으로, 각 참가자가 사용자 그룹에 포함되는 사용자를 생성합니다. 특정 사용자가 보낸 소스는 사용자의 홈 디렉토리에 저장되고 컴파일 및 실행되어 다양한 테스트 케이스에 대해 검증됩니다.
내가 원하는 것은 소스에 대한 Linux 시스템 호출의 사용을 금지하는 것입니다. 이는 문제가 플랫폼 독립적 인 솔루션을 필요로하는 반면 안전하지 않은 소스에 대한 시스템 호출을 가능하게하는 것은 잠재적 인 보안 위반이기 때문입니다. 이러한 소스는 FS에 성공적으로 배치 될 수 있으며 심지어 컴파일 되더라도 실행되지 않을 수 있습니다. 나는 또한 시스템 호출을 포함하는 소스가 전송 될 때마다 통보 받기를 원한다. - 시스템에 이미 확인, 아직 컴파일되지 소스
- 프런트 엔드/사전 컴파일 분석 : 지금까지
, 나는 그런 검사가 배치 될 수있다 다음과 같은 장소를 참조하십시오. 시스템 호출 이름에 대한 간단한 텍스트 검사기. 플랫폼에 의존적이고 컴파일러에 독립적이며 언어 별 솔루션입니다.
- 컴파일러 패치 - 시스템 호출이 발생할 때마다 GCC (또는 툴 체인에 포함 된 다른 컴파일러)를 중단합니다. 플랫폼에 의존적이고, 컴파일러에 의존하며, 언어 독립적 인 솔루션입니다 (우리가 체커를 "충분히 멀리 배치"한다면). 호환성이 손실 될 수도 있습니다. 사실, 나는이 대안을 가장 싫어한다.
- 런타임 검사 프로그램 - 시스템 호출이 프로세스에서 호출 될 때마다이 프로세스와 보고서를 종료하십시오. 이 솔루션은 컴파일러와 언어에 독립적이지만 플랫폼에 따라 달라집니다. 비슷한 플랫폼에서 백엔드를 단기 및 중기에 배포 할 것이므로이 솔루션은 플랫폼에 달려 있습니다.
그래서 질문은 : GNU/리눅스 시스템을 금지 관리자가 사용자 그룹, 사용자 또는 특정 프로세스에 대한 사용을 호출 할 수있는 기회를 제공합니까? 보안 정책 일 수도 있고 경량의 GNU 유틸리티 일 수도 있습니다.
Google에 시도했지만 Google에서 오늘 나를 싫어했습니다.
_ 프론트 엔드/사전 컴파일 분석 _ ← 프리 프로세서 트릭이이를 쉽게 피할 수 있습니다. 프로세스가 미리 열어 둔 파이프에 대해서만 읽기/쓰기를 할 수있는 모드 인'seccomp '가있다. 그것은'prctl()'호출을 통해 가능합니다. 비슷한 질문이 여기에 있으므로 http://www.google.com/search?q=seccomp+site%3Astackoverflow.com&btnG=Buscar&oe=utf-8 – ninjalj
@ninjalj 시도했지만 찾지 못했습니다. 링크를 공유하고 싶습니까? – iehrlich
그냥 내 이전 댓글에 대한 링크를 추가했습니다. – ninjalj