Docker는 루트가 블록 장치를 읽지 못하도록 어떻게 방지합니까?

Docker는 루트가 블록 장치를 읽지 못하도록 어떻게 방지합니까?

Linux 컨테이너 보안을 이해하려고 합니다. 루트 셸을 실행하는 도커 컨테이너가 있습니다. 컨테이너에는 에 표시되는 블록 장치가 없지만 /dev를 사용하여 생성할 수 있습니다 mknod. 그런 다음 읽기 블록 장치(내 홈 파티션에 해당)를 사용하려고 file -s /dev/vda1하면 vda1: no read permission.

블록 장치를 읽지 못하게 하는 커널 수준 보안 시스템은 무엇입니까? 능력인 줄 알았는데 아니더군요.

답변1

cgroup 장치 컨트롤러는 원시 장치에 대한 액세스를 제어합니다. 유형(문자 또는 블록), 주요 및 보조 장치 번호를 기반으로 읽기, 쓰기 및 생성 권한을 지정할 수 있습니다. Docker는 기본적으로 대부분의 장치에 대한 읽기 및 쓰기를 허용하지 않습니다.

cgroup-v2에서는 장치 컨트롤러가 제거되었으며 eBPF 프로그램을 cgroup에 연결하여 장치 액세스를 확인할 수 있습니다. 얼마나 읽기/검색 가능한지 궁금합니다.

관련 정보