프로세스를 루트로 실행하는 것과 모든 Linux 기능을 사용하는 것의 차이점

프로세스를 루트로 실행하는 것과 모든 Linux 기능을 사용하는 것의 차이점

privileged:true사양에 설정할 때 kubernetes 포드에서 완벽하게 실행되는 도커 컨테이너가 있습니다. 그러나 모든 Linux 기능을 제공하여 동일한 Docker 컨테이너를 실행하면 실패합니다. 두 경우 모두 프로세스의 기능 비트마스크는 다음과 같이 동일합니다.

SigPnd: 0000000000000000
ShdPnd: 0000000000000000
SigBlk: 0000000000010000
SigIgn: 0000000000000004
SigCgt: 0000000000014002
CapInh: 0000003fffffffff
CapPrm: 0000003fffffffff
CapEff: 0000003fffffffff
CapBnd: 0000003fffffffff
CapAmb: 0000000000000000

그렇다면 둘 사이에 차이점이 있나요?프로세스를 루트로 실행 그리고 모든 기능을 사용하여 프로세스 실행.

고쳐 쓰다: @ctrl-alt-delor가 지적했듯이 설정은 privilege:true컨테이너가 호스트의 모든 장치에 액세스할 수 있을 뿐만 아니라 호스트의 컨테이너 외부에서 실행되는 프로세스와 동일한 호스트 액세스 권한을 갖게 됨을 의미합니다.

답변1

나는 당신이 무슨 일이 일어나고 있는지 놓치고 있다고 생각합니다.

권한은 루트가 아닙니다.. 기본적으로 컨테이너는 루트로 실행되지만 기능이 거의 없고 권한도 없습니다.

귀하의 질문에 대한 답변(제목): 아주 약간, 사용자 이름만 있으므로 파일은 사용자로 생성됩니다. 그러나 사용자는 자신의 사용자 이름을 변경할 권리가 있습니다. (불필요하게 루트 권한을 확인하는 일부 버그가 있는 소프트웨어는 제외)

권한이 무엇인지 알아보려면 매뉴얼을 확인해야 합니다. (모르겠어요. 권한과 동일하지 않으며 root기능과 동일하지 않다는 것도 압니다.)

기본적으로 Docker 컨테이너는 "권한이 없습니다". 예를 들어 Docker 데몬은 Docker 컨테이너 내에서 실행될 수 없습니다. 이는 기본적으로 컨테이너는 어떤 장치에도 액세스할 수 없지만 "권한이 있는" 컨테이너는 모든 장치에 액세스할 수 있기 때문입니다(cgroups 장치에 대한 설명서 참조).

운영자가 docker run --privileged를 실행하면 Docker는 호스트의 모든 장치에 대한 액세스를 활성화하고 AppArmor 또는 SELinux에서 일부 구성을 설정하여 컨테이너가 호스트의 컨테이너 외부에서 실행되는 프로세스와 거의 동일한 호스트 액세스를 허용하도록 합니다. --privileged를 사용한 실행에 대한 자세한 내용은 Docker 블로그를 참조하세요.

특정 장치에 대한 액세스를 제한하려면 --device 플래그를 사용할 수 있습니다. 컨테이너 내에서 액세스할 수 있는 하나 이상의 장치를 지정할 수 있습니다.

호스트의 개별 파일/디렉토리를 매핑할 수도 있습니다 -v.

관련 정보