TL;DR

TL;DR

Docker 설치에 문제가 있습니다. 몇 가지 보안상의 이유로 네임스페이스가 다른 사용자( userns-remap)로 전환되도록 "daemon.json"을 구성했습니다. 이제 컨테이너(전환된 사용자 컨텍스트( USER containeruser)를 사용하여)를 실행하고 동일한 컨테이너 네트워크에 있는 다른 컨테이너를 ping하려고 하면 다음과 같은 오류가 발생하는 문제가 있습니다.

$ ping 172.16.0.3
PING 172.16.0.3 (172.16.0.3): 56 data bytes
ping: permission denied (are you root?)

나는 이미 AppArmor를 사용하여 더 많은 기능을 할당하는 등 여러 가지 작업을 시도했습니다. 그러나 그 문제를 해결하는 데 아무런 도움이 되지 않았습니다.

실행 중인 이미지는 아무런 수정 없이 알파인 리눅스입니다.

내 문제에 대한 해결책이 있나요?

답변1

TL;DR

apk add iputils

설명

알파인을 기반으로 한비지박스이는 Linux의 일반적인 명령을 단일 바이너리로 구현합니다. 기본 알파인 이미지의 디렉터리를 보면 해당 명령(다른 명령과 마찬가지로)이 다음에 대한 심볼릭 링크임을 /bin알 수 있습니다.ping/bin/busybox

ping일반 사용자로 실행하려면수드 비트세트. 기호 링크(예: chmod u+s /bin/ping)에 suid 비트를 설정하고 싶은 유혹을 받을 수 있습니다. 그러나 실제로는 busybox 바이너리에 설정되므로 보안 위반이 될 수 있는 심볼릭 링크로 등록된 다른 모든 명령에 설정됩니다.

다행히도 iputils대체 버전이 포함된 alpine 패키지 가 있습니다 ping. 이를 설치하면 심볼릭 링크가 모든 사람이 실행하는 데 필요한 권한을 보유한 일반 바이너리로 대체됩니다. RUNDockerfile의 한 줄에 위의 필수 명령을 추가하기만 하면 됩니다 .

답변2

OP 질문에 대한 답변은 아니지만 제목에서 오류를 검색하는 사람들에게 도움이 될 수 있습니다.

다음 명령을 실행하여 Docker 컨테이너의 루트 사용자로 쉘을 입력할 수 있습니다.

docker exec -u 0 -it <container-name> <shell>

이미지에 있는 셸에 따라 , , , 등 shell이 될 수 있습니다 . 시행착오 방법을 통해 찾을 수 있습니다.zshbashshash

이는 수정할 dockerfile이 없는 경우(예: 레지스트리에서 직접 docker 이미지를 가져올 때) 특히 유용합니다.

관련 정보