Docker 安全性: 理解和使用--security-opt seccomp=unconfined选项
Docker 提供了许多安全性功能,其中一个重要的是通过Seccomp (Secure Computing Mode)实现系统调用过滤。本文将详细介绍如何使用 --security-opt seccomp=unconfined
选项,并解析其含义。
目录
1. Docker与安全性
Docker 的一个主要优势是能够将应用程序及其依赖项隔离起来,使其在单独的容器中运行1。但是,这并不意味着容器本身就是完全安全的。为了确保更高的安全性,Docker 提供了一些选项,包括 --security-opt
选项,可以用来配置安全设置。
docker run --security-opt option=value ...
2. Seccomp简介
Seccomp,即安全计算模式,是 Linux 内核的一部分,用于限制进程可以使用的系统调用2。通过禁止或限制对某些系统调用的访问,Seccomp 可以有效减少攻击者能够利用的攻击面。
Docker 在默认情况下启用了 Seccomp,并提供了一个默认的配置文件,该文件白名单了大约300个系统调用,其他的则被禁止。这意味着在 Docker 容器中运行的进程只能访问这些已经过滤的系统调用。
Docker Seccomp默认配置中允许和禁止的系统调用示例
在Docker默认的Seccomp配置中,大约有300个被允许的系统调用。这些调用涵盖了大部分正常应用程序需要的功能,如文件操作(open
, read
, write
等)、进程管理(fork
, execve
等)、内存管理(mmap
, brk
等)等。
以下是一些被Docker默认配置允许的系统调用示例:
read
write
open
close
stat
fstat
lstat
poll
lseek
mmap
mprotect
munmap
brk
rt_sigaction
rt_sigprocmask
ioctl
pread64
pwrite64
readv
writev
access
pipe
select
sched_yield
mremap
msync
mincore
madvise
shmget
shmat
shmctl
dup
dup2
pause
nanosleep
getitimer
alarm
setitimer
getpid
sendfile
socket
connect
accept
sendto
recvfrom
sendmsg
recvmsg
shutdown
bind
listen
getsockname
getpeername
socketpair
setsockopt
getsockopt
clone
fork
vfork
execve
exit
wait4
kill
uname
这是一个非详尽的列表,仅供参考。对于完整的列表,可以参考Docker的Seccomp默认配置文件1。
同时,一些可能被恶意利用的系统调用被禁止。例如,以下是一些被禁止的系统调用:
-
ptrace
:此系统调用常常用于调试和分析,但也可以被用来修改运行中的程序,因此可能被恶意利用。 -
kexec_load
:此系统调用允许加载并启动新的内核,由于这可以绕过在容器外部施加的各种限制,所以通常被禁止。 -
open_by_handle_at
:此系统调用允许打开一个由文件handle指定的文件,但由于handle可能泄露关于主机文件系统的信息,因此通常被禁止。 -
init_module
,finit_module
,delete_module
:这些系统调用允许加载和卸载内核模块,由于这可以改变操作系统的基本行为,所以通常被禁止。
这只是被禁止的系统调用的一小部分。具体哪些系统调用被禁止,取决于你的Docker版本和Seccomp配置。
3. --security-opt seccomp=unconfined详解
在某些情况下,可能需要在 Docker 容器中执行一些非白名单内的系统调用。为此,Docker 提供了 --security-opt seccomp=unconfined
选项,它可以取消 Seccomp 的限制,使容器内的进程可以访问所有系统调用。
docker run --security-opt seccomp=unconfined ...
这个命令将完全关闭Seccomp保护,因此在容器中的进程将具有对所有系统调用的完全访问权限。
4. 示例:在容器中使用--security-opt seccomp=unconfined
以下是一个使用 --security-opt seccomp=unconfined
选项运行 Docker 容器的例子。这个示例基于ubuntu镜像生成容器,并在容器中运行一个简单的 bash shell:
docker run -it --rm --security-opt seccimp=unconfined ubuntu bash
在上述命令中,-it
选项启用了交互式终端,--rm
选项确保在退出时删除容器,而 --security-opt seccomp=unconfined
则关闭了 Seccomp。
5. 风险与警告
虽然 --security-opt seccomp=unconfined
选项可以提供更大的灵活性,但也带来了一些风险。禁用 Seccomp 意味着容器内的进程可以访问所有系统调用,包括那些可能被利用来执行恶意操作的系统调用3。
因此,除非有特别的理由,否则不应在生产环境中使用 --security-opt seccomp=unconfined
选项。如果必须使用,应确保其他安全措施(如用户权限管理和网络隔离)已经就位。
6. 总结
总的来说,Docker 的 --security-opt seccomp=unconfined
选项是一个强大的工具,可以提供更大的灵活性。然而,与此同时,也应注意其潜在的风险,尤其是在生产环境中。
在使用此选项时,应始终遵循最佳安全实践,并确保已经实施了其他安全措施。只有这样,才能确保 Docker 容器在提供便利的同时,也能提供足够的安全性。
-
Docker Overview ↩︎ ↩︎
-
Seccomp security profiles for Docker ↩︎文章来源:https://www.toymoban.com/news/detail-766515.html
-
Understanding and Hardening Linux Containers ↩︎文章来源地址https://www.toymoban.com/news/detail-766515.html
到了这里,关于docker run:–security-opt seccomp=unconfined选项解析 (安全计算模式Secure Computing Mode,实现系统调用过滤,禁用或允许某些系统调用)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!