에 전화하면 런타임에 공유 취소를 취소 unshare ./fooprogram
할 수 있는 방법이 있나요 ?fooprogram
답변1
방법이 있다면 커널 취약점입니다.
이 리뷰를 작성하는 시점에서는 최신 커널(5.7.2),이 문제에 관한 문서가 있습니다:
unshare()
시스템 호출은 스레드가 생성 시 공유된 모든 리소스를 선택적으로 "공유 해제"할 수 있도록 하는 기본 요소를 Linux 스레딩 모델에 추가합니다.[…]
unshare()
새로운 프로세스를 생성하지 않고 공유 리소스를 제어하려는 애플리케이션을 위한 향상된 Linux 스레드 유틸리티입니다.unshare()
프로세스/스레드 개념을 가상 머신으로 구현하는 Linux에서 사용할 수 있는 기본 요소 세트를 자연스럽게 보완합니다.
나중에 계속:
unshare()
커널의 프로세스별 네임스페이스 메커니즘을 사용하여 다중 인스턴스화된 디렉터리를 구현하는 데 사용할 수 있습니다. 사용자별 및/또는 보안 컨텍스트 인스턴스 별 등 여러 인스턴스화 디렉터리/tmp
또는/var/tmp
사용자 홈 디렉터리의 각 보안 컨텍스트 인스턴스는 해당 디렉터리를 사용할 때 사용자 프로세스를 격리합니다. 를 사용하면unshare()
PAM 모듈을 통해 사용자가 로그인할 때 개인 네임스페이스를 쉽게 설정할 수 있습니다.
문서에는 "복구 불가능"이라고 명시적으로 나와 있지는 않지만 보안 목적으로 unshare()
한 가지 합법적인 사용이 언급되어 있습니다 .unshare()
이것이 역전될 수 있다면 목적이 무산될 것이라고 생각할 수도 있습니다.