Docker容器中用戶權限管理


Docker容器的權限管理方式分為了三種情況:

1.默認使用的root權限
不管是以root用戶還是以普通用戶(有啟動docker容器的權限)啟動docker容器,容器進程和容器內的用戶權限都是root!
新建了sleep用戶,以sleep用戶權限啟動容器並在有root權限的磁盤進行權限測試

docker run -v /data/sleep:/sleep  -d --name sleep-1 ubuntu sleep infinity

  在宿主機中/data/sleep路徑新建了leo_zhou文件並在文件寫入“docker”,然后進入sleep-1容器

docker exec -it sleep-1 bash

  依然可以正常操作擁有root權限的文件。

2.限制Docker容器啟動的用戶
新增--user參數,使容器啟動用戶變成指定的sleep用戶,發現並不能操作擁有root權限的文件了。會發現容器中的uid號和實際主機中的uid號一樣,也驗證了docker容器使用宿主機的內核。可以一定程度進行權限管理。

3.使用namespace隔離技術
namespace是一種隔離技術,docker就是使用隔離技術開啟特定的namespace創建出一些特殊的進程,不過使用namespace是有條件的。系統會創建dockremap,通過/etc/subuid和/etc/subuid對應的id值,映射到容器中去;實際情況還是使用的是dockremap普通權限,達到自動隔離的效果。

①開啟Centos內核中關閉的user namespace的功能。
grubby --args="namespace.unpriv_enable=1 user_namespace.enable=1" --update-kernel="$(grubby --default-kernel)"
echo "user.max_user_namespaces=15076" >> /etc/sysctl.conf

  

②修改/etc/docker/daemon.json配置,新增"userns-remap": "default"選項,default默認就是docker自動創建的用戶dockremap,然后重啟docker

  

③Centos需要手動輸入id值映射范圍
最后systemctl restart docker后再次測試效果,發現文件權限已經變成nobody,但docker容器內部依然是以"root"的權限管理,但實際只有普通用戶的權限,從而達到權限隔離的效果

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM