docker容器非root用戶提權(quán)的問題解決
本系列之前的文章中使用root用戶安裝docker,并在root用戶下啟動(dòng)docker守護(hù)進(jìn)程,容器也是在root用戶下啟動(dòng)運(yùn)行的。那么問題就出現(xiàn)了:我們的容器服務(wù)進(jìn)程都是root用戶權(quán)限,使用數(shù)據(jù)卷的方式想掛載哪個(gè)目錄就掛載那個(gè)目錄;想修改掛載目錄下的哪個(gè)文件,就修改哪個(gè)文件。 那么我們本文帶大家使用非root用戶來啟動(dòng)docker容器,是否就安全了呢? 我們先不說答案,讓我們一起來通過實(shí)驗(yàn),來解答我們的疑問。
一、使用非root用戶啟動(dòng)docker容器
為了提升安全性,我們考慮一種方案:使用非root用戶啟動(dòng)docker容器。為此我們做一個(gè)實(shí)驗(yàn),首先我們創(chuàng)建一個(gè)普通用戶zimug,執(zhí)行命令 useradd zimug;。并且將這個(gè)用戶加入docker用戶組,因?yàn)閐ocker用戶組的用戶才能啟動(dòng)docker容器。
#zimug加入docker用戶組 usermod -G docker zimug; #在zimug用戶下啟動(dòng)容器 docker run -d --name nginx-zimug -p 80:80 nginx;
以上的操作證明使用非root用戶啟動(dòng)docker容器是可行的,但是安全性有沒有得到提升,我們還需要驗(yàn)證。
二、驗(yàn)證非root用戶啟動(dòng)容器的安全性
回到docker服務(wù)所在的宿主機(jī)服務(wù)器上,使用 root 賬號(hào)將"zimug test"這樣一個(gè)字符串寫入測試文件 test.txt
mkdir -p /root/test; echo "zimug test" > /root/test/test.txt;
然后使用su命令切換到zimug這個(gè)用戶,使用cat命令查看文件提示權(quán)限不夠無法查看文件,到此一切正常。
[root]# su - zimug; [zimug]$ cat /root/test/test.txt; cat: /root/test/test.txt: 權(quán)限不夠
然后我們?cè)趜imug用戶下啟動(dòng)一個(gè)容器nginx-zimug1,需要記住非常重要的一點(diǎn)是:這個(gè)容器我們是在非root用戶zimug下啟動(dòng)的。
[zimug]$ docker run -d --name nginx-zimug1 \ -p 81:80 \ -v /root/test/test.txt:/root/test/test.txt nginx;
然后我們進(jìn)入容器內(nèi)部修改/root/test/test.txt這個(gè)文件,向文件內(nèi)echo寫入一個(gè)字符串:“zimug test update file in container”,表示這個(gè)文件我們?cè)谌萜鲀?nèi)部進(jìn)行修改。
# 進(jìn)入容器內(nèi)部 [zimug]$ docker exec -it nginx-zimug1 /bin/bash # 進(jìn)入容器后使用下面的命令修改文件,然后exit退出 echo "zimug test update file in container" > /root/test/test.txt;
回到宿主機(jī)上使用 root 賬號(hào)確認(rèn) /root/test/test.txt 文件內(nèi)容。發(fā)生了我們不愿見到的結(jié)果:普通用戶zimug啟動(dòng)一個(gè)容器,可以隨意映射root用戶文件,并且在容器內(nèi)修改這個(gè)文件,root用戶的文件內(nèi)容也隨之更改。
# cat /root/test/test.txt zimug test update file in container
之所以出現(xiàn)這個(gè)問題,有兩個(gè)原因:一是docker容器本質(zhì)是宿主機(jī)服務(wù)器上的一個(gè)進(jìn)程,不做特殊處理的情況下,容器里的root用戶和宿主機(jī)上的root用戶實(shí)際上是同一個(gè)用戶;二是docker存在一個(gè)守護(hù)進(jìn)程,即使用systemctl start docker啟動(dòng)的那個(gè)服務(wù)進(jìn)程。因?yàn)槲覀儼惭bdocker是root用戶安裝的,該守護(hù)進(jìn)程也是用root用戶啟動(dòng)的,即使容器是非root用戶運(yùn)行的也存在較大的安全問題,是docker安全性問題的重要風(fēng)險(xiǎn)點(diǎn)。
解決這個(gè)問題有兩個(gè)通用方法:就是容器用戶與宿主機(jī)用戶的id段映射;二是使用非root用戶搭建docker并啟動(dòng)守護(hù)進(jìn)程。
到此這篇關(guān)于docker容器非root用戶提權(quán)的問題解決的文章就介紹到這了,更多相關(guān)docker 非root用戶提權(quán)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- Docker創(chuàng)建MongoDB容器并添加root密碼驗(yàn)證與更多用戶詳細(xì)步驟
- docker mysql修改root賬號(hào)密碼并賦予權(quán)限
- docker啟動(dòng)mysql及-e MYSQL_ROOT_PASSWORD=my-secret-pw問題解決
- 使用非root用戶安裝及啟動(dòng)docker的問題(rootless模式運(yùn)行)
- docker 免root權(quán)限登陸的解決方案
- 解決docker容器中出現(xiàn)Access denied for user 'root'@'172.17.0.2'(using password: YES)問題
相關(guān)文章
基于Docker的MySQL主從復(fù)制環(huán)境搭建的實(shí)現(xiàn)步驟
這篇文章主要介紹了基于Docker的MySQL主從復(fù)制環(huán)境搭建的實(shí)現(xiàn)步驟,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-01-01Docker 容器之間的互相通信實(shí)現(xiàn)示例
本文主要介紹了Docker 容器之間的互相通信實(shí)現(xiàn)示例,通過創(chuàng)建自定義網(wǎng)絡(luò),你可以輕松地在 Docker 容器之間建立通信,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2024-01-01Docker中運(yùn)行PostgreSQL并推薦幾款連接工具
PostgreSQL支持大部分的SQL標(biāo)準(zhǔn)并且提供了很多其他現(xiàn)代特性,如復(fù)雜查詢、外鍵、觸發(fā)器、視圖、事務(wù)完整性、多版本并發(fā)控制等,今天給大家介紹Docker中運(yùn)行PostgreSQL并推薦幾款連接工具,需要的朋友參考下吧2021-06-06