2017-09-06 4 views
2

런타임시로드 된 신뢰할 수없는 동적 라이브러리 모듈 (DLL, SO/DSO)을 허용하는 서버를 Boost.DLL을 사용하여 작성합니다.공유 메모리 및 메시지 큐에 대한 자식 프로세스 액세스 제한

신뢰할 수있는 모듈을 관련 공유 메모리 (읽기 전용) 및 프로세스 간 대기열에만 액세스 할 수있는 별도의 프로세스로 실행하고 싶습니다. permissions 객체를 허용 않습니다

Process layout

부스트는 공유 메모리와 연관 될 수 있습니다.

on windowsLinux 프로세스를 만든 다음 사용 권한을 조정할 수있는 것처럼 보입니다.

프로세스가

  • (예 : 아마 창에 AdjustTokenPrivileges를 사용하고 계십니까?)로 시작 할 권한이 없음을 생성 할 수있는 방법

    하지만

  • 후 공유 메모리 매핑 된 파일에 대한 액세스 (에 의해 예 읽기 권한이 부여됩니다 permissionsconstructing 공유 메모리 세그먼트를 설정할 때?

또는 이것은 아마도 너무 위험합니다. 워드 프로세서에서

답변

2

첫째 : Boost.Interprocess에서 제공

명명 된 자원도 존재하는 파일을 작성하는 플랫폼 의존의 권한 문제에 대처해야합니다. 프로그래머가 공유 메모리, 메모리 매핑 파일 또는 이름 동기화 메커니즘 (뮤텍스, 세마포어 등)을 사용자간에 공유하려는 경우 이러한 권한을 지정해야합니다. 유감스럽게도 전통적인 UNIX와 Windows 사용 권한은 매우 다르며 Boost.Interprocess는 사용 권한을 표준화하려고하지는 않지만 무시하지는 않습니다.

모든 명명 된 리소스 생성 함수는 플랫폼 종속 사용 권한으로 구성 할 수있는 선택적 사용 권한 개체를 사용합니다. 각 메커니즘은 서로 다른 메커니즘을 통해 에뮬레이트 할 수 있기 때문에 (세마포어 수도있을 매핑 된 파일을 사용하여 구현하거나

: 당신이 그렇게 할 경우

후 즉시 특정 플랫폼에 필요한 permissiong에 대해 알고 있고, 조심 네이티브 세마포어) 사용 권한 유형은 명명 된 리소스의 구현이 변경 될 때 달라질 수 있습니다 (예 : Windows 뮤텍스에서 동기화 사용 권한이 필요하지만 파일의 경우는 아닙니다). 이 문제를 피하기 위해 Boost.Interprocess는 [보통 ¹, 빨간색]과 같이 이름이 지정된 동기화 메커니즘 (뮤텍스, 세마포어 등) 및 적절한 읽기 또는 읽기를 열기 위해 파일 읽기 - 쓰기 - 삭제 권한이 필요합니다 공유 메모리에 대한 쓰기 권한을 삭제합니다. 이 접근 방식은 두 가지 장점이 있습니다. UNIX 유 틸리 티와 유사하며 프로그래머는 명명 된 리소스가 어떻게 구현되는지 알 필요가 없습니다.

사용 권한을 통과 하지 개체 때 ¹


당신의 다른 질문 :

  • 는 (? 예, 아마 창에 AdjustTokenPrivileges 사용)로 시작 할 권한이 없지만,
  • 은 공유 메모리 매핑 된 파일에 대한 읽기 권한이 부여됩니다 (예 : s를 구성 할 때 사용 권한 설정). hared 메모리 세그먼트 α) permissions 객체 않는

번호되지는 호출 프로세스 권한을 준다. permissions 개체 은 다른 프로세스에 대해 액세스를 제한합니다. 나는 create_only 또는 open_or_createpermissions을 지정하는 것이 의미가 있다고합니다.

  • 서버가 특정 사용자 계정으로 실행을 시작
  • 당신이 동일한 계정
  • 를 사용하여 클라이언트를 시작하면 IPC를 만듭니다

    내가 상상하는 것은 윈도우/리눅스에 일반적인 경로는 개체 (소유자)를 만든 계정에서만 액세스 할 수있는 개체

Windows에서 액세스 제어 목록 d this) : 액세스 할 수있는 추가/다른 계정을 지정할 수 있어야합니다.

리눅스에서 이러한 제어를 달성하려면 추가 시스템 호출이 필요합니다 (예 : 공유 객체의 소유자/그룹을 변경하거나 클라이언트 사용자 계정을 기본/보조 그룹으로 추가하는 경우)).

요약 : _I는 "사용 권한없이받는 사람 시작"대신 특정받는 사람에게 액세스 권한을 부여하는 데 중점을 둡니다. 후자는 비실용적입니다 (프로세스가 "권한없이"기능하지 않을 수도 있음). 런타임 중에 권한을 높이는 것은 정적으로 할당/관리 된 권한을 사용하는 것보다 훨씬 어렵습니다. 물론 본질적으로 사용 권한을 추가하는 것이 덜 안전합니다.

+0

이것은 도움이됩니다. 진정한 도전은 각 플랫폼의 사용 권한을 이해하는 것입니다. – wally

+0

나는 그 평가에 완전히 동의한다. – sehe