2009-12-27 2 views
2

서버가 스레드 풀에 새 스레드를 만듭니다. 이 쓰래드는 버퍼에 물건을 읽어 들이고, 그 이후에 몇몇 코드가 실행됩니다. 안전하지 않을 수있는 코드 (또는 해킹 등으로 해킹 등으로 변경 될 수 있음) 전에 스레드의 권한을 변경하여 보안을 설정하고 싶습니다.스레드 권한

...하지만 거의 지식이 없습니다) 스레드에서이 안전하지 않은 코드에 대해 일종의 "샌드 박스"를 만들 수 있습니다. (필자는 UNIX와 비슷한 OS를 원할 것이다. 왜냐하면 필자는 아이디어가 없기 때문에, Windows 용으로 어떻게 할 것인가).

모든 아이디어가 어떻게 스레드 권한을 변경하려면? (나는 Boost 라이브러리를 사용한다). 그리고 메모리 사용의 경계를 정의 할 수 있다면 정말 좋을 것입니다. (뭔가가 - 스레드가 스택 힙의 1Mb 이상을 사용하려고하면 - 뭔가 잘못되었습니다 - 죽이십시오).

그리고 한 가지 더 :) - 내가 스레드 내에서 chroot를 사용하면 루트 디렉토리를 변경합니다. 전체 응용 프로그램에 대한?

감사 인사.

답변

6

적어도 커널 해킹이없는 경우에도 Unix 또는 Windows에서 원시 코드의 스레드에 대한 사용 권한을 제어 할 수있는 방법이 없습니다. 하드웨어 (적어도 x86)의 '링'메카니즘은 이런 식으로 설계되었습니다 - 당신은 스레드를 덜 특권있는 링으로 밀어 넣을 것입니다. 그러나 운영 체제 중 어떤 것도 사용자 모드를 지원하지 않습니다. 스레드의 chroot가 전체 프로세스를 chroot합니다.

네이티브 코드를 사용해야 할 경우 할 수있는 일은 스레드가 아닌 프로세스를 만드는 것입니다. 그런 다음 mmap을 사용하여 메모리를 공유 할 수 있으며 매핑에서 읽기 전용을 사용하여 공유를 제어 할 수 있습니다. 그러나 악의적 인 코드 관련 문제가있는 경우 프로세스는 다른 액세스 ID로 실행해야합니다.

+0

감사합니다. 나는 DB와 configs를 실행 한 후에 chroot만을 사용할 것이다. –

+0

앞으로 다른 질문을 할 계획이라면 '수락'확인란을 선택하십시오. – bmargulies

+0

아마도 내가 뭔가 잘못 이해 한 것 같지만, 이런 것 같습니다. 4.1.2.2 jail (2) 시스템 호출 http://www.freebsd.org/doc/en/books/arch-handbook/jail.html? –