作業11-2 : 在宿主機中 docker.sock 的 owner 是 root,而做完 user remapping 後進入容器的權限也是 root,請測試為何該機制可以防禦住 docker.scok 掛載的攻擊並做解釋。
解答 : 其實這題有點誤導的意味在裡面,我們目前確定即便使用 user remapping 進入容器的身分為 root,但可沒說過 docker.sock 掛入之後擁有者依然為 root。這也算是一個機會教育,當在面對問題時,確認一下一些理所當然的部分也是很重要的,畢竟有時候背後的機制跟我們想像的完全不一樣。
docker run -it --rm -v /var/run/docker.sock:/var/run/docker.sock --name my-ubuntu aeifkz/my-ubuntu:v1.0 bash ;
# 開個新的 terminal 複製檔案
docker cp $(which docker) my-ubuntu:/ ;
# 回到容器裡面執行,應該會失敗才對
/docker ps ;
# 發現熟悉的 nobody 跟 nogroup 又回來了
ls -al /var/run/docker.sock ;
雖然 user remapping 的安全機制擁有不錯的防禦能力,但也因為當外部的 uid 無法 mapping 時候會出現 nobody、nogroup,也因此在掛載宿主機目錄時要注意一下權限的部分。
補充 : 這個例子的 user remapping 的示意圖如下所示。