這篇文章主要介紹“docker容器非root用戶提權的問題怎么解決”,在日常操作中,相信很多人在docker容器非root用戶提權的問題怎么解決問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”docker容器非root用戶提權的問題怎么解決”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!
為了提升安全性,我們考慮一種方案:使用非root用戶啟動docker容器。為此我們做一個實驗,首先我們創建一個普通用戶zimug,執行命令 useradd zimug;。并且將這個用戶加入docker用戶組,因為docker用戶組的用戶才能啟動docker容器。
#zimug加入docker用戶組 usermod -G docker zimug; #在zimug用戶下啟動容器 docker run -d --name nginx-zimug -p 80:80 nginx;
以上的操作證明使用非root用戶啟動docker容器是可行的,但是安全性有沒有得到提升,我們還需要驗證。
回到docker服務所在的宿主機服務器上,使用 root 賬號將"zimug test"這樣一個字符串寫入測試文件 test.txt
mkdir -p /root/test; echo "zimug test" > /root/test/test.txt;
然后使用su命令切換到zimug這個用戶,使用cat命令查看文件提示權限不夠無法查看文件,到此一切正常。
[root]# su - zimug; [zimug]$ cat /root/test/test.txt; cat: /root/test/test.txt: 權限不夠
然后我們在zimug用戶下啟動一個容器nginx-zimug1,需要記住非常重要的一點是:這個容器我們是在非root用戶zimug下啟動的。
[zimug]$ docker run -d --name nginx-zimug1 \ -p 81:80 \ -v /root/test/test.txt:/root/test/test.txt nginx;
然后我們進入容器內部修改/root/test/test.txt這個文件,向文件內echo寫入一個字符串:“zimug test update file in container”,表示這個文件我們在容器內部進行修改。
# 進入容器內部 [zimug]$ docker exec -it nginx-zimug1 /bin/bash # 進入容器后使用下面的命令修改文件,然后exit退出 echo "zimug test update file in container" > /root/test/test.txt;
回到宿主機上使用 root 賬號確認 /root/test/test.txt 文件內容。發生了我們不愿見到的結果:普通用戶zimug啟動一個容器,可以隨意映射root用戶文件,并且在容器內修改這個文件,root用戶的文件內容也隨之更改。
# cat /root/test/test.txt zimug test update file in container
之所以出現這個問題,有兩個原因:一是docker容器本質是宿主機服務器上的一個進程,不做特殊處理的情況下,容器里的root用戶和宿主機上的root用戶實際上是同一個用戶;二是docker存在一個守護進程,即使用systemctl start docker啟動的那個服務進程。因為我們安裝docker是root用戶安裝的,該守護進程也是用root用戶啟動的,即使容器是非root用戶運行的也存在較大的安全問題,是docker安全性問題的重要風險點。
解決這個問題有兩個通用方法:就是容器用戶與宿主機用戶的id段映射;二是使用非root用戶搭建docker并啟動守護進程。
到此,關于“docker容器非root用戶提權的問題怎么解決”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。