usermod はどのようにして sudo をバイパスできるようにするのでしょうか?

usermod はどのようにして sudo をバイパスできるようにするのでしょうか?

私のチームは最近ショーアンドテルを開催し、私は調査結果を発表しました。ドッカー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はデフォルトでは のメンバーではないためdocker、Dockerバイナリに対して何かを行うための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

サービスのパラメータとして使用するグループを指定できることに注意してくださいdockerman 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 上の Flash Player はオペレーティング システムに多くのセキュリティ上の欠陥をもたらし、箱から出したばかりの頃よりも脆弱になっています。

デスクトップやその他の特別な権限なしでLinuxを実行した場合、私の間違いでなければ、お気に入りのアプリなどをすべて使用した場合よりも安全になります。私の回答が役に立ったかどうかはわかりませんが、役に立ったことを願っています。

関連情報