国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務器之家:專注于服務器技術及軟件下載分享
分類導航

云服務器|WEB服務器|FTP服務器|郵件服務器|虛擬主機|服務器安全|DNS服務器|服務器知識|Nginx|IIS|Tomcat|

服務器之家 - 服務器技術 - 服務器知識 - Docker守護進程安全配置項目詳解

Docker守護進程安全配置項目詳解

2021-04-24 20:47FreeBuf 服務器知識

這篇文章主要介紹了Docker守護進程安全配置介紹,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下

本文將為大家介紹docker守護進程的相關安全配置項目。

一、測試環境

 

1.1 安裝 centos 7

centos linux release 7.7.1908 (core)

升級內核,重啟

# yum update kernel
[root@localhost docker]# uname -a
linux localhost 3.10.0-1062.12.1.el7.x86_64 #1 smp tue feb 4 23:02:59 utc 2020 x86_64 x86_64 x86_64 gnu/linux
[root@localhost docker]# cat /etc/redhat-release
centos linux release 7.7.1908 (core)

1.2 安裝 docker ce 19.03

?
1
2
3
4
5
6
7
# yum install -y yum-utils device-mapper-persistent-data lvm2
# yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
 
# yum install -y docker-ce
 
[root@localhost docker]# docker --version
docker version 19.03.8, build afacb8b

二、 守護進程安全配置

 

默認沒有配置文件,需要單獨創建/etc/docker/daemon.json,下面配置都是在該文件上進行配置,本地的測試示例。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
{
 "icc": false,
 "log-level": "info",
 "log-driver": "json-file",
 "log-opts": {
 "max-size": "10m",
 "max-file":"5",
 "labels": "somelabel",
 "env": "os,customer"
 },
 "iptables": true,
 "userns-remap": "default",
 "userland-proxy": false,
 "experimental": false,
 "selinux-enabled": true,
 "live-restore": true,
 "no-new-privileges": true,
 "cgroup-parent": "/foobar",
 "seccomp-profile": "/etc/docker/seccomp/default-no-chmod.json",
 "tls": true,
 "tlsverify": true,
 "tlscacert": "/etc/docker/ca/ca.pem",
 "tlscert": "/etc/docker/ca/server-cert.pem",
 "tlskey": "/etc/docker/ca/server-key.pem"
}

2.1 配置通過 https 和證書認證訪問 docker 守護進程

服務器證書

創建 host,定義域(ip 也可以),會根據域來生成對應的證書,一般用于注冊證書當中的 cn:

創建證書目錄:

$ mkdir -p /etc/docker/dockerd/ca && cd /etc/docker/dockerd/ca

生成 key 證書,并填寫兩次 key 證書密碼:

$ openssl genrsa -aes256 -out ca-key.pem 4096

生成 ca 證書,需要輸入注冊證書基礎信息:

$ openssl req -new -x509 -days 365 -key ca-key.pem -sha256 -out ca.pem

創建 server 證書:

?
1
2
3
$ openssl genrsa -out server-key.pem 4096
 
$ openssl req -subj "/cn=localhsot" -sha256 -new -key server-key.pem -out server.csr

設定證書指定的 ip 地址:

$ echo subjectaltname = dns:localhost,ip:127.0.0.1 >> extfile.cnf

將 docker 守護程序密鑰的擴展使用屬性設置為僅用于服務器身份驗證:

$ echo extendedkeyusage = serverauth >> extfile.cnf

生成 server cert 證書:

$ openssl x509 -req -days 3650 -sha256 -in server.csr -ca ca.pem -cakey ca-key.pem -cacreateserial -out server-cert.pem -extfile extfile.cnf

客戶端證書

創建客戶端證書:(還是當前目錄)

?
1
2
$ openssl genrsa -out key.pem 4096
$ openssl req -subj '/cn=localhost' -new -key key.pem -out client.csr

要使密鑰適合客戶端身份驗證,請創建擴展配置文件:

