?
This document uses PHP Chinese website manual Release
安全計算模式(seccomp
)是Linux內(nèi)核功能。您可以使用它來限制容器內(nèi)可用的操作。該seccomp()
系統(tǒng)調(diào)用在調(diào)用進程的狀態(tài)的Seccomp工作。您可以使用此功能來限制您的應用程序的訪問權(quán)限。
只有在Docker已經(jīng)構(gòu)建seccomp
并且內(nèi)核配置為CONFIG_SECCOMP
啟用的情況下,此功能才可用。檢查你的內(nèi)核是否支持seccomp
:
$ cat /boot/config-`uname -r` | grep CONFIG_SECCOMP=CONFIG_SECCOMP=y
注意:
seccomp
配置文件需要seccomp 2.2.1,并且只能從Debian 9“Stretch”,Ubuntu 16.04“Xenial”,F(xiàn)edora 22,CentOS 7和Oracle Linux 7開始提供。要在Ubuntu 14.04,Debian Wheezy或Debian Jessie上使用此功能,您必須下載最新的靜態(tài)Docker Linux二進制文件。此功能目前在其他發(fā)行版上不可用。
默認seccomp
配置文件為使用seccomp運行容器提供了一個理智的默認設置,并禁用了大約44個超過300+的系統(tǒng)調(diào)用。它具有適度的保護性,同時提供廣泛的應用兼容性 默認的Docker配置文件可以在這里找到)。
實際上,該配置文件是白名單,默認情況下拒絕訪問系統(tǒng)調(diào)用,然后將特定的系統(tǒng)調(diào)用列入白名單。配置文件的工作方式定義defaultAction
的SCMP_ACT_ERRNO
,只覆蓋這一行動特定系統(tǒng)調(diào)用。效果SCMP_ACT_ERRNO
是導致Permission Denied
錯誤。接下來,配置文件定義了完全允許的系統(tǒng)調(diào)用的特定列表,因為它們action
被覆蓋SCMP_ACT_ALLOW
。最后,一些具體的規(guī)則是單獨的系統(tǒng)調(diào)用,例如personality
,socket
,socketcall
,和其他,允許這些系統(tǒng)的變異與特定的參數(shù)來調(diào)用。
seccomp
有助于以最低權(quán)限運行Docker容器。不建議更改默認seccomp
配置文件。
運行容器時,除非使用該--security-opt
選項覆蓋容器,否則它將使用默認配置文件。例如,以下顯式指定了一個策略:
$ docker run --rm \ -it \ --security-opt seccomp=/path/to/seccomp/profile.json \ hello-world
Docker的默認seccomp配置文件是一個白名單,它指定了允許的調(diào)用。下表列出了由于不在白名單而被有效阻止的重要(但不是全部)系統(tǒng)調(diào)用。該表包含每個系統(tǒng)調(diào)用被阻止的原因,而不是白名單。
系統(tǒng)調(diào)用 | 描述 |
---|---|
ACCT | 會計系統(tǒng)調(diào)用可以讓容器禁用自己的資源限制或進程記帳。也由CAP_SYS_PACCT門控。 |
add_key | 防止容器使用未命名空間的內(nèi)核密鑰環(huán)。 |
adjtimex | 與clock_settime和settimeofday類似,時間/日期不是命名空間。也由CAP_SYS_TIME進行門控。 |
BPF | 拒絕將可能持久的bpf程序加載到內(nèi)核中,并已由CAP_SYS_ADMIN進行門控。 |
clock_adjtime | 時間/日期不是命名空間。也由CAP_SYS_TIME進行門控。 |
clock_settime | 時間/日期不是命名空間。也由CAP_SYS_TIME進行門控。 |
clone | 拒絕克隆新的命名空間。除CLONE_USERNS外,還由CAP_SYS_ADMIN對CLONE_ *標志進行門控。 |
CREATE_MODULE | 拒絕內(nèi)核模塊的操作和功能。已過時。還由CAP_SYS_MODULE進行門控。 |
delete_module | 拒絕內(nèi)核模塊的操作和功能。還由CAP_SYS_MODULE進行門控。 |
finit_module | 拒絕內(nèi)核模塊的操作和功能。還由CAP_SYS_MODULE進行門控。 |
get_kernel_syms | 拒絕檢索導出的內(nèi)核和模塊符號。已過時。 |
get_mempolicy | 修改內(nèi)核內(nèi)存和NUMA設置的Syscall。已由CAP_SYS_NICE進行門控。 |
init_module的 | 拒絕內(nèi)核模塊的操作和功能。還由CAP_SYS_MODULE進行門控。 |
ioperm | 防止容器修改內(nèi)核I / O特權(quán)級別。已由CAP_SYS_RAWIO門控。 |
IOPL | 防止容器修改內(nèi)核I / O特權(quán)級別。已由CAP_SYS_RAWIO門控。 |
KCMP | 限制進程檢查功能,已通過刪除CAP_PTRACE而被阻止。 |
kexec_file_load | kexec_load的sister系統(tǒng)調(diào)用可以做同樣的事情,但參數(shù)略有不同。還由CAP_SYS_BOOT進行門控。 |
kexec_load | 拒絕加載新內(nèi)核以供稍后執(zhí)行。還由CAP_SYS_BOOT進行門控。 |
KEYCTL | 防止容器使用未命名空間的內(nèi)核密鑰環(huán)。 |
lookup_dcookie | 跟蹤/分析系統(tǒng)調(diào)用,這可能會泄漏主機上的大量信息。也由CAP_SYS_ADMIN門控。 |
mbind | 修改內(nèi)核內(nèi)存和NUMA設置的Syscall。已由CAP_SYS_NICE進行門控。 |
安裝 | 拒絕安裝,已由CAP_SYS_ADMIN門控。 |
move_pages | 修改內(nèi)核內(nèi)存和NUMA設置的Syscall。 |
name_to_handle_at | 姐姐系統(tǒng)調(diào)用open_by_handle_at。已由CAP_SYS_NICE進行門控。 |
nfsservctl | 拒絕與內(nèi)核nfs守護進程進行交互。自Linux 3.1以來已過時。 |
open_by_handle_at | 舊集裝箱突破的原因。還由CAP_DAC_READ_SEARCH選通。 |
perf_event_open | 跟蹤/分析系統(tǒng)調(diào)用,這可能會泄漏主機上的大量信息。 |
個性 | 防止容器啟用BSD仿真。沒有內(nèi)在的危險,但測試不足,可能發(fā)生大量內(nèi)核威脅。 |
pivot_root | 拒絕pivot_root,應該是特權(quán)操作。 |
process_vm_readv | 限制進程檢查功能,已通過刪除CAP_PTRACE而被阻止。 |
process_vm_writev | 限制進程檢查功能,已通過刪除CAP_PTRACE而被阻止。 |
ptrace的 | 跟蹤/分析系統(tǒng)調(diào)用,這可能會泄漏主機上的大量信息。已被CAP_PTRACE下降封鎖。 |
query_module | 拒絕內(nèi)核模塊的操作和功能。已過時。 |
quotactl | 配額系統(tǒng)調(diào)用可以讓容器禁用自己的資源限制或進程記帳。也由CAP_SYS_ADMIN門控。 |
重啟 | 不要讓容器重新啟動主機。還由CAP_SYS_BOOT進行門控。 |
request_key | 防止容器使用未命名空間的內(nèi)核密鑰環(huán)。 |
set_mempolicy | 修改內(nèi)核內(nèi)存和NUMA設置的Syscall。已由CAP_SYS_NICE進行門控。 |
setns | 拒絕將線程與名稱空間關聯(lián)。也由CAP_SYS_ADMIN門控。 |
settimeofday | 時間/日期不是命名空間。也由CAP_SYS_TIME進行門控。 |
套接字,套接字 | 用于發(fā)送或接收數(shù)據(jù)包以及其他套接字操作。除通信域AF_UNIX,AF_INET,AF_INET6,AF_NETLINK和AF_PACKET之外,所有套接字調(diào)用和套接字調(diào)用都被阻止。 |
估計 | 時間/日期不是命名空間。也由CAP_SYS_TIME進行門控。 |
swapon命令 | 拒絕啟動/停止交換文件/設備。也由CAP_SYS_ADMIN門控。 |
使用swapoff | 拒絕啟動/停止交換文件/設備。也由CAP_SYS_ADMIN門控。 |
sysfs的 | 已過時的系統(tǒng)調(diào)用。 |
_sysctl | 已過時,由/ proc / sys取代。 |
卸除 | 應該是一個特權(quán)操作。也由CAP_SYS_ADMIN門控。 |
umount2 | 應該是一個特權(quán)操作。也由CAP_SYS_ADMIN門控。 |
取消共享 | 拒絕克隆進程的新名稱空間。還由CAP_SYS_ADMIN進行門控,但不共享--user。 |
相信 | 較舊的系統(tǒng)調(diào)用與共享庫相關,很長一段時間未使用。 |
userfaultfd | 用戶空間頁面錯誤處理,主要用于進程遷移。 |
USTAT | 已過時的系統(tǒng)調(diào)用。 |
VM86 | 在內(nèi)核x86實模式虛擬機中。也由CAP_SYS_ADMIN門控。 |
vm86old | 在內(nèi)核x86實模式虛擬機中。也由CAP_SYS_ADMIN門控。 |
你可以通過unconfined
若要運行沒有默認Seccomp配置文件的容器,請執(zhí)行以下操作。
$ docker run --rm -it --security-opt seccomp=unconfined debian:jessie \ unshare --map-root-user --user sh -c whoami