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,因此它沒有 rwx 權限來對 Docker 二進位執行任何操作
  • 因此,解決方案是要么使用sudo給定命令的 root 權限,要么授予群組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 的成員,因此它沒有 rwx 權限來對 Docker 二進位檔案執行任何操作

每個人都可以讀取和執行二進位。

因此,解決方案是使用 sudo 為您提供給定命令的 root 權限,或將 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 都可能像任何其他作業系統一樣感染病毒,這取決於您安裝或不安裝的內容。以 Flash Player 為例,即使在 Windows 上,它也會為作業系統帶來許多安全漏洞,使其比剛開箱時更容易受到攻擊。

如果你在沒有桌面和所有其他花哨特權的情況下運行Linux,如果我沒有弄錯的話,它會比所有我們最喜歡的應用程式更安全,因此我不知道我的答案是否有幫助,但我希望這有幫助

相關內容