文章目錄
- 一:docker中容器與常規的虛擬化平臺中虛擬機的區別
- 二:Docker存在的安全問題
- 三:Docker架構缺陷與安全機制
- 四:Docker安全基線標準
- 五:使用本地登錄容器實現最小化
- 六:Docker remote( 遠程調用) api訪問控制
- 6.1 環境如下
- 6.2 修改配置文件docker.service
- 6.3 重啓服務
- 6.4 開放端口
- 6.5 使用remote節點去測試docker,成功
- 6.6 測試拉取鏡像
- 6.7 測試開啓容器
- 6.8 若是反饋無法連接,需要清空doker節點的iptables規則然後指定
- 七:限制流量流向
- 八:鏡像安全
- 九:Docker-TLS加密通訊
- 9.1 修改hosts文件
- 9.2 準備製作CA證書
- 9.3 創建CA密鑰
- 9.4 基於CA密鑰創建CA證書
- 9.5 創建ct節點證書
- 9.6 同理生成localhost節點密鑰
- 9.7 刪除不需要的文件
- 9.8 ct節點配置docker.service
- 9.9 scp將local節點所需文件scp過去
- 9.10 local節點指定加密文件遠程調用測試
- 十:dockerfile、compose創建容器注意要點
一:docker中容器與常規的虛擬化平臺中虛擬機的區別
1.1 隔離與共享
虛擬機通過添加Hypervisor(管理程序程序虛擬層),虛擬出網卡、內存、CPU等虛擬硬件,再在其上建立虛擬機,每個虛擬機都有自己的系統內核。
而Docker容器則是通過隔離的方式,將文件系統、進程、設備、網絡等資源進行隔離,再對權限、CPU資源等進行控制,最終讓容器之間互不影響,容器無法影響宿主機。容器與宿主機共享內核、文件系統、硬件等資源。
1.2 性能與損耗
與虛擬機相比,容器資源損耗要少。同樣的宿主機下,能夠建立容器的數量要比虛擬機多。
但是,虛擬機的安全性要比容器稍好,要從虛擬機攻破到宿主機或者其他虛擬機,就需要先攻破Hypervsior,但是極其困難。
而docker容器與宿主機共享內核、文件系統等資源,更有可能對其他容器、宿主機產生影響。
二:Docker存在的安全問題
2.1 Docker自身漏洞
作爲一款應用Docker本身實現上會有代碼缺陷,在官方記錄Docker歷史版本工作共有超過20項漏洞。
黑客常用的攻擊手段主要有代碼執行、權限提升、信息泄露、權限繞過等。目前Docker版本更迭非常快,Docker用戶最好將Docker升級爲最新版本。
docker更新考慮的第一個就是安全,然後就是資源利用率
2.2 Docker源碼問題
Docker提供了Docker hub(公有倉庫),可以讓用戶上傳創建的鏡像,以便其他用戶下載,快速搭建環境。但同時也帶來了一些安全隱患。例如下面三種方式:
2.2.1 黑客上傳惡意鏡像
如果有黑客在製作的鏡像中植入木馬、後門等惡意團建,那麼環境一開始就變得不安全,後續更沒有安全可言。
2.2.2 鏡像中使用有漏洞的軟件
Docker hub上能下載的鏡像裏面,有一大部分都安裝了有漏洞的軟件;所以下載鏡像後,需要檢查裏面軟件的版本信息,對應的版本是否存在漏洞,並及時更新打賞補丁
2.2.3 中間人攻擊篡改鏡像
鏡像在傳輸過程中可能被篡改,目前新版本的Docker已經提供了相應的校驗機制來預防這個問題。
三:Docker架構缺陷與安全機制
docker本身的架構與機制就可能產生問題。例如這樣一種攻擊場景,黑客已經控制了宿主機上的一些容器,或者獲得了通過在共有公國雲上建立容器的方式,然後對宿主機或其他容器發起了攻擊。
3.1 容器之間的局域網攻擊
主機上的容器之間可以構成局域網,因此針對局域網的ARP欺騙、嗅探、廣播風暴等攻擊方式可能會出現
所以,在一個主機上部署多個容器需要合理的配置網絡,設置iptables規則
3.2 DDos攻擊耗盡資源
DDos攻擊:就是佔用資源但是不幹活
Cgroups資源配額安全機制就是要防止此類攻擊的,不要爲單一地容器分配過多的資源即可避免此類問題
3.3 有漏洞的系統調用
Docker與虛擬機的一個重要的區別就是Docker與宿主機共用一個操作系統內核。
一旦宿主內核存在可以越權或者提權漏洞,儘管Docker使普通用戶執行,在容器被入侵時,攻擊者還可以利用內核漏洞跳到宿主機做更多的事情
3.4 共享root用戶權限
如果以root用戶權限運行容器,容器內的root用戶也就擁有了宿主機的root權限
四:Docker安全基線標準
下面從內核、主機、網絡、鏡像、容器以及其它等6個方面總結Docker安全基線標準。
4.1 內核級別
1.及時更新內核
2.User NameSpace(容器內的root權限在容器之外處於非高權限狀態)。
3.Cgroups(對資源的配額的度量)。
4.SELinux/AppArmor/GRSEC(控制文件訪問權限)。
5.Capability(權限劃分)。
6.Seccomp(限定系統調用)。
7.禁止將容器的命名空間與宿主機進程命名空間共享。
4.2 主機級別
1.爲容器創建獨立存儲分區
2.僅運行必要的服務
3.禁止將宿主機上敏感目錄映射到容器
4.對Docker守護進程、相關文件和目錄進行審計
5.設置適當的默認文件描述符數
(文件描述符:內核(kernel)利用文件描述符(file descriptor)來訪問文件。文件描述符是非負整數。打開現存文件或新建文件時,內核會返回一個文件描述符。讀寫文件也需要文件描述符來指定待讀寫的文件)
6.用戶權限爲root的Docker相關文件的訪問權限應該爲644或者更低權限。
7.週期性檢查每個主機的容器清單,並清理不必要的容器
一臺服務器可以預留兩個網卡端口,用來做負載均衡等流量轉發
4.3 網絡級別
1.通過iptables設定規則實現禁止或允許容器之間網絡流量
2.允許docker修改iptables
3.禁止將docker綁定到其他IP/port或者unix socket
4.禁止在容器上映射特權端口,就是別映射已用端口
5.容器上只開放所需要的端口
6.禁止在容器上使用主機網絡(host)模式
7.若宿主機有多個網卡,將容器進入流量綁定到特定的主機網卡上
4.4 鏡像級別
1.創建本地鏡像倉庫服務器
2.鏡像中軟件都爲最新本版本。
3.使用可信鏡像文件,並通過安全通道下載
4.重新構建鏡像而非對容器和鏡像打補丁
5.合理管理鏡像標籤,及時移除不再使用的鏡像
6.使用鏡像掃描
7.使用鏡像簽名
4.5 容器級別
1.容器最小化,操作系統鏡像最小化
2.容器以單一主進程的方式運行
3.禁止使用–privileged標記使用特權容器
4.禁止在容器上運行ssh服務
5.以只讀的方式掛載容器的根目錄系統
6.明確定義屬於容器的數據盤符
7.通過設置on-failure限制容器常識重啓的次數,容器反覆重啓容易丟失數據
8.限制在容器中可用的進程數,以防止fork bomb(迅速增長子進程,耗盡系統進程數量)
4.6 其他設置
1.定期對宿主機系統及容器進行安全審計
2.使用最少資源和最低權限運行容器
3.避免在統一宿主機上部署大量容器,維持在一個能夠管理的數量
4.監控Docker容器的使用,性能以及其他各項指標
5.增加實時威脅檢測和時間相應功能
6.使用中心和遠程日誌收集服務
k8s或者zabbix可以監控docker
五:使用本地登錄容器實現最小化
如果盡在容器中運行必要的服務,像SSH等服務是不能輕易開啓去鏈接容器的;
通常使用本exec 去鏈接進入容器
docker exec -itt 容器ID bash
六:Docker remote( 遠程調用) api訪問控制
docker的遠程調用API接口存在未授權訪問漏洞,至少應限制外網訪問
建議使用Socket方式訪問,socket 是使用tcp協議訪問
6.1 環境如下
當前docker鏡像(安裝harbor倉庫)
[root@docker ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
compose_nginx_nginx latest e3abfd076454 4 days ago 726MB
cirros latest 3c82e4d066cf 7 weeks ago 12.6MB
127.0.0.1/gsy/cirros vers1 3c82e4d066cf 7 weeks ago 12.6MB
centos 7 5e35e350aded 5 months ago 203MB
vmware/harbor-log v1.2.2 36ef78ae27df 2 years ago 200MB
vmware/harbor-jobservice v1.2.2 e2af366cba44 2 years ago 164MB
vmware/harbor-ui v1.2.2 39efb472c253 2 years ago 178MB
vmware/harbor-adminserver v1.2.2 c75963ec543f 2 years ago 142MB
vmware/harbor-db v1.2.2 ee7b9fa37c5d 2 years ago 329MB
vmware/nginx-photon 1.11.13 6cc5c831fc7f 2 years ago 144MB
vmware/registry 2.6.2-photon 5d9100e4350e 2 years ago 173MB
vmware/postgresql 9.6.4-photon c562762cbd12 2 years ago 225MB
vmware/clair v2.0.1-photon f04966b4af6c 2 years ago 297MB
vmware/harbor-notary-db mariadb-10.1.10 64ed814665c6 3 years ago 324MB
vmware/notary-photon signer-0.5.0 b1eda7d10640 3 years ago 156MB
vmware/notary-photon server-0.5.0 6e2646682e3c 3 years ago 157MB
photon 1.0 e6e4e4a2ba1b 3 years ago 128MB
當前docker up容器
[root@docker ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
94630e81bb21 vmware/harbor-jobservice:v1.2.2 "/harbor/harbor_jobs…" 2 days ago Up 2 days harbor-jobservice
e68e275ba6c5 vmware/nginx-photon:1.11.13 "nginx -g 'daemon of…" 2 days ago Up 2 days 0.0.0.0:80->80/tcp, 0.0.0.0:443->443/tcp, 0.0.0.0:4443->4443/tcp nginx
278c281594c9 vmware/harbor-ui:v1.2.2 "/harbor/harbor_ui" 2 days ago Up 2 days harbor-ui
b7adea7dfc28 vmware/registry:2.6.2-photon "/entrypoint.sh serv…" 2 days ago Up 2 days 5000/tcp registry
b587a5b5a4f9 vmware/harbor-db:v1.2.2 "docker-entrypoint.s…" 2 days ago Up 2 days 3306/tcp harbor-db
8fbb66df3206 vmware/harbor-adminserver:v1.2.2 "/harbor/harbor_admi…" 2 days ago Up 2 days harbor-adminserver
b282d0c45952 vmware/harbor-log:v1.2.2 "/bin/sh -c 'crond &…" 2 days ago Up 2 days 127.0.0.1:1514->514/tcp harbor-log
[root@docker ~]#
查看客戶端
[root@remote ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
[root@remote ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
[root@remote ~]#
所謂Docker remote( 遠程調用) api訪問控制便是在不使用ssh鏈接目標端的方式去查看目標端的容器狀態
關閉核心防護
[root@docker ~]# setenforce 0
setenforce: SELinux is disabled
6.2 修改配置文件docker.service
修改第14行參數
-H 指定協議
[root@docker ~]# vim /usr/lib/systemd/system/docker.service
14 ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock -H unix:///var/run/docker.sock -Htcp://192.168.247.20:2375
6.3 重啓服務
[root@docker ~]# systemctl daemon-reload
[root@docker ~]# systemctl restart docker
[root@docker ~]# netstat -natp | grep 2375
tcp 0 0 192.168.247.20:2375 0.0.0.0:* LISTEN 9905/dockerd
6.4 開放端口
[root@docker ~]# firewall-cmd --get-active-zones
public
interfaces: eth0 eth1
[root@docker ~]# firewall-cmd --zone=public --add-port=2375/tcp
success
6.5 使用remote節點去測試docker,成功
備註:使用本地測試的話,指定127.0.0.1
[root@remote ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
[root@remote ~]# docker -H tcp://192.168.247.20:2375 ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
94630e81bb21 vmware/harbor-jobservice:v1.2.2 "/harbor/harbor_jobs…" 2 days ago Exited (2) 3 minutes ago harbor-jobservice
e68e275ba6c5 vmware/nginx-photon:1.11.13 "nginx -g 'daemon of…" 2 days ago Exited (128) 3 minutes ago 0.0.0.0:80->80/tcp, 0.0.0.0:443->443/tcp, 0.0.0.0:4443->4443/tcp nginx
278c281594c9 vmware/harbor-ui:v1.2.2 "/harbor/harbor_ui" 2 days ago Up 29 seconds harbor-ui
b7adea7dfc28 vmware/registry:2.6.2-photon "/entrypoint.sh serv…" 2 days ago Exited (2) 3 minutes ago 5000/tcp registry
b587a5b5a4f9 vmware/harbor-db:v1.2.2 "docker-entrypoint.s…" 2 days ago Exited (128) 3 minutes ago 3306/tcp harbor-db
8fbb66df3206 vmware/harbor-adminserver:v1.2.2 "/harbor/harbor_admi…" 2 days ago Exited (2) 3 minutes ago harbor-adminserver
b282d0c45952 vmware/harbor-log:v1.2.2 "/bin/sh -c 'crond &…" 2 days ago Up 3 minutes 127.0.0.1:1514->514/tcp harbor-log
[root@remote ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
[root@remote ~]#
6.6 測試拉取鏡像
[root@remote ~]# docker -H tcp://192.168.247.20:2375 pull nginx
Using default tag: latest
[root@remote ~]# docker -H tcp://192.168.247.20:2375 images | grep nginx
nginx latest 602e111c06b6 2 days ago 127MB
compose_nginx_nginx latest e3abfd076454 4 days ago 726MB
vmware/nginx-photon 1.11.13 6cc5c831fc7f 2 years ago 144MB
到docker終端驗證查看
[root@docker ~]# docker images | grep nginx
nginx latest 602e111c06b6 2 days ago 127MB
compose_nginx_nginx latest e3abfd076454 4 days ago 726MB
vmware/nginx-photon 1.11.13 6cc5c831fc7f 2 years ago 144MB
6.7 測試開啓容器
[root@remote ~]# docker -H tcp://192.168.247.20:2375 run -itd --name gsycs nginx /bin/bash
f08182d315e6da8a43953695b72350302ba2d01e8d4cbf9fbeee7f8864e1468c
[root@remote ~]# docker -H tcp://192.168.247.20:2375 ps -a | grep gsycs
f08182d315e6 nginx "/bin/bash" 10 seconds ago Up 11 seconds 80/tcp
[root@docker ~]# docker ps -a | grep gsy
f08182d315e6 nginx "/bin/bash" 48 seconds ago Up 48 seconds 80/tcp gsycs
[root@docker ~]#
6.8 若是反饋無法連接,需要清空doker節點的iptables規則然後指定
error durin connect: Get http://192.168.247.20:2375/v1.40/containers/json:dial tcp 192.168.247.20:2375: connect: no route to host
[root@docker ~]# iptables -L;iptables -F
七:限制流量流向
使用防火牆過濾限制docker容器的源IP地址與外界通訊
[root@docker ~]# firewall-cmd --permanent --zone=public --add-rich-rule="rule family="ipv4" source address="192.168.247.0/24" reject"
[root@docker ~]# firewall-cmd --reload
大量問題的產生是因爲Docker容器端口外放引起的漏洞,除了操作系統賬戶權限控制上的問題,更在於對Docker Daemon的進程管理上存在隱患
目前常用的Docker版本都支持Docker Daemon 管理宿主iptables,而且一旦啓動進程上加上-p host_port:容器_port的端口映射,Docker Daemon會直接增加對應的forward chain並且-j ACCEPT;而默認的Drop規則實在INPUT鏈做,對docker無法限制,這邊留下了很嚴重的安全隱患
因此建議如下:
1.不在有外網IP的主機上使用Docker服務
2.使用K8s等docker編排系統管理Docker容器
3.宿主上docker daemon啓動命令加上一個–iptables=false,然後把常用iptables寫進文件裏,使用iptables-restore去執行
八:鏡像安全
docker鏡像安全掃描,在鏡像倉庫客戶端使用證書認證,對下載的鏡像進行檢查
通過CVE數據庫同步掃描鏡像,一旦發現漏洞則通知用戶處理,或者直接組織鏡像繼續構建
如果公司使用自己的鏡像,可以跳過此步;否則,至少需要驗證baseimage的md5等(哈希)特徵值,確認一致後再基於baseimage進一步構建
一般來說,要確保只從受信任的庫中獲取鏡像,並且不建議使用–insecure-registry=[]參數
推薦使用harbor私有倉庫
九:Docker-TLS加密通訊
爲了防止鏈路劫持、會話劫持等問題導致Docker通信時被中間人攻擊,cs兩端應該通過加密方式通訊
做TLS加密要保持環境的純淨,docker內沒有鏡像和容器
防止做了TLS後,還是有沒有加密的數據傳輸
CA認證,確保發出去的消息進行加密,保持自己身份的唯一性
9.1 修改hosts文件
[root@ct ~]# vim /etc/hosts
127.0.0.1 ct
192.168.247.20 ct
192.168.247.142 gsy
[root@localhost ~]# vim /etc/hosts
192.168.247.20 ct
9.2 準備製作CA證書
[root@ct ~]# mkdir TLS
[root@ct ~]# cd ~/TLS/
[root@ct TLS]# ls
[root@ct TLS]#
9.3 創建CA密鑰
備註:密碼設爲123123
rsa,非對稱密鑰,位數256位,-out 輸出密鑰文件ca-key.pem
[root@ct TLS]# openssl genrsa -aes256 -out ca-key.pem 4096
Generating RSA private key, 4096 bit long modulus
................................................................................................................................................................++
..................................................................................................................................................................++
e is 65537 (0x10001)
Enter pass phrase for ca-key.pem:
Verifying - Enter pass phrase for ca-key.pem:
[root@ct TLS]# ls
ca-key.pem
[root@ct TLS]#
這個只是一個原材料,接下來就用它創建CA證數
9.4 基於CA密鑰創建CA證書
pem 證書
-subj 項目名稱
-new 新請求。
-x509 輸出一個x509結構,而不是cert. req。
-days 由-x509生成的證書的有效天數。
[root@ct TLS]# openssl req -new -x509 -days 1000 -key ca-key.pem -sha256 -subj "/CN=*" -out ca.pem
Enter pass phrase for ca-key.pem:此處輸入ca-key.pem密碼
You have new mail in /var/spool/mail/root
[root@ct TLS]# ls
ca-key.pem ca.pem
[root@ct TLS]#
9.5 創建ct節點證書
CA證書只是一個官方認證的證證書
接下來要創建ct、localhost的證書
此時創建ct的證書是有三步
1.設置私鑰 確保安全加密
2.私鑰簽名 確保身份真實不可抵賴
3.製作證書
csr是一個簽名文件
[root@ct TLS]# openssl genrsa -out ct-key.pem 4096 #創建服務器密鑰
Generating RSA private key, 4096 bit long modulus
........................................................................................................++
...........................................................................................++
e is 65537 (0x10001)
You have new mail in /var/spool/mail/root
[root@ct TLS]# ls
ca-key.pem ca.pem ct-key.pem
[root@ct TLS]# openssl req -subj "/CN=*" -sha256 -new -key ct-key.pem -out ct.csr #簽名私鑰,csr是一個簽名文件
[root@ct TLS]# ls
ca-key.pem ca.pem ct.csr ct-key.pem
[root@ct TLS]# openssl x509 -req -days 1000 -sha256 -in ct.csr -CA ca.pem -CAkey ca-key.pem -CAcreateserial -out ct-cert.pem
#//使用ca證書與私鑰證書籤名,導入簽名ct.csr,指定CA文件和密鑰文件,確定官方授權輸入123123
Signature ok
subject=/CN=*
Getting CA Private Key
Enter pass phrase for ca-key.pem:
[root@ct TLS]# ls
ca-key.pem ca.pem ca.srl ct-cert.pem ct.csr ct-key.pem
9.6 同理生成localhost節點密鑰
生成local密鑰
[root@ct TLS]# openssl genrsa -out local-key.pem 4096
Generating RSA private key, 4096 bit long modulus
...............................................................................................++
.....................................................................................................++
e is 65537 (0x10001)
創建簽名文件
[root@ct TLS]# openssl req -subj "/CN=client" -new -key local-key.pem -out local.csr
[root@ct TLS]# ls
ca-key.pem ca.pem ca.srl ct-cert.pem ct.csr ct-key.pem local.csr local-key.pem
創建配置文件,指定擴展密鑰用途
[root@ct TLS]# echo extendedKeyUsage=clientAuth > extfile.cnf
簽名證書
[root@ct TLS]# openssl x509 -req -days 1000 -sha256 -in local.csr -CA ca.pem -CAkey ca-key.pem -CAcreateserial -out local-cert.pem -extfile extfile.cnf
Signature ok
subject=/CN=client
Getting CA Private Key
Enter pass phrase for ca-key.pem:
查看當前文件
root@ct TLS]# ls
ca-key.pem ca.pem ca.srl ct-cert.pem ct.csr ct-key.pem extfile.cnf local-cert.pem local.csr local-key.pem
9.7 刪除不需要的文件
刪除簽名文件,配置文件
[root@ct TLS]# rm -rf ca.srl ct.csr extfile.cnf local.csr
[root@ct TLS]# ls
ca-key.pem ca.pem ct-cert.pem ct-key.pem local-cert.pem local-key.pem
9.8 ct節點配置docker.service
新增指定 --tlsverify
–tlscacert=/root/TLS/ca.pem
–tlscert=/root/TLS/ct-cert.pem
–tlskey=/root/TLS/ct-key.pem
-H tcp://0.0.0.0:2376
-H unix:///var/run/docker.sock
[root@ct TLS]# vim /usr/lib/systemd/system/docker.service
14 ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock --tlsverify --tlscacert=/root/TLS/ca.pem --tlscert=/root/TLS/ct-cert.pem --tlskey=/root/TLS/ct-key.pem -H tcp://0.0.0.0:2376 -H unix:///var/run/docker.sock
[root@ct TLS]# systemctl daemon-reload
[root@ct TLS]# systemctl restart docker
[root@ct TLS]# netstat -natp | grep docker
tcp6 0 0 :::2376 :::* LISTEN 55402/dockerd
[root@ct TLS]# setenforce 0
setenforce: SELinux is disabled
本地驗證
[root@ct TLS]# docker --tlsverify --tlscacert=ca.pem --tlskey=ct-key.pem --tlscert=ct-cert.pem -H tcp://ct:2376 images
REPOSITORY TAG IMAGE ID CREATED SIZE
systemctl new a2c3616f15d1 5 days ago 717MB
9.9 scp將local節點所需文件scp過去
[root@ct TLS]# scp ca.pem [email protected]:/etc/docker
[email protected]'s password:
ca.pem 100% 1765 464.9KB/s 00:00
[root@ct TLS]# scp local* [email protected]:/etc/docker
[email protected]'s password:
local-cert.pem 100% 1696 275.4KB/s 00:00
local-key.pem 100% 3243 989.6KB/s 00:00
[root@ct TLS]#
9.10 local節點指定加密文件遠程調用測試
[root@localhost ~]# cd /etc/docker/
[root@localhost docker]# ls
ca.pem key.json local-cert.pem local-key.pem
[root@localhost docker]# docker --tlsverify --tlscacert=ca.pem --tlscert=local-cert.pem --tlskey=local-key.pem -H tcp://192.168.247.20:2376 ps
error during connect: Get https://192.168.247.20:2376/v1.40/containers/json: dial tcp 192.168.247.20:2376: connect: no route to host
出現報錯,ct清空iptables
[root@ct TLS]# iptables -F
[root@ct TLS]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
systemctl new a2c3616f15d1 5 days ago 717MB
再次測試,出現如下報錯
[root@localhost docker]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
[root@localhost docker]# docker --tlsverify --tlscacert=ca.pem --tlscert=local-cert.pem --tlskey=local-key.pem -H tcp://192.168.247.20:2376 ps
error during connect: Get https://192.168.247.20:2376/v1.40/containers/json: x509: cannot validate certificate for 192.168.247.20 because it doesn't contain any IP SANs
#獲取https://192.168.247.20:2376/v1.40/containers/json: x509:無法驗證192.168.247.20的證書,因爲它不包含任何IP SANs
使用主機名可以正常訪問
[root@localhost docker]# docker --tlsverify --tlscacert=ca.pem --tlscert=local-cert.pem --tlskey=local-key.pem -H tcp://ct:2376 ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
[root@localhost docker]# docker --tlsverify --tlscacert=ca.pem --tlscert=local-cert.pem --tlskey=local-key.pem -H tcp://ct:2376 images
REPOSITORY TAG IMAGE ID CREATED SIZE
systemctl new a2c3616f15d1 5 days ago 717MB
十:dockerfile、compose創建容器注意要點
2016 年的 8 月 Github 上大量泄露個人或企業各種賬號密碼,出現這種問題一般都使用 dockerfile 或者 docker-compose 文件創建容器。
如果這些文件中存在賬號密碼等認證信息, 一旦 Docker 容器對外開放,則這些宿主機上的敏感信息也會隨之泄露。
因此可以通過以下 方式檢查容器創建模板的內容。
# check created users
grep authorized_keys $dockerfile
# check OS users
grep "etc/group" $dockerfile
# Check sudo users
grep "etc/sudoers.d" $dockerfile
# Check ssh key pair
grep ".ssh/.*id_rsa" $dockerfile
# Add your checks in below