
我的團隊最近進行了一次展示和講述,我展示了我的發現碼頭工人。我解釋瞭如何安裝 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,如果我沒有弄錯的話,它會比所有我們最喜歡的應用程式更安全,因此我不知道我的答案是否有幫助,但我希望這有幫助