前言
Docker 是一個
開源的應(yīng)用容器引擎
,讓開發(fā)者可以打包他們的應(yīng)用以及依賴包到一個可移植的容器中,然后發(fā)布到任何流行的Linux或Windows
操作系統(tǒng)的機器上,也可以實現(xiàn)虛擬化,容器是完全使用沙箱機制,相互之間不會有任何接口。
??作者簡介:熱愛跑步的恒川,致力于C/C++、Java、Python等多編程語言,熱愛跑步,喜愛音樂的一位博主。
??本文收錄于恒川的日常匯報系列,大家有興趣的可以看一看
??相關(guān)專欄C語言初階、C語言進(jìn)階系列等,大家有興趣的可以看一看
??Python零基礎(chǔ)入門系列,Java入門篇系列正在發(fā)展中,喜歡Python、Java的朋友們可以關(guān)注一下哦!
1. Docker鏡像
??Docker 1.3 支持?jǐn)?shù)字簽名來確認(rèn)官方倉庫鏡像的起源和完整性。因該功能仍在開發(fā)中所以Docker將拋出警告但不會阻止鏡像的實際運行
。
??通常確保鏡像只從受信庫中檢索并且不使用–insecure-registry命令項。
2. 網(wǎng)絡(luò)命名空間
??在默認(rèn)情況下,Docker REST API用來控制容器通過系統(tǒng)Docker守護(hù)進(jìn)程是能夠通過Unix域套接字的方式暴露出來
。在Docker上開啟一個TCP端口(即 當(dāng)引導(dǎo)Docker守護(hù)進(jìn)程時必須使用 -H 選項綁定地址)將允許任何人通過該端口訪問容器,有可能獲得主機上的root訪問權(quán)限
以及在某些場景下本地用戶所屬的Docker組。
3. 日志和審核
??收集和歸檔與Docker相關(guān)的安全日志來達(dá)到審核和監(jiān)督的目的。
從host,可以使用下面的命令來訪問容器外的日志文件:
docker run -v /dev/log:/dev/log/bin/sh
使用Docker命令內(nèi)置:
docker logs … (-f to follow log output)
日志文件也可以從持續(xù)存儲導(dǎo)出到一個使用壓縮包里面:
docker export …
4. SELinux 或 AppArmor
??Linux的內(nèi)部安全模塊,例如通過訪問控制的安全策略來配置安全增強型Linux(SELinux)和AppArmor
,從而實現(xiàn)強制性的訪問控制(MAC)一套有限的系統(tǒng)資源的限制進(jìn)程,如果先前已經(jīng)安裝和配置過SELinux,那么它可以使用setenforce 1在容器中被激活。Docker程序的SELinux支持是默認(rèn)無效的,并且需要使用—selinux功能來被激活
。通過使用新增的—security-opt來加載SELinux或者AppArmor的策略對容器的標(biāo)簽限制進(jìn)行配置。該功能已經(jīng)在Docker版本1.3中介紹過。例如:
??docker run --security-opt=secdriver:name:value -i -t centos bash
5. 守護(hù)特權(quán)
??不要使用–privileged命令行選項。這本來允許容器來訪問主機上的所有設(shè)備,并為容器提供一個特定的LSM配置(例如SELinux或AppArmor)
,而這將給予如主機上運行的程序同樣水平的訪問。避免使用–privileged有助于減少主機泄露的攻擊面和潛力。然而,這并不意味著程序?qū)]有優(yōu)先權(quán)的運行,當(dāng)然這些優(yōu)先權(quán)在最新的版本中還是必須的
。發(fā)布新程序和容器的能力只能被賦予到值得信任的用戶上。通過利用-u選項盡量減少容器內(nèi)強制執(zhí)行的權(quán)限。例如:
??docker run -u-it/bin/bash
??Docker組的任何用戶部分可能最終從容器中的主機上獲得根源。
6. cgroups
??為了防止通過系統(tǒng)資源耗盡的DDoS攻擊,可以使用特定的命令行參數(shù)被來進(jìn)行一些資源限制
。
??CPU使用率:
docker run -it --rm --cpuset=0,1 -c 2 …
??內(nèi)存使用:
docker run -it --rm -m 128m …
??存儲使用:
docker -d --storage-opt dm.basesize=5G
??磁盤I/O:
不支持Docker。BlockIO*屬性可以通過systemd暴露,并且在支持操作系統(tǒng)中被用來控制磁盤的使用配額。
7. 二進(jìn)制SUID/GUID
??SUID和GUID二進(jìn)制文件不穩(wěn)定的時候容易受到攻擊
,而這個時候是很危險的,,導(dǎo)致任意代碼執(zhí)行(如緩沖區(qū)溢出),因為它們會進(jìn)程的文件所有者或組的上下文中運行。如果可能的話,禁止SUID和SGID使用特定的命令行參數(shù)來降低容器的功能。
??docker run -it --rm --cap-drop SETUID --cap-drop SETGID …
??另一選擇,可以考慮運用通過安裝有nosuid屬性的文件系統(tǒng)來移除掉SUID能力。
??最后一個選擇是從系統(tǒng)中徹底刪除不需要的SUID和GUID二進(jìn)制文件。這些類型的二進(jìn)制文件可以在Linux系統(tǒng)中運行以下命令而找到:
??find / -perm -4000 -exec ls -l {} ; 2 > /dev/null
??find / -perm -2000 -exec ls -l {} ; 2 > /dev/null
??可以使用類似于下面的命令將SUID和GUID文件權(quán)限刪除
然后:
??sudo chmod u-s filename sudo chmod -R g-s directory
8. 設(shè)備控制組(/dev/*)
??如果需要,使用內(nèi)置的設(shè)備選項(不使用-v與–privileged參數(shù))。此功能在推出1.2版本。
例如(聲卡使用):
docker run --device=/dev/snd:/dev/snd …
9. 服務(wù)和應(yīng)用
??如果一個Docker容器有可能被泄露,為了減少橫向運動的潛力,考慮隔離極易受影響的服務(wù)(如在主機或虛擬機上運行SSH服務(wù))
。此外,不要運行容器內(nèi)不受信任的操作的應(yīng)用程序。
10. 安裝項
??當(dāng)使用本機容器庫時(即libcontainer)Docker就會自動處理這個。
??但是,使用LXC容器庫時
,敏感的安裝點最好通過運用只讀權(quán)限來手動安裝,其中包括:
/sys
/proc/sys
/proc/sysrq-trigger
/proc/irq
/proc/bus
安裝權(quán)限應(yīng)在以后刪除,以防止重新掛載。
11. Linux內(nèi)核
??使用系統(tǒng)提供的更新工具來確保內(nèi)核是實最新的(如apt-get,yum,等)。過時的內(nèi)核可能更脆弱
,并且被暴露一些漏洞。使用GRSEC或PAX來加強內(nèi)核,即例如對內(nèi)存破壞的漏洞來提供更高的安全性。
12. 用戶命名空間
??Docker不支持用戶的命名空間,但是的一個開發(fā)功能。UID映射由LXC程序驅(qū)動,但在本機libcontainer庫中不被支持
。該功能將允許Docker程序像一個沒有特權(quán)的用戶在主機上運行,但顯示出來的是和在容器中運行的一樣。
13. libseccomp(和seccomp-bpf 擴展)
??libseccomp庫允許在基于一個白名單的方法上限制Linux內(nèi)核的系統(tǒng)調(diào)用程序的使用
。對于系統(tǒng)操作來說,不是很重要的系統(tǒng)調(diào)用程序,最好被禁用,以防止被破壞的容器被濫用或誤用。此功能工作正在進(jìn)行中(LXC驅(qū)動程序中已經(jīng)有了,但是在libcontainer中還沒有完成,雖然是默認(rèn)值)。使用LXC驅(qū)動程序
來重啟Docker程序:
??docker -d -e lxc
??如何生成seccomp配置的說明都在“的contrib”文件夾中的Docker GitHub的資源庫。以后可以用下面的命令來創(chuàng)建一個基于Docker容器的LXC:
??docker run --lxc-conf=“l(fā)xc.seccomp=$file”
驅(qū)動程序的概念:
??驅(qū)動程序一般指的是設(shè)備驅(qū)動程序(Device Driver),是一種可以使計算機和設(shè)備進(jìn)行相互通信的特殊程序。相當(dāng)于硬件的接口,操作系統(tǒng)只有通過這個接口,才能控制硬件設(shè)備的工作,假如某設(shè)備的驅(qū)動程序未能正確安裝,便不能正常工作
。因此,驅(qū)動程序被比作“ 硬件的靈魂”、“硬件的主宰”、“硬件和系統(tǒng)之間的橋梁”等。
14. 性能
??只要可能,就將Linux性能降低到最小
。Docker默認(rèn)的功能包括:chown, dac_override, fowner, kill, setgid, setuid, setpcap, net_bind_service, net_raw, sys_chroot, mknod, setfcap, and audit_write.
??從控制行來啟動容器時,可以通過–cap-add 或者–cap-drop參數(shù)來進(jìn)行控制:
??例如:
docker run --cap-drop setuid --cap-drop setgid -ti/bin/sh
15. 多租環(huán)境
??由于Docker容器內(nèi)核的共享性質(zhì),責(zé)任分離在多租戶環(huán)境中不能安全地實現(xiàn)。建議容器在那些沒有其它的目的,也不用于敏感操作的主機上運行
??梢钥紤]通過Docker控制來將所有服務(wù)移動到容器中。如果可能的話,通過使用–icc= false將跨容器通信降到最低,并必要時指定-link與Docker運行,或通過—export=port,不在主機上發(fā)布,而在容器上暴露一個端口。相互信任的容器的映像組來分離機器。
多租戶的概念:
??多租戶指服務(wù)器上運行單一應(yīng)用,但是同時服務(wù)于多家企業(yè)。每一個企業(yè)的用戶所使用的應(yīng)用都是自定制版本
。這種就是應(yīng)用本身的共享作為資源,而不是一個企業(yè)只能單獨使用一臺服務(wù)器或者一套服務(wù)器上運作的單一應(yīng)用。
16. 完全虛擬化
??使用一個完整的虛擬化解決方案包含Docker,如KVM。這將阻止一個內(nèi)核漏洞在Docker鏡像中被利用導(dǎo)致容器擴為主系統(tǒng)
。
Docker鏡像能夠嵌套來提供該KVM虛擬層,參考Docker-in-Docker utility 中所示。
17. 安全審核
??對主系統(tǒng)和容器定期進(jìn)行安全審核以查明能導(dǎo)致系統(tǒng)損壞的錯誤配置或漏洞。文章來源:http://www.zghlxwxcb.cn/news/detail-542175.html
如果這份博客對大家有幫助,希望各位給恒川一個免費的點贊??作為鼓勵,并評論收藏一下?,謝謝大家!?。?br> 制作不易,如果大家有什么疑問或給恒川的意見,歡迎評論區(qū)留言。文章來源地址http://www.zghlxwxcb.cn/news/detail-542175.html
到了這里,關(guān)于【Docker】Docker的部署含服務(wù)和應(yīng)用、多租環(huán)境、Linux內(nèi)核的詳細(xì)介紹的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!