Docker 資源隔離技術涉及linux八個命名空間的使用
同時docker還提供了一些選項讓我們能夠對mem, cpu, devices 進行分配。
怎麼判斷一個鏡像的默認用戶呢?
- docker run --rm --entrypoint “” busybox:latest whoami
- docker run --rm --entrypoint “” busybox:latest id
whoani 和 id 都是linux自帶的命令, 所以我們放心使用。
爲什麼要確定鏡像的默認user, 請看下圖?
如果一個鏡像的默認用戶存在過高權限,會存在黑客攻擊的威脅,那麼怎麼避免折中情況呢, 當我們創建運行容器時可以指定容器的用戶。
-
查看鏡像中所支持的用戶
docker run --rm busybox:latest awk -F: ‘$0=$1’ /etc/passwd
-
設置容器運行時用戶
docker run -u nobody --rm busybox:latest id
有些人可能會問,爲什麼使用默認的root 用戶可能會存在安全隱患,那是因爲Docker 和 宿主機共用了user命名空間。下面分享一個例子來證明:
- echo “e=mc^2” > garbage
- chmod 600 garbage
- sudo chown root:root garbage
- docker run --rm -u nobody -v “$(pwd)”/garbage:/test/garbage ubunut:latest cat /test/garbage
- docker run --rm -v “$(pwd)”/garbage:/test/garbage ubunut:latest cat /test/garbage
從上述例子中我們可以看到,使用nobody 用戶訪問宿主機中的測試文件提示權限不足,但使用root用戶則可以訪問。
值得注意的是無論是容器還是宿主機的root 用戶user id 都爲 0.
爲了更好的控制用戶和資源掛載,這裏推薦使用user id: user group的方式來設置容器的用戶訪問, 例子如下:
docker run -u 2000:2000 ubuntu:latest echo “hello world”