docker run:–security-opt seccomp=unconfined选项解析 (安全计算模式Secure Computing Mode,实现系统调用过滤,禁用或允许某些系统调用)

这篇具有很好参考价值的文章主要介绍了docker run:–security-opt seccomp=unconfined选项解析 (安全计算模式Secure Computing Mode,实现系统调用过滤,禁用或允许某些系统调用)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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 容器在提供便利的同时,也能提供足够的安全性。


  1. Docker Overview ↩︎ ↩︎

  2. Seccomp security profiles for Docker ↩︎

  3. Understanding and Hardening Linux Containers ↩︎文章来源地址https://www.toymoban.com/news/detail-766515.html

到了这里,关于docker run:–security-opt seccomp=unconfined选项解析 (安全计算模式Secure Computing Mode,实现系统调用过滤,禁用或允许某些系统调用)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • ERROR 1290 (HY000): The MySQL server is running with the --secure-file-priv option 解决办法

    情景 当我导入大数据量时,使用 LOAD DATA INFILE 进行导入,出现了错误 ERROR 1290 (HY000): The MySQL server is running with the --secure-file-priv option so it cannot execute this statement 表明你的 MySQL 服务器启用了 --secure-file-priv 选项,这个选项限制了 MySQL 可以执行文件操作的目录。这通常出现在尝

    2024年04月28日
    浏览(42)
  • k8s、docker添加daemon.json添加“exec-opts“: [“native.cgroupdriver=systemd“]后无法启动的问题

    考虑k8s下docker下载镜像太慢,修改了daemon.json,按照手册抄,添加 结果发现k8s起不来了, – Unit docker.service has begun starting up. Aug 10 22:02:01 k8s-master dockerd[1831]: unable to configure the Docker daemon with file /etc/docker/daemon.json : the following directives are specified both as a flag and in the configuration

    2024年02月13日
    浏览(35)
  • linux 安全系列目录 - seccomp安全模块问题排查

    涉及seccomp安全模块问题时,可以参照本文档案例进行扩展分析,可以多访问文中的链接,很有用。 通过使用libseccomp,开发人员可以定义一组允许的系统调用规则,从而限制应用程序的系统调用(system call)集合,阻止对潜在危险的系统调用的调用。它最初被用于 cpushare 这个

    2024年02月05日
    浏览(55)
  • ERROR 1290 (HY000): The MySQL server is running with the --secure-file-priv option so it cannot exec

    MySQL在进行导出全表数据的时候提示ERROR 1290 出现这个问题的原因是mysql的secure_file_prive这个选项没有开启,或者这个选择了特定的文件路径,只有在这个文件路径下的文件才能导入导出mysql 首先在mysql环境下查询secure_file_priv参数。 参数secure_file_priv的值及含义如下: secure_fil

    2024年02月10日
    浏览(54)
  • 【云安全系列】Seccomp—云安全syscall防护利器

    Seccomp(全称 “Secure computing”),早在 2.6.12 版本(2005年3月8日)就引入到内核中,是通过只允许内核支持部分 syscall(系统调用),或者拒绝内核认为可能有危险的 syscall 集合的方式,来限制一个进程所支持的 syscall调用。最初,Seccomp 只允许使用read、 write、 _exit、sigreturn

    2024年02月08日
    浏览(40)
  • 【Docker】docker run 命令详解

    Docker运行命令是在Docker中启动容器的主要方式之一。它是Docker CLI(命令行界面)中的基本命令之一,用于启动容器。 在这个语法中,“OPTIONS”包含了一些参数,用于配置和控制容器的各种方面。“IMAGE”是要使用的Docker镜像。“COMMAND”是在容器内执行的命令,“ARG”是该命

    2024年02月16日
    浏览(37)
  • docker run 与 docker start区别

    说明, docker run 和docker start 都是运行一个docker容器, 区别在于 1. docker run (使用镜像image) 2. docker start (使用容器ID或是容器NAMES)

    2024年02月14日
    浏览(45)
  • docker run 命令详解

    一、前言 Docker容器是一个开源的应用容器引擎,让开发者可以以统一的方式打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何安装了Docker引擎的服务器上(包括流行的Linux机器、Windows机器),也可以实现虚拟化。以下是Docker容器的特点: 沙箱机制:容器是

    2024年02月02日
    浏览(45)
  • Docker run命令汇总

    一、docker run指令 docker run :创建一个新的容器并运行一个命令 以下为docker run时可以加的一些参数 二、docker run指定的参数 1. -d 后台运行容器,并返回容器ID,此时不会进入交互界面,如果想要进入交互界面请加-i和-t参数。 如果用了-d参数未进入容器的时候,在想进入容器,

    2024年02月17日
    浏览(46)
  • Docker run命令

    docker run 命令用于创建、启动和运行一个新的 Docker 容器。它的参数如下: 参数 含义 -d 以后台模式运行容器 -p 将容器的端口映射到主机的端口 –name 为容器指定一个名称,可以在后面的命令中引用该容器 –restart 指定容器的重启策略,可以是always(默认值)、on-failure、unl

    2024年02月14日
    浏览(35)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包