成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

使用 root 用戶執(zhí)行Docker、K8s命令?No!!!

系統(tǒng) Linux
隨意使用 root 和特權(quán)可能會(huì)帶來(lái)不必要的風(fēng)險(xiǎn)。本文展示了特權(quán)與 root 運(yùn)行方式的不同之處以及特權(quán)的實(shí)際意義。

[[411232]]

隨意使用 root 和特權(quán)可能會(huì)帶來(lái)不必要的風(fēng)險(xiǎn)。本文展示了特權(quán)與 root 運(yùn)行方式的不同之處以及特權(quán)的實(shí)際意義。

很多熟悉 Unix 系統(tǒng)的人(例如 macOS、Linux)都習(xí)慣于通過(guò)使用 sudo 隨意提升我們的特權(quán)給 root 用戶。在調(diào)試開(kāi)發(fā)工具或嘗試編輯受保護(hù)目錄中的文件時(shí),經(jīng)常會(huì)發(fā)生這種情況,許多人在第一次嘗試之后,執(zhí)行命令不成功,都會(huì)默認(rèn)使用 sudo。

了解 Docker 安全性的基礎(chǔ)是了解實(shí)際的容器

Docker 提供了一個(gè)類似 --privileged flag,實(shí)際上這與我們隨意使用的 sudo 有很大不同,它可能會(huì)使應(yīng)用程序面臨不必要的風(fēng)險(xiǎn)。本文將展示這與 root 運(yùn)行方式有何不同(以及如何避免以 root 用戶身份運(yùn)行),并介紹特權(quán)(privileged)的實(shí)際含義。

作為 root 運(yùn)行

Docker 允許其在主機(jī)操作系統(tǒng)上隔離進(jìn)程、功能和文件系統(tǒng),并且實(shí)際上,大多數(shù)容器默認(rèn)以 root 身份運(yùn)行。為了示例,本文將使用 DockerHub 上的三個(gè)最受歡迎鏡像。

Postgres: 

  1. $ docker run -it postgres   
  2. #whoami   
  3. root   
  4. #id -u   

Couchbase: 

  1. $ docker run -it couchbase sh   
  2. #whoami   
  3. root   
  4. #id -u   

Alpine: 

  1. $ docker run -it alpine sh   
  2. #whoami   
  3. root   
  4. #id -u   

我們可以看到,默認(rèn)情況下,大多數(shù)鏡像都以 root 用戶身份運(yùn)行。通常這可以簡(jiǎn)化調(diào)試過(guò)程,尤其是在我們要 exec 到容器時(shí)。盡管 root 用戶的 Linux 功能非常有限,但最好還是避免以 root 用戶身份運(yùn)行。

避免以 root 身份運(yùn)行

盡管在容器內(nèi)部以 root 身份運(yùn)行是非常正常的事,但是如果我們想要強(qiáng)化容器,仍然需要避免這種情況。首先,違反了最小特權(quán)原則,其次,更嚴(yán)格地說(shuō),容器將成為運(yùn)行 Docker 命令的同一用戶命名空間的一部分,并且如果容器能夠轉(zhuǎn)義,它將可以訪問(wèn) volume、socket 等資源。

有兩種避免以 root 用戶身份運(yùn)行的方法。

通過(guò)調(diào)整 Dockerfile 以使用特定用戶: 

  1. // Dockerfile   
  2. FROM microsoft/windowsservercore  
  3. # Create Windows user in the container  
  4. RUN net user /add patrick  
  5. # Set it for subsequent commands 
  6.  USER patrick 

在運(yùn)行時(shí)重寫 User ID: 

  1. $ docker run -it --user 4000 postgres sh  
  2. # whoami  
  3. whoami: cannot find name for user ID 4000  
  4. # id -u  
  5. 4000 

關(guān)于特權(quán)

--privileged flag 將我們之前看到的用戶 ID 直接映射到主機(jī)的用戶 ID,并使其不受限制地訪問(wèn)其選擇的任何系統(tǒng)調(diào)用。即使 root 在容器內(nèi)部,在正常操作中,Docker 也會(huì)限制容器的 Linux 功能,例如限制 CAP_AUDIT_WRITE,它允許覆蓋內(nèi)核的審計(jì)日志,這是容器化工作負(fù)載不太需要的功能。

實(shí)際上,特權(quán)應(yīng)該只在我們真正需要的特定設(shè)置中使用,它可以使容器訪問(wèn)主機(jī)(作為 root)幾乎可以執(zhí)行所有操作。從本質(zhì)上講,這是一個(gè)通行證,可以逃避容器包含的文件系統(tǒng)、進(jìn)程、套接字和其他包含的項(xiàng)目。它有特定的用例,例如 Docker-in-Docker,其他 CI/CD 工具要求(從 Docker 容器內(nèi)部需要 Docker 守護(hù)程序)以及需要極端網(wǎng)絡(luò)的地方。

