sock 文件方式控制宿主机_浅析Docker运行安全
語法:
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
二、 Docker 運(yùn)行安全相關(guān)參數(shù)
2.1 啟用 AppArmor
AppArmor 主要的作用是設(shè)置某個(gè)可執(zhí)行程序的訪問控制權(quán)限,可以限制程序 讀/寫某個(gè)目錄/文件,打開/讀/寫網(wǎng)絡(luò)端口等等。
Apparmor 的配置文件保存在/etc/apparmor.d/containers/目錄下
配置文件使用官方文檔下的 Nginx 配置實(shí)例,見https://docs.docker.com/engine/security/apparmor/
加載一個(gè)新的配置文件
$ sudo apparmor_parser -r -W /etc/apparmor.d/containers/docker-nginx
上傳新的配置文件
$ apparmor_parser -R /path/to/profile
在 Docker 里使用 AppArmor
$ docker run --security-opt "apparmor=docker-nginx" -p 80:80 -d --name apparmor-nginx nginx
2.2 啟用 SELinux
配置步驟
在宿主機(jī)上啟用 SELinux,Docker 守護(hù)進(jìn)程啟用 SELinux,默認(rèn)啟動(dòng)容器就開啟了 SELinux
[root@localhost selinux]#
sestatusSELinux status:
enabledSELinuxfs mount:
/sys/fs/selinuxSELinux root directory:
/etc/selinuxLoaded policy name:
targetedCurrent mode: enforcingMode from config file:
enforcingPolicy MLS status:
enabledPolicy deny_unknown status:
allowedMax kernel policy version:
31[root@localhost selinux]# docker info...init version: fec3683Security Options:seccompWARNING:
You're not using the default seccomp profileProfile:
/etc/docker/seccomp/default-no-chmod.jsonselinuxusernsKernel Version:
3.10.0-1062.12.1.el7.x86_64...
測(cè)試,掛載宿主機(jī)/目錄到容器的/hacking目錄
[root@localhost selinux]# docker run -it --rm -v
/:/hacking centos:latest /bin/shsha256:fe8d824220415eed5477b63addf40fb06c3b049404242b31982106ac204f6700Status:
Downloaded newer image for centos:latestsh-4.4# cd /sh-4.4# lsbin dev etc hacking home lib lib64 lost+found media mnt opt proc root run sbin srv sys tmp usr varsh-4.4# cd hacking/sh-4.4# lsbin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr varsh-4.4# cd var/logsh-4.4# lsls: cannot open directory '.': Permission denied
運(yùn)行參數(shù)可以選擇 SELinux 的級(jí)別,標(biāo)簽包含 4 個(gè)部分User:Role:Type:level,可以設(shè)置 SELinux 不同的標(biāo)簽設(shè)定運(yùn)行級(jí)別。
docker run --security-opt label=type:spc_t replicated
docker run --interactive --tty --security-opt label=level:TopSecret centos /bin/bas
docker run -it --security-opt label:disable alpine sh
標(biāo)簽
[root@localhost ~]# ls /etc/selinux/targeted/contexts/files/file_contexts file_contexts.homedirs file_contexts.subs mediafile_contexts.bin file_contexts.homedirs.bin file_contexts.subs_dist[root@localhost ~]# cat /etc/selinux/targeted/contexts/files/file_contexts
2.3 限制運(yùn)行容器的內(nèi)核功能
Linux內(nèi)核能夠?qū)oot用戶的特權(quán)分解為稱為功能的不同單元。例如,CAP_CHOWN功能允許root用戶對(duì)文件UID和GID進(jìn)行任意更改。CAP_DAC_OVERRIDE功能允許root用戶繞過文件讀取,寫入和執(zhí)行操作的內(nèi)核權(quán)限檢查。與Linux root用戶相關(guān)的幾乎所有特殊功能都分解為單獨(dú)的功能。
更細(xì)粒度的功能限制可以:
從 root 用戶帳戶中刪除單個(gè)功能,使其功能/危險(xiǎn)性降低。
以非常精細(xì)的級(jí)別向非root用戶添加特權(quán)。
功能適用于文件和線程。文件功能允許用戶以更高的特權(quán)執(zhí)行程序。這類似于setuid位的工作方式。線程功能跟蹤正在運(yùn)行的程序中功能的當(dāng)前狀態(tài)。
默認(rèn)情況下,Docker使用白名單方法刪除除所需功能之外的所有功能。
啟動(dòng)命令
docker run --rm -it --cap-drop $CAP alpine sh
docker run --rm -it --cap-add $CAP alpine sh
docker run --rm -it --cap-drop ALL --cap-add $CAP alpine sh
$CAP 包含http://man7.org/linux/man-pages/man7/capabilities.7.html,在 Linux 接近40項(xiàng)的 Capabilities 中,Docker為了確保容器的安全,僅僅支持了其中的14項(xiàng)基本的 Capabilities:CAP_CHOWN、CAP_DAC_OVERRIDE、CAP_FSETID、CAP_MKNOD、FOWNER、NET_RAW、SETGID、SETUID、SETFCAP、SETPCAP、NET_BIND_SERVICE、SYS_CHROOT、KILL和AUDIT_WRITE。
測(cè)試命令
$ docker container run --rm -it alpine chown nobody /
$ docker container run --rm -it --cap-drop ALL --cap-add CHOWN alpine chown nobody /
$ docker container run --rm -it --cap-drop CHOWN alpine chown nobody /
$ docker container run --rm -it --cap-add chown -u nobody alpine chown nobody /
2.4 不使用特權(quán)模式運(yùn)行容器
特權(quán)模式參數(shù)—privileged,運(yùn)行特權(quán)容器時(shí)允許容器內(nèi)用戶直接訪問宿主機(jī)的資源,因此通過濫用特權(quán)容器,攻擊者可以獲取宿主機(jī)資源的訪問權(quán)限。特權(quán)容器產(chǎn)生后,由于增強(qiáng)權(quán)限的許多,攻擊者可能會(huì)以root權(quán)限運(yùn)行代碼。這表明攻擊者可以以root權(quán)限運(yùn)行主機(jī),包括CAP_SYS_ADMIN。
攻擊者在獲取了暴露的特權(quán)容器訪問權(quán)限后,就可以進(jìn)一步發(fā)起很多攻擊活動(dòng)。攻擊者可以識(shí)別出主機(jī)上運(yùn)行的軟件,并找出和利用相關(guān)漏洞。還可以利用容器軟件漏洞或錯(cuò)誤配置,比如使用弱憑證或沒有認(rèn)證的容器。由于攻擊者有root訪問權(quán)限,因此惡意代碼或挖礦機(jī)都可以執(zhí)行并有效地隱藏。
測(cè)試
創(chuàng)建容器:
docker run -d -name centos7 --privileged=true centos:7 /usr/sbin/init
進(jìn)入容器:
docker exec -it centos7 /bin/bash
2.5 限制容器獲取新的特權(quán),使用—security-opt=no-new-privileges
含義如下:
進(jìn)程可以在內(nèi)核中設(shè)置no_new_privs位,該位在fork,clone和exec之間持續(xù)存在。 no_new_privs位可確保該進(jìn)程或其子進(jìn)程不會(huì)獲得任何其他特權(quán)。 設(shè)置no_new_privs位后,該進(jìn)程將無法取消設(shè)置。 即使進(jìn)程使用設(shè)置了文件功能位的setuid二進(jìn)制文件或可執(zhí)行文件執(zhí)行,也不允許帶有no_new_privs的進(jìn)程更改uid / gid或獲得任何其他功能。 no_new_privs還可以防止SELinux之類的Linux安全模塊(LSM)過渡到不允許訪問當(dāng)前進(jìn)程的進(jìn)程標(biāo)簽。這意味著SELinux進(jìn)程僅允許轉(zhuǎn)換為具有較少特權(quán)的進(jìn)程類型。
testnnp.c,打印 uid 信息
#include #include #include
int main(int argc, char *argv[]){ printf("Effective uid: %d\n", geteuid()); return 0;}
編譯
[root@localhost ~]# make testnnpcc testnnp.c -o testnnp
制作鏡像,dockerfile
FROM fedora:latestADD testnnp /root/testnnpRUN chmod +s /root/testnnpENTRYPOINT /root/testnn
制作測(cè)試鏡像
[root@localhost ~]# docker build -t testnnp .
測(cè)試
# docker run -it --rm --user=1000 testnnp
使用no-new-privileges
# docker run -it --rm --user=1000 --security-opt=no-new-privileges testnnp
2.6 使用 cgroup 確保容器在定義的 cgroup 中運(yùn)行
不使用—cgroup-parent選項(xiàng) ,控制組 CGroups 是 Linux 內(nèi)核的另一個(gè)重要特性,主要用來實(shí)現(xiàn)對(duì)資源的限制和審計(jì)等.
控制組(cgroup)是Linux內(nèi)核的一項(xiàng)功能,可讓您限制訪問進(jìn)程和容器對(duì)系統(tǒng)資源(如CPU,RAM,IOPS和網(wǎng)絡(luò))的訪問權(quán)限。
$ docker run -d –name='low_prio' –cpuset-cpus=0 –cpu-shares=20 busybox md5sum /dev/urandom
2.7 啟用 seccomp
前面講 docker 守護(hù)進(jìn)程安全時(shí),說過 seccomp 是組內(nèi)核安全策略,不同的策略有不同的名稱,可以在 docker 運(yùn)行時(shí)指定使用的安全策略,而不是使用 docker 守護(hù)進(jìn)程設(shè)置的默認(rèn)策略。seccomp=unconfined表示不啟用 seccomp,下面是不建議的啟動(dòng)命令。
$ docker container run --rm -it --security-opt seccomp=unconfined debian:jessie sh
指定 sccomp
$ docker run --rm -it --security-opt seccomp=default-no-chmod.json alpine sh
2.8 運(yùn)行容器不掛載主機(jī)的系統(tǒng)分區(qū)
包括:
/ /boot /dev /etc /lib /proc /sys /usr
2.9 容器根目錄以只讀方式掛載—read-only
使用—read-only會(huì)限制運(yùn)行容器的跟目錄為只讀
[root@localhost ~]# docker run -it --read-only 72300a873c2c /bin/bashroot@f077b480dbe5:/# ls bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var root@f077b480dbe5:/# touch 111touch: cannot touch '111': Read-only file system
如果需要掛載的目錄有讀寫權(quán)限可以使用更細(xì)的權(quán)限控制,如掛載特定目錄有讀寫權(quán)限。
docker run --interactive --tty --read-only -v /opt/app/data:/run/app/data:rw centos /bin/bash
2.10 不掛載宿主機(jī)的docker.sock到任何容器
安裝Docker之后,Docker守護(hù)進(jìn)程會(huì)監(jiān)聽Unix域套接字:/var/run/docker.sock。
下面的命令用于運(yùn)行容器,并采用交互模式(interactive mode,該模式下會(huì)直接進(jìn)入容器內(nèi)),同時(shí)綁定docker.sock。
# docker run -v /var/run/docker.sock:/var/run/docker.sock -ti alpine sh
綁定Docker套接字之后,容器的權(quán)限會(huì)很高,可以控制Docker守護(hù)進(jìn)程。
2.11 不使用共享的掛載傳播模式
不使用—volume=/hostPath:/containerPath:shared的配置
# docker run --volume=/hostPath:/containerPath:shared
2.12 不要直接掛載主機(jī)設(shè)備,如果需要,設(shè)置成只讀
避免容器內(nèi)用戶直接修改設(shè)備信息。
docker run --interactive --tty --device=/dev/tty0:/dev/tty0:rw --device=/dev/temp_sda:/dev/temp_sda:r centos bash
2.13 on-failure容器重啟策略設(shè)置為 5
通過在docker run命令中使用—restart標(biāo)志,您可以指定重啟策略,以指定容器在啟動(dòng)失敗時(shí)應(yīng)如何重啟。您應(yīng)該選擇onfailure重新啟動(dòng)策略,并將重新啟動(dòng)嘗試限制為5次。
如果無限期地嘗試啟動(dòng)容器,則可能導(dǎo)致宿主機(jī)上的拒絕服務(wù),尤其是在同一主機(jī)上有多個(gè)容器的情況下。此外,忽略容器的退出狀態(tài)并始終嘗試重新啟動(dòng)容器,會(huì)導(dǎo)致無法調(diào)查導(dǎo)致容器終止的根本原因。如果某個(gè)容器被終止,則應(yīng)調(diào)查其背后的原因,而不僅僅是嘗試無限期地重新啟動(dòng)它。應(yīng)該使用失敗時(shí)重新啟動(dòng)策略將容器重新啟動(dòng)的次數(shù)限制為最多5次嘗試。
docker run --detach --restart=on-failure:5 nginx
2.14 不使用網(wǎng)絡(luò)空間共享
—net=hostHost模式并沒有為容器創(chuàng)建一個(gè)隔離的網(wǎng)絡(luò)環(huán)境,該模式下的 Docker 容器會(huì)和 host 宿主機(jī)共享同一個(gè)網(wǎng)絡(luò) namespace,所以容器可以和宿主機(jī)一樣,使用宿主機(jī)的eth0,實(shí)現(xiàn)和外界的通信,特點(diǎn):
這種模式下的容器沒有隔離的network namespace 容器的 IP 地址同 Docker主機(jī)的 IP 地址 要注意容器中服務(wù)的端口號(hào)不能與Docker主機(jī)上已經(jīng)使用的端口號(hào)相沖突 host模式能夠和其它模式共存
2.15 主機(jī)進(jìn)程命名空間不共享,禁用—pid=host
默認(rèn)下,所有的容器都啟用了PID命名空間。PID命名空間提供了進(jìn)程的分離。PID命名空間刪除系統(tǒng)進(jìn)程視圖,允許進(jìn)程ID可重用,包括pid 1。
在一些情況下需要容器共享主機(jī)進(jìn)程命名空間,基本上允許容器內(nèi)的進(jìn)程可以查看主機(jī)的所有進(jìn)程。例如,構(gòu)建了一個(gè)帶調(diào)試工具容器,想在容器使用這些工具來調(diào)試主機(jī)的進(jìn)程。
如果使用—pid=host參數(shù),容器可以直接操作宿主機(jī)上的數(shù)據(jù)。如果 dockerd 守護(hù)進(jìn)程設(shè)置了用戶命名空間映射,運(yùn)行容器時(shí)使用該參數(shù)會(huì)導(dǎo)致啟動(dòng)失敗。
docker run --interactive --tty --pid=host centos /bin/bash
2.16 主機(jī) IPC 命名空間不共享,禁用--ipc=host
進(jìn)程與單個(gè)”管理程”進(jìn)程共享內(nèi)存,以便交換數(shù)據(jù)( 通過使用共享緩沖區(qū)) 。這個(gè)解決方案是為了性能需求實(shí)現(xiàn)的。 --ipc=MODE:設(shè)置容器的IPC模式,shareable自己的私有IPC名稱空間,可以與其他容器共享。host:使用主機(jī)系統(tǒng)的IPC名稱空間。
禁止使用host模式,下面是錯(cuò)誤的示例:
docker run --interactive --tty --ipc=host centos /bin/bash
可以與其他容器使用共享 IPC
docker run --ipc=container:docker run -d --ipc=shareable data-serverdocker run -d --ipc=container:data-server data-client
2.17 不共享主機(jī) UTS 命名空間,禁用—uts=host
UTS命名空間用于設(shè)置主機(jī)名和對(duì)該命名空間中正在運(yùn)行的進(jìn)程可見的域。默認(rèn)下,所有的容器,包括那么以—network=host運(yùn)行的容器,有它們自己的UTS命名空間。設(shè)置UTS為host將使容器使用與主機(jī)相同的UTS命名空間。注意—hostname在host UTS模式是無效的。
當(dāng)你想在主機(jī)更改hostname之后,同時(shí)也更改同樣的hostname到容器。
2.18 不共享主機(jī)用戶命名空間,禁用—users=host
默認(rèn)情況下,Docker守護(hù)程序以root身份運(yùn)行。這使守護(hù)程序可以創(chuàng)建并使用啟動(dòng)容器所需的內(nèi)核結(jié)構(gòu)。但是,它也存在潛在的安全風(fēng)險(xiǎn)。
默認(rèn)的容器以 root 賬號(hào)運(yùn)行
# docker run --rm alpine id
# docker run --rm --user 1000:1000 alpine id
# docker run --rm --privileged --userns=host alpine id
2.19 限制容器運(yùn)行時(shí)占用內(nèi)存和 CPU
常用于限制 CPU 和內(nèi)存的參數(shù)
-c —cpu-shares參數(shù)只能限制容器使用 CPU 的比例 —cpus后面跟著一個(gè)浮點(diǎn)數(shù),代表容器最多使用的核數(shù),可以精確到小數(shù)點(diǎn)二位,也就是說容器最小可以使用 0.01 核 CPU -m —memory:容器能使用的最大內(nèi)存大小,最小值為 4m —memory-swap:容器能夠使用的 swap 大小
2.20 必要時(shí) Docker 運(yùn)行覆蓋默認(rèn)的ulimit
docker 守護(hù)進(jìn)程可以配置默認(rèn)的限制,必要時(shí)可以使用 docker run 命令覆蓋的默認(rèn)
# docker run --ulimit nofile=1024:1024 --interactive --tty centos /bin/bash
2.21 使用—pids-limit限制指定時(shí)間內(nèi)生成的進(jìn)程數(shù)
使用PID cgroup參數(shù)—pids-limit可以通過限制在指定時(shí)間范圍內(nèi)容器內(nèi)部可能創(chuàng)建的進(jìn)程數(shù)量來防止邏輯**類的攻擊。
# docker run -it --pids-limit 100
2.22 運(yùn)行時(shí)檢查容器運(yùn)行狀態(tài),使用—health-cmd參數(shù)
用于檢查容器的運(yùn)行狀態(tài)
# docker run -d --name db --health-cmd "curl --fail http://localhost:8091/pools || exit 1" --health-interval=5s --timeout=3s arungupta/couchbase
2.23 傳入容器的流量綁定特定的宿主機(jī)端口
指定映射到宿主機(jī)上特定網(wǎng)絡(luò)端口:
docker run --detach --publish 10.2.3.4:49153:80 nginx
2.24 不使用 docker 默認(rèn)的橋接網(wǎng)絡(luò) docker0
Docker將以橋接模式創(chuàng)建的虛擬接口連接到名為docker0的通用橋接。此默認(rèn)網(wǎng)絡(luò)模型容易受到ARP欺騙和MAC泛洪攻擊,因?yàn)闆]有對(duì)其應(yīng)用過濾。
實(shí)際網(wǎng)絡(luò)通常以編排系統(tǒng)的網(wǎng)絡(luò)進(jìn)行配置。
2.25 使用大于 1024 的端口,容器只映射必須使用的端口
低于 1024 的端口通常用于系統(tǒng)服務(wù),使用低于 1024 的端口可能與宿主機(jī)服務(wù)產(chǎn)生沖突,80 和 443 除外,容器服務(wù)對(duì)外映射端口應(yīng)該只映射必須開放的端口。
2.26 確保Docker命令始終使用其映像的最新版本
使用最新版本的鏡像避免引入漏洞。
2.27 使用最小化的容器,確保不包含多余的組件或服務(wù)
如 SSH、Telnet 或者其他不需要的組件或服務(wù)。
2.28 docker exec 命令不使用—privileged選項(xiàng)
在docker exec命令中使用—privileged選項(xiàng)可為命令提供擴(kuò)展的Linux功能。
2.29 docker exec 命令不使用—user=root選項(xiàng)
在docker exec命令中使用—user=root選項(xiàng),會(huì)以root用戶身份在容器內(nèi)執(zhí)行命令。例如,如果容器以tomcat用戶(或任何其他非root用戶)身份運(yùn)行,則可以使用—user=root選項(xiàng)通過docker exec以root身份運(yùn)行命令。
三、其他參數(shù)說明
[OPTIONS]參數(shù)說明:
—add-host list
添加自定義主機(jī)到ip映射(書寫格式為:主機(jī):ip)
-a, —attach list
附加到STDIN、STDOUT或STDERR上
—blkio-weight uint16
Block IO (相對(duì)權(quán)重),取值10到1000之間,0為禁用(默認(rèn)0)
—blkio-weight-device list
Block IO weight (相對(duì)于設(shè)備的權(quán)重) (默認(rèn)為數(shù)組的形式)
—cap-add list
添加Linux功能
—cap-drop list
刪除Linux功能
—cgroup-parent string
容器的可選父級(jí)對(duì)照組項(xiàng)
—cidfile string
將容器ID寫入文件
—cpu-period int
限制CPU CFS(完全公平調(diào)度程序)周期
—cpu-quota int
限制CPU CFS(完全公平的調(diào)度程序)上限
—cpu-rt-period int
限制CPU運(yùn)行時(shí)周期(以微秒為單位)
—cpu-rt-runtime int
限制CPU實(shí)時(shí)運(yùn)行時(shí)間(以微秒為單位)
-c, —cpu-shares int
CPU 共享 (相對(duì)權(quán)重的設(shè)定)
—cpus decimal
設(shè)定cpu的數(shù)量
—cpuset-cpus string
允許執(zhí)行的cpu (0-3,0,1)
—cpuset-mems string
允許執(zhí)行的MEMs (0-3,0,1)
-d, —detach
在后臺(tái)運(yùn)行容器并打印容器ID
—detach-keys string
覆蓋分離容器的鍵序列
—device list
向容器添加主機(jī)設(shè)備
—device-cgroup-rule list
向 cgroup 允許的設(shè)備列表中添加一個(gè)或多個(gè)規(guī)則
—device-read-bps list
限定設(shè)備的讀取速率(單位: byte/s)(默認(rèn)為 [])
—device-read-iops list
限定設(shè)備的讀取速率(單位:IO/s)(默認(rèn)為 [])
—device-write-bps list
限定設(shè)備的寫入速率(單位: byte/s)(默認(rèn)為 [])
—device-write-iops list
限定設(shè)備的寫入速率(單位:IO/s)(默認(rèn)為 [])
—disable-content-trust
跳過鏡像驗(yàn)證(默認(rèn)為 true)
—dns list
設(shè)置自定義DNS服務(wù)器
—dns-option list
設(shè)置DNS選項(xiàng)
—dns-search list
設(shè)置自定義的DNS搜索域
—entrypoint string
覆蓋鏡像的默認(rèn)入口點(diǎn)
-e, —env list
設(shè)置環(huán)境變量
—env-file list
讀取環(huán)境變量?jī)?nèi)容
—expose list
公開一個(gè)端口或多個(gè)端口
—group-add list
添加其他要加入的組
—health-cmd string
命令運(yùn)行以檢查健康
—health-interval duration
運(yùn)行檢查之間的時(shí)間(ms
—health-retries int
連續(xù)的失敗需要報(bào)告不健康
—health-start-period duration
啟動(dòng)健康重試倒計(jì)時(shí)前容器初始化的啟動(dòng)周期(ms
—health-timeout duration
健康檢查運(yùn)行情況的最大時(shí)間值 格式為:(ms
—help
打印出使用情況
-h, —hostname string
定義容器主機(jī)名
—init
在容器中運(yùn)行初始化,以轉(zhuǎn)發(fā)信號(hào)并獲取進(jìn)程
-i, —interactive
即使沒有連接,也保持STDIN開放
—ip string
設(shè)定容器的 IPv4 地址 (例如,192.168.155.139)
—ip6 string
設(shè)定IPv6地址(例如,2001:db8::33)
—ipc string
使用IPC模式
—isolation string
容器隔離技術(shù)
—kernel-memory bytes
內(nèi)核內(nèi)存限制
-l, —label list
在容器上設(shè)置元數(shù)據(jù)
—label-file list
在以行分隔的標(biāo)簽文件中讀取
—link list
向另一個(gè)容器添加鏈接
—link-local-ip list
容器 IPv4/IPv6 鏈接本地地址
—log-driver string
設(shè)定容器的日志驅(qū)動(dòng)
—log-opt list
設(shè)定日志驅(qū)動(dòng)器選項(xiàng)
—mac-address string
配置容器MAC地址(例如,92:d0:c6:0a:29:33)
-m, —memory bytes
設(shè)定內(nèi)存限額
—memory-reservation bytes
內(nèi)存軟限制
—memory-swap bytes
交換限制等于內(nèi)存加上交換:’-1’,以啟用無限交換
—memory-swappiness int
優(yōu)化容器內(nèi)存交換 (0 到 100) (默認(rèn)為 -1)
—mount mount
將文件系統(tǒng)掛載附加到容器
—name string
為容器指定一個(gè)名稱
—network string
將容器連接到網(wǎng)絡(luò)
—network-alias list
為容器連接的網(wǎng)絡(luò)添加別名
—no-healthcheck
禁止任何容器指定 HEALTHCHECK
—oom-kill-disable
禁止OOM事件被殺死
—oom-score-adj int
優(yōu)化主機(jī)的OOM事件 ,參數(shù)范圍 (-1000 到 1000)
—pid string
設(shè)定PID命名
—pids-limit int
優(yōu)化容器pid限制(如果設(shè)置-1則為無限制)
—privileged
賦予容器擴(kuò)展的權(quán)限
-p, —publish list
將容器的端口發(fā)布到主機(jī)
-P, —publish-all
將所有公開的端口發(fā)布到隨機(jī)端口
—read-only
將容器的根文件系統(tǒng)掛載為只讀(后面會(huì)詳細(xì)講到)
—restart string
配置容器的重啟策略,當(dāng)容器退出時(shí)重新啟動(dòng)(默認(rèn)為“no”)
—rm
當(dāng)容器退出時(shí)自動(dòng)移除這個(gè)容器
—runtime string
使用容器的運(yùn)行時(shí)
—security-opt list
指定docker啟動(dòng)的安全項(xiàng)
—shm-size bytes
/dev/shm 的大小(這個(gè)可以使其容量進(jìn)行動(dòng)態(tài)的擴(kuò)展)
—sig-proxy
設(shè)置代理接收京城信號(hào) (默認(rèn)為 true)
—stop-signal string
停止容器的信號(hào) (默認(rèn)為 “SIGTERM”)
—stop-timeout int
設(shè)置超時(shí)停止容器(以秒為單位)
—storage-opt list
設(shè)定容器的存儲(chǔ)驅(qū)動(dòng)程序選項(xiàng)
—sysctl map
指定系統(tǒng)控制項(xiàng) (默認(rèn)為 map[] 的格式)
—tmpfs list
掛載tmpfs目錄
-t, —tty
為當(dāng)前容器分配一個(gè)客戶端
—ulimit ulimit
啟動(dòng)需要限制的項(xiàng)(默認(rèn)為數(shù)組的形式)
-u, —user string
用戶名或UID(格式為:
—userns string
使用用戶名稱空間
—uts string
使用UTS名稱空間
-v, —volume list
綁定安裝卷(關(guān)于容器卷,在Docker容器數(shù)據(jù)卷中會(huì)具體的講解)
—volume-driver string
容器的可選卷驅(qū)動(dòng)程序
—volumes-from list
指定容器裝載卷
-w, —workdir string
容器內(nèi)的工作目錄
參考
https://www.mf8.biz/ubuntu-apparmor-openresty/
https://docs.docker.com/engine/security/apparmor/
https://www.4hou.com/posts/4YP2
https://www.freebuf.com/articles/system/201793.html
總結(jié)
以上是生活随笔為你收集整理的sock 文件方式控制宿主机_浅析Docker运行安全的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 移除添加的文件_文件压缩教程-文件批量压
- 下一篇: pwm一个时间单位_详解STM32的PW