$ echo extendedkeyusage = clientauth >> extfile.cnf

生成 client cert 證書:

$ openssl x509 -req -days 3650 -sha256 -in client.csr -ca ca.pem -cakey ca-key.pem -cacreateserial -out cert.pem -extfile extfile.cnf

使用

對證書賦予相應的權限:

?
1
2
3
4
5
$ chmod -v 0400 ca-key.pem key.pem server-key.pem
$ chmod -v 0444 ca.pem server-cert.pem cert.pem
 
[root@localhost ca]# ls
ca-key.pem ca.pem ca.srl cert.pem client.csr extfile.cnf key.pem server-cert.pem server.csr server-key.pem

服務端配置 /etc/docker/daemon.json

?
1
2
3
4
5
"tls": true,
"tlsverify": true,
"tlscacert": "/etc/docker/ca/ca.pem",
"tlscert": "/etc/docker/ca/server-cert.pem",
"tlskey": "/etc/docker/ca/server-key.pem"

客戶端配置

設置客戶端證書到當服務器上,并放置到相應的位置:

?
1
2
$ cp -v {ca,cert,key}.pem ~/.docker
$ export docker_host=tcp://$host:2376 docker_tls_verify=1

通過如下方式模擬測試:

?
1
2
3
4
5
6
$ curl https://$host:2376/images/json \
 --cert ~/.docker/cert.pem \
 --key ~/.docker/key.pem \
 --cacert ~/.docker/ca.pem
 
