usermod를 사용하면 sudo를 어떻게 우회할 수 있나요?

usermod를 사용하면 sudo를 어떻게 우회할 수 있나요?

우리 팀은 최근 쇼 앤 텔(Show-n-Tell)을 가졌고 나는 결과를 발표했습니다.도커. 다음을 사용하여 Docker를 설치하는 방법을 설명했습니다.

curl -sSL https://get.docker.com/ | sh

그런 다음 이 설치에서는 다음을 실행하지 않는 한 모든 Docker 명령 앞에 sudo(예: ) 를 붙여야 한다고 설명했습니다 .sudo docker info

sudo usermod -aG docker myUser

이 작업을 수행하면 다음과 같이 실행할 수 있습니다 docker info.

또 다른 주니어 엔지니어가 나에게 이 usermod명령이 어떻게 작동하는지 물었고 나는 Linux 사용자/그룹을 이해하면서 설명했습니다.

  • 모든 Docker 바이너리는 다음과 같은 그룹에 속하는 시스템에 설치됩니다.docker
  • myUser은(는) 기본적으로 의 멤버가 아니므 로 dockerDocker 바이너리로 어떤 작업도 수행할 수 있는 rwx 권한이 없습니다.
  • sudo따라서 해결책은 주어진 명령에 대한 루트 권한을 제공하는 것을 사용 하거나 그룹 myUser에 멤버십을 부여하는 것입니다.docker

내가 이렇게 설명하자 선임 엔지니어는 갑자기 내가 틀렸다고 말했습니다.그것보다 조금 더 복잡합니다."

그래서 저는 묻습니다. 제가 여기서 Linux의 보안 모델을 오해하고 있는 걸까요? 수석 엔지니어의 말이 맞는 걸까요? 그렇다면 내가 놓치고 있는 것은 무엇입니까(그리고 도대체 "너무 복잡"한 것은 무엇입니까)? 아니면 내 말이 맞나요? 이 경우 누군가가 이를 증명할 수 있는 확실한 문서를 알려줄 수 있나요?

답변1

모든 Docker 바이너리는 docker라는 그룹에 속하는 시스템에 설치됩니다.

잘못된. 바이너리 docker의 소유자는 다음과 같습니다 root:root.

$ stat `which docker`
  File: ‘/usr/bin/docker’
  Size: 16296881    Blocks: 31832      IO Block: 4096   regular file
Device: fc00h/64512d    Inode: 143202      Links: 1
Access: (0755/-rwxr-xr-x)  Uid: (    0/    root)   Gid: (    0/    root)

myUser는 기본적으로 docker의 구성원이 아니기 때문에 Docker 바이너리로 어떤 작업도 수행할 수 있는 rwx 권한이 없습니다.

바이너리는 누구나 읽고 실행할 수 있습니다.

따라서 해결책은 주어진 명령에 대한 루트 권한을 제공하는 sudo를 사용하거나 myUser 멤버십을 docker 그룹에 부여하는 것입니다.

Docker 서비스는 소켓을 사용하여 명령을 수신합니다. 소켓은 일반적으로 다음과 같습니다.

  • 에 위치한/var/run/docker.sock
  • 에게 소유 된root:docker
  • 그룹 쓰기는 가능하지만 다른 사람은 읽거나 쓸 수 없습니다.

예를 들어:

$ stat /var/run/docker.sock
  File: ‘/var/run/docker.sock’
  Size: 0           Blocks: 0          IO Block: 4096   socket
Device: 10h/16d Inode: 13619       Links: 1
Access: (0660/srw-rw----)  Uid: (    0/    root)   Gid: (  997/  docker)

저것이것이 그룹 의 구성원이 되면 명령을 docker실행할 수 있는 이유입니다 docker.

서비스 에 대한 매개변수로 사용해야 하는 그룹을 지정할 수 있습니다 docker. 에서 man docker:

   -G, --group=""
 Group  to assign the unix socket specified by -H when running in dae‐
   mon mode.
 use '' (the empty string) to disable setting of a group.  Default  is
   docker.

그래서 그렇지 않습니다가지다docker하지만 기본적으로는 그렇습니다 docker.

답변2

Linux가 얼마나 안전한지와 취약점에 대해 이야기하고 있다면 그렇다고 말할 수 있습니다. 귀하가 요구하는 내용을 충분히 명확하게 이해하고 있다면 대답은 '예'입니다. 제가 아는 바에 따르면 Linux는 배포 여부에 관계없이 설치 여부에 따라 다른 운영 체제와 마찬가지로 바이러스에 감염될 수 있습니다. Windows에서도 플래시 플레이어를 예로 들자면 운영 체제에 많은 보안 결함이 있어 처음 개봉했을 때보다 더 취약해졌습니다.

데스크탑 없이 Linux를 실행하고 다른 모든 고급 권한을 사용했다면 제가 착각하지 않았다면 우리가 좋아하는 모든 앱보다 더 안전할 것입니다. 제 답변이 도움이 되었는지는 모르겠지만 도움이 되었기를 바랍니다.

관련 정보