下面看一個(gè)使用 Ubuntu 鏡像的示例(在 VM 內(nèi)測(cè)試,這樣就不會(huì)破壞任何東西):

沒(méi)有特權(quán): 

  1. # whoami  
  2. root # Notice here, we are still root!  
  3. # id -u  
  4.  
  5. # hostname  
  6. 382f1c400bd  
  7. # sysctl kernel.hostname=Attacker  
  8. sysctl: setting key "kernel.hostname": Read-only file system  # Yet we can't do this 

有特權(quán): 

  1. $ docker run -it --privileged ubuntu sh  
  2. # whoami  
  3. root. # Root again  
  4. # id -u  
  5.  
  6. # hostname  
  7. 86c62e9bba5e  
  8. # sysctl kernel.hostname=Attacker  
  9. kernel.hostname = Attacker # Except now we are privileged  
  10. # hostname  
  11. Attacker  

Kubernetes 通過(guò)安全上下文提供相同的功能: 

  1. apiVersion: v1  
  2. kind: Pod  
  3. metadata:  
  4.   name: nginx  
  5. spec:  
  6.   containers:  
  7.   - name: nginx  
  8.     image: nginx  
  9.     securityContext:  
  10.       privileged: true 

此外,Kubernetes 有一個(gè)稱為 PodSecurityPolicy 的強(qiáng)制機(jī)制,它是一個(gè)準(zhǔn)入控制器(Kubernetes 在允許容器進(jìn)入集群之前會(huì)對(duì)其進(jìn)行檢查),這里強(qiáng)烈建議不允許使用特權(quán) Pod: 

  1. apiVersion: policy/v1beta1  
  2. kind: PodSecurityPolicy  
  3. metadata: 
  4.   name: example  
  5. spec: 
  6.   privileged: false  # Don't allow privileged pods! 

總結(jié)

到此為止,我們了解了一些有關(guān) root 和 --privileged flag 的信息,以及它們與“主機(jī)”操作系統(tǒng)的關(guān)系。無(wú)論我們是否想限制容器的安全性或調(diào)試問(wèn)題,都需要確保應(yīng)用程序安全。 

 

責(zé)任編輯:龐桂玉 來(lái)源: 良許Linux
相關(guān)推薦

2022-02-07 08:42:28

k8sdocker命令

2022-04-22 13:32:01

K8s容器引擎架構(gòu)

2020-12-15 18:56:26

MirantisDockersKubernetes

2020-03-20 10:13:15

Linux 系統(tǒng) 數(shù)據(jù)

2021-02-03 14:04:52

k8spermissionm管理工具

2023-11-06 07:16:22

WasmK8s模塊

2022-06-14 07:56:15

Kubernetes存儲(chǔ)架構(gòu)K8S

2020-11-10 07:05:41

DockerK8S云計(jì)算

2020-07-30 09:10:21

DockerK8s容器

2023-09-06 08:12:04

k8s云原生

2022-09-25 21:34:55

命令操作

2021-08-05 07:28:26

K8sNFS ProvisiSubdir

2024-11-27 16:37:57

2020-05-12 10:20:39

K8s kubernetes中間件

2022-09-05 08:26:29

Kubernetes標(biāo)簽

2023-05-25 21:38:30

2023-08-03 08:36:30

Service服務(wù)架構(gòu)

2023-08-04 08:19:02

2019-09-25 07:17:42

KubernetesIstio測(cè)試

2023-09-15 08:00:20

Ingress網(wǎng)關(guān)Istio
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 国产精品视频一二三区 | 久久久久久久久久久久久久av | 天天干夜夜操 | 日韩福利在线观看 | 81精品国产乱码久久久久久 | 久久久成人精品 | 国产999精品久久久久久 | 国产精品区二区三区日本 | 欧美一级欧美三级在线观看 | 国产精品久久久久久av公交车 | 国产综合久久 | 国产一区二区在线播放 | 成人高清在线视频 | 欧美电影免费观看高清 | 日本精品一区二区 | 日韩欧美在线视频观看 | 国产亚洲精品成人av久久ww | 视频三区| 国产一区二区在线看 | 天天爱天天操 | 成人av免费播放 | 日韩精品视频一区二区三区 | 日韩欧美精品 | 成人a视频片观看免费 | 久久久精| 91精品久久久久久久久 | 欧美自拍视频 | 成年人在线观看视频 | 网站黄色av | 伊人在线 | 亚洲91精品| 综合久久网 | 亚洲免费在线观看视频 | 国产成人福利在线观看 | 在线播放国产一区二区三区 | 九一视频在线观看 | 国产激情一区二区三区 | 亚洲精品免费在线 | 九九热精品在线 | 亚洲成人一区 | 精品欧美一区二区三区免费观看 |