日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Docker安全

發(fā)布時(shí)間:2024/9/3 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Docker安全 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

一、理解Docker安全

Docker容器的安全性,很大程度上依賴于Linux系統(tǒng)自身,評(píng)估Docker的安全性時(shí),主要考慮以下幾個(gè)方面:

  • Linux內(nèi)核的命名空間機(jī)制提供的容器隔離安全
  • Linux控制組機(jī)制對(duì)容器資源的控制能力安全。
  • Linux內(nèi)核的能力機(jī)制所帶來的操作權(quán)限安全
  • Docker程序(特別是服務(wù)端)本身的抗攻擊性。
  • 其他安全增強(qiáng)機(jī)制對(duì)容器安全性的影響。

1.命名空間隔離的安全

  • 當(dāng)docker run啟動(dòng)一個(gè)容器時(shí),Docker將在后臺(tái)為容器創(chuàng)建一個(gè)獨(dú)立的命名空間。命名空間提供了最基礎(chǔ)也最直接的隔離。
  • 與虛擬機(jī)方式相比,通過Linux namespace來實(shí)現(xiàn)的隔離不是那么徹底。
  • 容器只是運(yùn)行在宿主機(jī)上的一種特殊的進(jìn)程,那么多個(gè)容器之間使用的就還是同一個(gè)宿主機(jī)的操作系統(tǒng)內(nèi)核。
  • 在 Linux 內(nèi)核中,有很多資源和對(duì)象是不能被 Namespace 化的,比如:時(shí)間。
[root@server1 ~]# docker run -d --name demo nginx [root@server1 ~]# docker inspect demo | grep Pid

2.控制組資源控制的安全

  • 當(dāng)docker run啟動(dòng)一個(gè)容器時(shí),Docker將在后臺(tái)為容器創(chuàng)建一個(gè)獨(dú)立的控制組策略集合。
  • Linux Cgroups提供了很多有用的特性,確保各容器可以公平地分享主機(jī)的內(nèi)存、CPU、磁盤IO等資源。
  • 確保當(dāng)發(fā)生在容器內(nèi)的資源壓力不會(huì)影響到本地主機(jī)系統(tǒng)和其他容器,它在防止拒絕服務(wù)攻擊(DDoS)方面必不可少。

3.內(nèi)核能力機(jī)制

  • 能力機(jī)制(Capability)是Linux內(nèi)核一個(gè)強(qiáng)大的特性,可以提供細(xì)粒度的權(quán)限訪問控制。
  • 大部分情況下,容器并不需要“真正的”root權(quán)限,容器只需要少數(shù)的能力即可。
  • 默認(rèn)情況下,Docker采用“白名單”機(jī)制,禁用“必需功能”之外的其他權(quán)限。

4.Docker服務(wù)端防護(hù)

  • 使用Docker容器的核心是Docker服務(wù)端,確保只有可信的用戶才能訪問到Docker服務(wù)。
  • 將容器的root用戶映射到本地主機(jī)上的非root用戶,減輕容器和主機(jī)之間因權(quán)限提升而引起的安全問題。
  • 允許Docker 服務(wù)端在非root權(quán)限下運(yùn)行,利用安全可靠的子進(jìn)程來代理執(zhí)行需要特權(quán)權(quán)限的操作。這些子進(jìn)程只允許在特定范圍內(nèi)進(jìn)行操作。

5.其他安全特性

  • 在內(nèi)核中啟用GRSEC和PAX,這將增加更多的編譯和運(yùn)行時(shí)的安全檢查;并且通過地址隨機(jī)化機(jī)制來避免惡意探測(cè)等。啟用該特性不需要Docker進(jìn)行任何配置。
  • 使用一些有增強(qiáng)安全特性的容器模板。
  • 用戶可以自定義更加嚴(yán)格的訪問控制機(jī)制來定制安全策略。
  • 在文件系統(tǒng)掛載到容器內(nèi)部時(shí),可以通過配置只讀模式來避免容器內(nèi)的應(yīng)用通過文件系統(tǒng)破壞外部環(huán)境,特別是一些系統(tǒng)運(yùn)行狀態(tài)相關(guān)的目錄。

二、容器資源控制

