重庆网站建设 观音桥,怎样做软件开发,深圳网站 建设,网络服务器的配置与应用心得前言 Docker 是一个开源的应用容器引擎#xff0c;让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux或Windows操作系统的机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。 #x1f4d5;作者简介#xff1a;热…
前言 Docker 是一个开源的应用容器引擎让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux或Windows操作系统的机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。 作者简介热爱跑步的恒川致力于C/C、Java、Python等多编程语言热爱跑步喜爱音乐的一位博主。 本文收录于恒川的日常汇报系列大家有兴趣的可以看一看 相关专栏C语言初阶、C语言进阶系列等大家有兴趣的可以看一看 Python零基础入门系列Java入门篇系列正在发展中喜欢Python、Java的朋友们可以关注一下哦 Docker的应用包含Sandbox、PaaS、Open Solution以及IT运维的概念 1. Docker镜像2. 网络命名空间3. 日志和审核4. SELinux 或 AppArmor5. 守护特权6. cgroups7. 二进制SUID/GUID8. 设备控制组(/dev/*)9. 服务和应用10. 安装项11. Linux内核12. 用户命名空间13. libseccomp和seccomp-bpf 扩展14. 性能15. 多租环境16. 完全虚拟化17. 安全审核 1. Docker镜像 Docker 1.3 支持数字签名来确认官方仓库镜像的起源和完整性。因该功能仍在开发中所以Docker将抛出警告但不会阻止镜像的实际运行。 通常确保镜像只从受信库中检索并且不使用–insecure-registry命令项。
2. 网络命名空间 在默认情况下Docker REST API用来控制容器通过系统Docker守护进程是能够通过Unix域套接字的方式暴露出来。在Docker上开启一个TCP端口即 当引导Docker守护进程时必须使用 -H 选项绑定地址将允许任何人通过该端口访问容器有可能获得主机上的root访问权限以及在某些场景下本地用户所属的Docker组。
3. 日志和审核 收集和归档与Docker相关的安全日志来达到审核和监督的目的。 从host可以使用下面的命令来访问容器外的日志文件 docker run -v /dev/log:/dev/log/bin/sh 使用Docker命令内置 docker logs … (-f to follow log output) 日志文件也可以从持续存储导出到一个使用压缩包里面 docker export …
4. SELinux 或 AppArmor Linux的内部安全模块例如通过访问控制的安全策略来配置安全增强型LinuxSELinux和AppArmor从而实现强制性的访问控制MAC一套有限的系统资源的限制进程如果先前已经安装和配置过SELinux那么它可以使用setenforce 1在容器中被激活。Docker程序的SELinux支持是默认无效的并且需要使用—selinux功能来被激活。通过使用新增的—security-opt来加载SELinux或者AppArmor的策略对容器的标签限制进行配置。该功能已经在Docker版本1.3中介绍过。例如 docker run --security-optsecdriver:name:value -i -t centos bash
5. 守护特权 不要使用–privileged命令行选项。这本来允许容器来访问主机上的所有设备并为容器提供一个特定的LSM配置例如SELinux或AppArmor而这将给予如主机上运行的程序同样水平的访问。避免使用–privileged有助于减少主机泄露的攻击面和潜力。然而这并不意味着程序将没有优先权的运行当然这些优先权在最新的版本中还是必须的。发布新程序和容器的能力只能被赋予到值得信任的用户上。通过利用-u选项尽量减少容器内强制执行的权限。例如 docker run -u-it/bin/bash Docker组的任何用户部分可能最终从容器中的主机上获得根源。
6. cgroups 为了防止通过系统资源耗尽的DDoS攻击可以使用特定的命令行参数被来进行一些资源限制。 CPU使用率 docker run -it --rm --cpuset0,1 -c 2 … 内存使用 docker run -it --rm -m 128m … 存储使用 docker -d --storage-opt dm.basesize5G 磁盘I/O 不支持Docker。BlockIO*属性可以通过systemd暴露并且在支持操作系统中被用来控制磁盘的使用配额。
7. 二进制SUID/GUID SUID和GUID二进制文件不稳定的时候容易受到攻击而这个时候是很危险的导致任意代码执行如缓冲区溢出因为它们会进程的文件所有者或组的上下文中运行。如果可能的话禁止SUID和SGID使用特定的命令行参数来降低容器的功能。 docker run -it --rm --cap-drop SETUID --cap-drop SETGID … 另一选择可以考虑运用通过安装有nosuid属性的文件系统来移除掉SUID能力。 最后一个选择是从系统中彻底删除不需要的SUID和GUID二进制文件。这些类型的二进制文件可以在Linux系统中运行以下命令而找到 find / -perm -4000 -exec ls -l {} ; 2 /dev/null find / -perm -2000 -exec ls -l {} ; 2 /dev/null 可以使用类似于下面的命令将SUID和GUID文件权限删除然后 sudo chmod u-s filename sudo chmod -R g-s directory
8. 设备控制组(/dev/*) 如果需要使用内置的设备选项不使用-v与–privileged参数。此功能在推出1.2版本。 例如声卡使用 docker run --device/dev/snd:/dev/snd …
9. 服务和应用 如果一个Docker容器有可能被泄露为了减少横向运动的潜力考虑隔离极易受影响的服务如在主机或虚拟机上运行SSH服务。此外不要运行容器内不受信任的操作的应用程序。
10. 安装项 当使用本机容器库时即libcontainerDocker就会自动处理这个。 但是使用LXC容器库时敏感的安装点最好通过运用只读权限来手动安装其中包括 /sys /proc/sys /proc/sysrq-trigger /proc/irq /proc/bus 安装权限应在以后删除以防止重新挂载。
11. Linux内核 使用系统提供的更新工具来确保内核是实最新的如apt-getyum等。过时的内核可能更脆弱并且被暴露一些漏洞。使用GRSEC或PAX来加强内核即例如对内存破坏的漏洞来提供更高的安全性。
12. 用户命名空间 Docker不支持用户的命名空间但是的一个开发功能。UID映射由LXC程序驱动但在本机libcontainer库中不被支持。该功能将允许Docker程序像一个没有特权的用户在主机上运行但显示出来的是和在容器中运行的一样。
13. libseccomp和seccomp-bpf 扩展 libseccomp库允许在基于一个白名单的方法上限制Linux内核的系统调用程序的使用。对于系统操作来说不是很重要的系统调用程序最好被禁用以防止被破坏的容器被滥用或误用。此功能工作正在进行中LXC驱动程序中已经有了但是在libcontainer中还没有完成虽然是默认值。使用LXC驱动程序来重启Docker程序 docker -d -e lxc 如何生成seccomp配置的说明都在“的contrib”文件夹中的Docker GitHub的资源库。以后可以用下面的命令来创建一个基于Docker容器的LXC docker run --lxc-conf“lxc.seccomp$file” 驱动程序的概念 驱动程序一般指的是设备驱动程序Device Driver是一种可以使计算机和设备进行相互通信的特殊程序。相当于硬件的接口操作系统只有通过这个接口才能控制硬件设备的工作假如某设备的驱动程序未能正确安装便不能正常工作。因此驱动程序被比作“ 硬件的灵魂”、“硬件的主宰”、“硬件和系统之间的桥梁”等。
14. 性能 只要可能就将Linux性能降低到最小。Docker默认的功能包括chown, dac_override, fowner, kill, setgid, setuid, setpcap, net_bind_service, net_raw, sys_chroot, mknod, setfcap, and audit_write. 从控制行来启动容器时可以通过–cap-add 或者–cap-drop参数来进行控制 例如 docker run --cap-drop setuid --cap-drop setgid -ti/bin/sh
15. 多租环境 由于Docker容器内核的共享性质责任分离在多租户环境中不能安全地实现。建议容器在那些没有其它的目的也不用于敏感操作的主机上运行。可以考虑通过Docker控制来将所有服务移动到容器中。如果可能的话通过使用–icc false将跨容器通信降到最低并必要时指定-link与Docker运行或通过—exportport不在主机上发布而在容器上暴露一个端口。相互信任的容器的映像组来分离机器。 多租户的概念 多租户指服务器上运行单一应用但是同时服务于多家企业。每一个企业的用户所使用的应用都是自定制版本。这种就是应用本身的共享作为资源而不是一个企业只能单独使用一台服务器或者一套服务器上运作的单一应用。
16. 完全虚拟化 使用一个完整的虚拟化解决方案包含Docker,如KVM。这将阻止一个内核漏洞在Docker镜像中被利用导致容器扩为主系统。 Docker镜像能够嵌套来提供该KVM虚拟层参考Docker-in-Docker utility 中所示。
17. 安全审核 对主系统和容器定期进行安全审核以查明能导致系统损坏的错误配置或漏洞。 如果这份博客对大家有帮助希望各位给恒川一个免费的点赞作为鼓励并评论收藏一下⭐谢谢大家 制作不易如果大家有什么疑问或给恒川的意见欢迎评论区留言。