[{"containers":-1,"created":1540777343,"id":"sha256:55e7b305dc477345434ce3bd3941940481f982eea31c8f28c0670d59c63d544b","labels":nu

2.2 使用namespace隔離技術

namespace是一種隔離技術,docker就是使用隔離技術開啟特定的namespace創建出一些特殊的進程,不過使用namespace是有條件的。系統會創建dockremap,通過/etc/subuid和/etc/subuid對應的id值,映射到容器中去;實際情況還是使用的是dockremap普通權限,達到自動隔離的效果。

首先修改 /etc/sysctl.conf

# echo "user.max_user_namespaces=15076" >> /etc/sysctl.conf

/etc/docker/daemon.json 增加配置項 "userns-remap": "default"

修改此項配置需要慎重,如果是已經部署了一套docker環境,啟用此選項后,會切換到隔離環境,以前的docker容器將無法使用!

?
1
2
[root@localhost docker]# cat /etc/subuid
dockremap:100000:65536

2.3 設置 docker 的分區

為容器創建單獨的分區,默認分區在\var\lib\docker\,包含本地鏡像、容器、網絡等相關的東西。

[root@localhost docker]# ls /var/lib/docker

100000.100000  builder  buildkit  containers  image  network  overlay2  plugins  runtimes  swarm  tmp  trust  volumes
可以使用 "data-root": "" 配置默認的分區位置。

2.4 限制默認網橋容器之間的流量

當啟動 docker 服務時候,默認會添加一條轉發策略到 iptables 的 forward 鏈上。策略為通過( accept )還是禁止( drop ),取決于配置 --icc=true (缺省值)還是  --icc=false 。如果手動指定  --iptables=false 則不會添加 iptables 規則。

默認情況下,默認網橋上同一主機上的容器之間允許所有網絡通信,如果不需要,限制所有容器間的通信。 將需要通信的特定容器鏈接在一起,或者創建自定義網絡,并且僅加入需要與該自定義網絡進行通信的容器。

配置限制默認網橋上容器之間的流量 "icc":false

2.5 配置日志

配置集中的遠程日志,設置日志進程 --log-level 級別為 info ,日志記錄格式 json,本地日志記錄

?
1
2
3
4
5
6
7
8
"log-level": "info",
"log-driver": "json-file",
"log-opts": {
 "max-size": "10m",
 "max-file":"5",
 "labels": "somelabel",
 "env": "os,customer"
},

配置遠程日志

Docker守護進程安全配置項目詳解

docker 日志記錄驅動程序接收容器日志并將其轉發到遠程目標或文件。 默認的日志記錄驅動程序是json-file。 它將容器日志以json格式存儲在本地磁盤上。 docker具有用于記錄日志的插件體系結構,因此有用于開源工具和商業工具的插件:

journald–將容器日志存儲在系統日志中.
syslog driver–支持udp,tcp,tls
fluentd –支持將tcp或unix套接字連接到fluentd
splunk – http / https轉發到splunk服務器
gelf – udp日志轉發到graylog2

示例 fluent

?
1
2
3
4
5
6
{
 "log-driver": "fluentd",
 "log-opts": {
 "fluentd-address": "fluentdhost:24224"
 }
 }

使用 syslog

?
1
2
3
4
5
6
{
 "log-driver": "syslog",
 "log-opts": {
 "syslog-address": "udp://1.2.3.4:1111"
 }
}

2.6 設置 ulimit

?
1
2
3
4
5
6
7
8
9
{
 "default-ulimits": {
 "nofile": {
  "name": "nofile",
  "hard": 64000,
  "soft": 64000
 }
 }
}

2.7 設置 cgroup

--cgroup-parent 選項允許設置用于容器的默認cgroup父級。 如果未設置此選項,則對于fs cgroup驅動程序,默認為 /docker ;對于systemd cgroup驅動程序,默認為 system.slice 。

如果cgroup有一個正斜杠( / ),則cgroup在根cgroup下創建,否則cgroup在守護程序cgroup下創建。

假設守護程序在cgroup daemoncgroup中運行,則 --cgroup-parent=/foobar 在 /sys/fs/cgroup/memory/foobar 中創建一個cgroup,而使用 --cgroup-parent=foobar 則創建  /sys/fs/cgroup/memory/daemoncgroup/foobar 中創建 cgroup。

systemd cgroup驅動程序對–cgroup-parent具有不同的規則。 systemd按切片表示層次結構,切片的名稱對樹中的位置進行編碼。 因此,systemd cgroup的 --cgroup-parent 應為切片名稱。 名稱可以包含一系列用短劃線分隔的名稱,這些名稱描述了從根切片到切片的路徑。 例如, --cgroup-parent=user-a-b.slice 表示容器的內存cgroup在 /sys/fs/cgroup/memory/user.slice/user-a.slice/user-a-b.slice/docker-<id>.scope 中創建。

也可以使用容器運行來設置,使用docker create和docker run上的 --cgroup-parent 選項,會優先于守護程序上的 --cgroup-parent 選項。

2.8 配置 seccomp

使用的測試配置文件,禁止在 docker 里使用 chmod 命令

?
1
2
3
4
5
6
7
https://github.com/docker/labs/blob/master/security/seccomp/seccomp-profiles/default-no-chmod.json
[root@localhost docker]# docker run --rm -it alpine sh
/ # ls bin etc lib mnt proc run srv tmp var
dev home media opt root sbin sys usr / # touch foo.sh
/ # chmod +x foo.sh
chmod: foo.sh: operation not permitted
/ # exit

實際可以完成禁止、允許、告警某些系統相關的調用,參考:https://github.com/torvalds/linux/blob/master/arch/x86/entry/syscalls/syscall_64.tbl

2.9 配置支持無守護程序的容器

--live-restore 確保 docker 守護進程關閉時不影響容器。

測試時再關閉 docker 守護進程后,nginx 容器仍能正常提供訪問。

Docker守護進程安全配置項目詳解

2.10 禁用 docker 的實驗性功能

設置 "experimental": false

2.11 限制容器通過 suid 或 sgid 提權

no-new-privileges 安全選項可防止容器內的應用程序進程在執行期間獲得新的特權。

舉例:有一個在映像中設置了 setuid/setgid 位的程序,例如sudo,容器中的進程也具有執行該程序的(文件)權限,試圖通過諸如setuid/setgid之類的設施獲取特權的任何操作將被拒絕。

三、守護進程配置示例說明(linux)

 

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
{
 "authorization-plugins": [],//訪問授權插件
 "data-root": "",//docker數據持久化存儲的根目錄,默認為/var/lib/docker
 "dns": [],//dns服務器
 "dns-opts": [],//dns配置選項,如端口等
 "dns-search": [],//dns搜索域名
 "exec-opts": [],//執行選項
 "exec-root": "",//執行狀態的文件的根目錄
 "experimental": false,//是否開啟試驗性特性
 "features": {},//啟用或禁用特定功能。如:{"buildkit": true}使buildkit成為默認的docker鏡像構建器。
 "storage-driver": "",//存儲驅動器類型
 "storage-opts": [],//存儲選項
 "labels": [],//鍵值對式標記docker元數據
 "live-restore": true,//dockerd掛掉是否保活容器(避免了docker服務異常而造成容器退出)
 "log-driver": "json-file",//容器日志的驅動器
 "log-opts": {
 "max-size": "10m",
 "max-file":"5",
 "labels": "somelabel",
 "env": "os,customer"
 },//容器日志的選項
 "mtu": 0,//設置容器網絡mtu(最大傳輸單元)
 "pidfile": "",//daemon pid文件的位置
 "cluster-store": "",//集群存儲系統的url
 "cluster-store-opts": {},//配置集群存儲
 "cluster-advertise": "",//對外的地址名稱
 "max-concurrent-downloads": 3,//設置每個pull進程的最大并發
 "max-concurrent-uploads": 5,//設置每個push進程的最大并發
 "default-shm-size": "64m",//設置默認共享內存的大小
 "shutdown-timeout": 15,//設置關閉的超時時限
 "debug": true,//開啟調試模式
 "hosts": [],//dockerd守護進程的監聽地址
 "log-level": "",//日志級別
 "tls": true,//開啟傳輸層安全協議tls
 "tlsverify": true,//開啟輸層安全協議并驗證遠程地址
 "tlscacert": "",//ca簽名文件路徑
 "tlscert": "",//tls證書文件路徑
 "tlskey": "",//tls密鑰文件路徑
 "swarm-default-advertise-addr": "",//swarm對外地址
 "api-cors-header": "",//設置cors(跨域資源共享-cross-origin resource sharing)頭
 "selinux-enabled": false,//開啟selinux(用戶、進程、應用、文件的強制訪問控制)
 "userns-remap": "",//給用戶命名空間設置 用戶/組
 "group": "",//docker所在組
 "cgroup-parent": "",//設置所有容器的cgroup的父類
 "default-ulimits": {
 "nofile": {
  "name": "nofile",
  "hard": 64000,
  "soft": 64000
 }
 },//設置所有容器的ulimit
 "init": false,//容器執行初始化,來轉發信號或控制(reap)進程
 "init-path": "/usr/libexec/docker-init",//docker-init文件的路徑
 "ipv6": false,//支持ipv6網絡
 "iptables": false,//開啟防火墻規則
 "ip-forward": false,//開啟net.ipv4.ip_forward
 "ip-masq": false,//開啟ip掩蔽(ip封包通過路由器或防火墻時重寫源ip地址或目的ip地址的技術)
 "userland-proxy": false,//用戶空間代理
 "userland-proxy-path": "/usr/libexec/docker-proxy",//用戶空間代理路徑
 "ip": "0.0.0.0",//默認ip
 "bridge": "",//將容器依附(attach)到橋接網絡上的橋標識
 "bip": "",//指定橋接ip
 "fixed-cidr": "",//(ipv4)子網劃分,即限制ip地址分配范圍,用以控制容器所屬網段實現容器間(同一主機或不同主機間)的網絡訪問
 "fixed-cidr-v6": "",//(ipv6)子網劃分
 "default-gateway": "",//默認網關
 "default-gateway-v6": "",//默認ipv6網關
 "icc": false,//容器間通信
 "raw-logs": false,//原始日志(無顏色、全時間戳)
 "allow-nondistributable-artifacts": [],//不對外分發的產品提交的registry倉庫
 "registry-mirrors": [],//registry倉庫鏡像加速地址
 "seccomp-profile": "",//seccomp配置文件
 "insecure-registries": [],//配置非https的registry地址
 "no-new-privileges": false,//禁止新優先級
 "default-runtime": "runc",//oci聯盟(the open container initiative)默認運行時環境
 "oom-score-adjust": -500,//內存溢出被殺死的優先級(-1000~1000)
 "node-generic-resources": ["nvidia-gpu=uuid1", "nvidia-gpu=uuid2"],//對外公布的資源節點
 "runtimes": {
 "cc-runtime": {
  "path": "/usr/bin/cc-runtime"
 },
 "custom": {
  "path": "/usr/local/bin/my-runc-replacement",
  "runtimeargs": [
  "--debug"
  ]
 }
 },//運行時
 "default-address-pools":[
 {"base":"172.80.0.0/16","size":24},//默認的dhcp分配地址
 {"base":"172.90.0.0/16","size":24}
 ]
}

總結

到此這篇關于docker守護進程安全配置項目詳解的文章就介紹到這了,更多相關docker守護進程內容請搜索服務器之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持服務器之家!

原文鏈接:https://www.freebuf.com/articles/es/230587.html

延伸 · 閱讀

精彩推薦
Weibo Article 1 Weibo Article 2 Weibo Article 3 Weibo Article 4 Weibo Article 5 Weibo Article 6 Weibo Article 7 Weibo Article 8 Weibo Article 9 Weibo Article 10 Weibo Article 11 Weibo Article 12 Weibo Article 13 Weibo Article 14 Weibo Article 15 Weibo Article 16 Weibo Article 17 Weibo Article 18 Weibo Article 19 Weibo Article 20 Weibo Article 21 Weibo Article 22 Weibo Article 23 Weibo Article 24 Weibo Article 25 Weibo Article 26 Weibo Article 27 Weibo Article 28 Weibo Article 29 Weibo Article 30 Weibo Article 31 Weibo Article 32 Weibo Article 33 Weibo Article 34 Weibo Article 35 Weibo Article 36 Weibo Article 37 Weibo Article 38 Weibo Article 39 Weibo Article 40
主站蜘蛛池模板: 日韩一区二区电影 | 日日操综合 | 国产精品久久久久无码av | 国产精品久久久久免费 | 日韩av高清 | 性欧美大战久久久久久久免费观看 | 亚洲精品国产综合99久久夜夜嗨 | 九九热精品国产 | 91丨九色丨国产 | 亚洲黄色在线视频 | 亚洲最大的黄色网 | 在线国产一区二区 | 欧美精品v国产精品v日韩精品 | 91高清视频 | 中文字幕在线影院 | 午夜日韩 | 香蕉久久av一区二区三区 | 欧美精品一区二区三区在线 | 亚洲第一成av人网站懂色 | 日韩成年网站 | 日日操狠狠操 | 1a级毛片免费观看 | www.国产区 | 亚洲欧美一区二区三区国产精品 | 国产精品久久久久国产a级 成人a在线视频 | 国产精品久久久久久久久久久久冷 | 国产精品久久久久久久久久久免费看 | 一区二区三区免费在线 | 国产激情视频 | 日本综合久久 | 日韩在线观看中文字幕 | 免费观看一区二区三区毛片 | jizzhd中国 | 亚洲一区久久 | 亚洲欧洲精品成人久久奇米网 | 欧美日韩一区二区三区 | 日韩精品二区 | 久久免费国产 | 精品一二三区 | 午夜激情视频在线 | 欧美国产91 |