Linux Cgroups 的全稱是 Linux Control Group。
是限制一個(gè)進(jìn)程組能夠使用的資源上限,包括 CPU、內(nèi)存、磁盤、網(wǎng)絡(luò)帶寬等等。
對(duì)進(jìn)程進(jìn)行優(yōu)先級(jí)設(shè)置、審計(jì),以及將進(jìn)程掛起和恢復(fù)等操作。
Linux Cgroups 給用戶暴露出來的操作接口是文件系統(tǒng)。
它以文件和目錄的方式組織在操作系統(tǒng)的 /sys/fs/cgroup 路徑下。
執(zhí)行此命令查看:mount -t cgroup

在 /sys/fs/cgroup 下面有很多諸如 cpuset、cpu、 memory 這樣的子目錄,也叫子系統(tǒng)。
在每個(gè)子系統(tǒng)下面,為每個(gè)容器創(chuàng)建一個(gè)控制組(即創(chuàng)建一個(gè)新目錄)。
控制組下面的資源文件里填上什么值,就靠用戶執(zhí)行 docker run 時(shí)的參數(shù)指定。

1.CPU限額

cpu_period 和 cpu_quota 這兩個(gè)參數(shù)需要組合使用,用來限制進(jìn)程在長度為 cpu_period 的一段時(shí)間內(nèi),只能被分配到總量為 cpu_quota 的 CPU 時(shí)間,以下設(shè)置表示20%的cpu時(shí)間。

[root@server2 ~]# docker run -it --rm --cpu-quota 20000 ubuntu root@b42d93b2364b:/# dd if=/dev/zero of=/dev/null &

我們可以再重新開一個(gè)終端,使用top查看一下cpu占用率是不是百分之二十

測(cè)試兩個(gè)cpu的爭(zhēng)搶問題,如果你是兩個(gè)cpu的話首先先關(guān)掉一個(gè)cpu
echo 0 > /sys/devices/system/cpu/cpu1/online

[root@server2 ~]# docker run -it --rm ubuntu root@d6cb959714c5:/# dd if=/dev/zero of=/dev/null & [1] 9 ctrl+p+q退出,然后重新開個(gè)交互 root@d6cb959714c5:/# [root@server2 ~]# docker run -it --rm ubuntu root@5594429c2d0b:/# dd if=/dev/zero of=/dev/null

我們看到兩個(gè)dd進(jìn)程cpu占用個(gè)百分之五十

退出剛才第二次啟用的交互,下面我們可以加一個(gè)限制cpu的參數(shù),重新進(jìn)去,再次查看top中cpu占用情況

[root@server2 ~]# docker run -it --rm --cpu-shares 512 ubuntu ##設(shè)置優(yōu)先級(jí),優(yōu)先級(jí)比原來少了一半 root@1ed8bb0e9c41:/# dd if=/dev/zero of=/dev/null

2.內(nèi)存限制

容器可用內(nèi)存包括兩個(gè)部分:物理內(nèi)存和swap交換分區(qū)。
docker run -it --memory 200M --memory-swap=200M ubuntu
–memory設(shè)置內(nèi)存使用限額
–memory-swap設(shè)置swap交換分區(qū)限額

docker run -it --memory 200M --memory-swap=200M ubuntu [root@server2 ~]# cd /sys/fs/cgroup/memory/docker/


3.Block IO限制

docker run -it --device-write-bps /dev/sda:30MB ubuntu
–device-write-bps限制寫設(shè)備的bps
目前的block IO限制只對(duì)direct IO有效。(不使用文件緩存)

[root@server2 ~]# docker run -it --device-write-bps /dev/vda:30MB ubuntu root@4fe58c95548e:/# dd if=/dev/zero of=bigfile bs=1M count=100 oflag=direct 100+0 records in 100+0 records out 104857600 bytes (105 MB, 100 MiB) copied, 3.31646 s, 31.6 MB/s root@4fe58c95548e:/#

三、docker安全加固

1.利用LXCFS增強(qiáng)docker容器隔離性和資源可見性

鏈接:LXCFS包提取碼: thc4

