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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Docker安全

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

一、理解Docker安全

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

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

1.命名空間隔離的安全

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

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

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

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

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

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

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

5.其他安全特性

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

二、容器資源控制

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

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

1.CPU限額

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

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

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

測試兩個cpu的爭搶問題,如果你是兩個cpu的話首先先關(guān)掉一個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退出,然后重新開個交互 root@d6cb959714c5:/# [root@server2 ~]# docker run -it --rm ubuntu root@5594429c2d0b:/# dd if=/dev/zero of=/dev/null

我們看到兩個dd進程cpu占用個百分之五十

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

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

2.內(nèi)存限制

容器可用內(nèi)存包括兩個部分:物理內(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限制只對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增強docker容器隔離性和資源可見性

鏈接:LXCFS包提取碼: thc4

[root@server2 ~]# yum install lxcfs-2.0.5-3.el7.centos.x86_64.rpm -y [root@server2 ~]# lxcfs /var/lib/lxcfs & ##運行 [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)級運行的容器

–privileged=true
有的時候我們需要容器具備更多的權(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)限非常大,接近于宿主機的權(quán)限,為了防止用戶的濫用,需要增加限制,只提供給容器必須的權(quán)限。此時Docker 提供了權(quán)限白名單的機制,使用–cap-add添加必要的權(quán)限。
capabilities手冊地址:
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)容信任
    • 最小安裝原則
    • 對鏡像進行安全漏洞掃描,鏡像安全掃描器:Clair
    • 容器使用非root用戶運行
  • 保證容器的安全

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

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)狀,雖然還是有很多沒有完善的地方,但不能否認docker依然是當前最安全的容器技術(shù)。

Docker安全的頂尖開源工具:

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

總結(jié)

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

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