[root@server2 ~]# yum install lxcfs-2.0.5-3.el7.centos.x86_64.rpm -y [root@server2 ~]# lxcfs /var/lib/lxcfs & ##運(yùn)行 [root@server2 lxcfs]# docker run -it -m 256m \ > -v /var/lib/lxcfs/proc/cpuinfo:/proc/cpuinfo:rw \ > -v /var/lib/lxcfs/proc/diskstats:/proc/diskstats:rw \ > -v /var/lib/lxcfs/proc/meminfo:/proc/meminfo:rw \ > -v /var/lib/lxcfs/proc/stat:/proc/stat:rw \ > -v /var/lib/lxcfs/proc/swaps:/proc/swaps:rw \ > -v /var/lib/lxcfs/proc/uptime:/proc/uptime:rw \ > ubuntu

2.設(shè)置特權(quán)級(jí)運(yùn)行的容器

–privileged=true
有的時(shí)候我們需要容器具備更多的權(quán)限,比如操作內(nèi)核模塊,控制swap交換分區(qū),掛載USB磁盤,修改MAC地址等。

[root@server2 ~]# docker run -it --rm --privileged=true busybox

我們知道添加ip是超戶才能執(zhí)行的。

3.設(shè)置容器白名單

–cap-add
–privileged=true 的權(quán)限非常大,接近于宿主機(jī)的權(quán)限,為了防止用戶的濫用,需要增加限制,只提供給容器必須的權(quán)限。此時(shí)Docker 提供了權(quán)限白名單的機(jī)制,使用–cap-add添加必要的權(quán)限。
capabilities手冊(cè)地址:
http://man7.org/linux/man-pages/man7/capabilities.7.html

[root@server2 ~]# docker run -it --rm --cap-add=NET_ADMIN busybox / # ip link set down eth0 / # ip link set up eth0

4.安全加固的思路

  • 保證鏡像的安全

    • 使用安全的基礎(chǔ)鏡像
    • 刪除鏡像中的setuid和setgid權(quán)限
    • 啟用Docker的內(nèi)容信任
    • 最小安裝原則
    • 對(duì)鏡像進(jìn)行安全漏洞掃描,鏡像安全掃描器:Clair
    • 容器使用非root用戶運(yùn)行
  • 保證容器的安全

    • 對(duì)docker宿主機(jī)進(jìn)行安全加固
    • 限制容器之間的網(wǎng)絡(luò)流量
    • 配置Docker守護(hù)程序的TLS身份驗(yàn)證
    • 啟用用戶命名空間支持(userns-remap)
    • 限制容器的內(nèi)存使用量
    • 適當(dāng)設(shè)置容器CPU優(yōu)先級(jí)

5.docker安全的遺留問題

主要的內(nèi)核子系統(tǒng)都沒有命名空間,如:

  • SELinux
  • cgroup
  • 在/sys下的文件系統(tǒng)
  • /proc/sys, /proc/sysrq-trigger, /proc/irq, /proc/bus

設(shè)備沒有命名空間:

  • /dev/mem
  • /dev/sd*文件系統(tǒng)設(shè)備
  • 內(nèi)核模塊
    如果你能溝通或攻擊的其中之一作為特權(quán)的過程中,你可以擁有自己的系統(tǒng)。

6.總結(jié)

本章節(jié)講解了docker的安全現(xiàn)狀,雖然還是有很多沒有完善的地方,但不能否認(rèn)docker依然是當(dāng)前最安全的容器技術(shù)。

Docker安全的頂尖開源工具:

  • Docker Bench for Security 對(duì)照安全基準(zhǔn)審計(jì)Docker容器的腳本
  • Clair API驅(qū)動(dòng)的靜態(tài)容器安全分析工具,擁有龐大的CVE數(shù)據(jù)庫
  • Cilium 內(nèi)核層可感知API的網(wǎng)絡(luò)和安全工具
  • Anchore 使用CVE數(shù)據(jù)和用戶定義的策略檢查容器安全的工具
  • OpenSCAP Workbench 用于為各種平臺(tái)創(chuàng)建和維護(hù)安全策略的環(huán)境
  • Dagda 用于在Docker容器中掃描漏洞、特洛伊木馬、病毒和惡意軟件的工具
  • Notary 使用服務(wù)器加強(qiáng)容器安全的框架,用于以加密方式委派責(zé)任
  • Sysdig Falco 提供了行為活動(dòng)監(jiān)控,可深入了解容器

總結(jié)

以上是生活随笔為你收集整理的Docker安全的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。