mysql不要放docker,Docker从入门到放弃

本文将以比较简单的的方式让大家理解docker,以平时常用到的测试环境为主,从用开始,慢慢理解docker。

0x00 用docker进行漏洞测试

0x01 docker运行busybox

0x02 Docker 搭建运行apache-php环境

0x03 用Dockerfile自动化构建可ssh登陆的镜像

0x04 Docker搭建一个wordpress博客

0x05 Docker容器互联

0x06 Docker安全

vulhub是一个开源的漏洞环境靶场(膜拜p牛一波)

接下来我们用docker来搭建一个jboss反序列漏洞的环境吧。

准备:Docker Docke-compose

以上环境安装方法:Docker安装 Docker-compose安装

什么?一开始就学这么难的?其实docker边用边学是比较合适的,用到什么学什么,没有必要从一大堆原理开始学。既然要学docker,那就先装一个啦,边学边用。

那接下来就开始吧,其实也就一条命令。

680e38eb8f50983d612b922381ace445.png

复制如上链接,然后保存到文件docker-compose.yml,结果如下: 接下来,我们只需要

72ff4f694f3387e472b14d55b495c019.png

docker-compose up -d好了我们的靶场搭建完毕,访问 localhost:8080

接下来就可以进行漏洞复现了,步骤见:

接下来我们边搭建环境边学习简单的docker命令

Busybox是一个集成了三百多个最常用Linux命令和工具的软件,简单的cat ls echo等命令都集成在内,当然也有很多复杂的命令,我们就先来试试使用docker安装一个busybox吧

df39374b80a3e9d6c525858e0e252d37.png

docker pull busybox

好了,我们 从docker官方库中得到了一个镜像

可以通过 docker images 查看到id以及其他信息,这里可以看到busybox镜像大小只有1mb左右

那接下来我们用这个id为8c811b4aec35的busybox镜像运行一下命令吧

先用来看下ifconfig命令

110ec9b7bd4c8058fa3e9ee58fc9ee79.png

docker run 8c811b4aec35 ifconfig

可以看到,docker使用busybox镜像创建了一个busybox容器,并且运行了我们的测试命令,而且docker运行的容器有自己的ip地址,这说明容器是一个相对独立的环境。

首先搜索下有哪些现成的apache-php环境

docker search apache-php这里我们选择别人已经构建好的start数目较多的镜像:eboraas/apache-php

a2609995f0ede551a14fa40b2a30c4cd.png

docker pull eboraas/apache-php

部署完成 还是用 docker images查看我们pull到本地的镜像

56ebc5c85cfb5843b686831f2b275f18.png

docker images

接下来我们进入到id为 1e9f5e13fb38的容器

和之前的命令有些区别,因为我们运行的是web服务,所以我们需要把容器内部端口映射出来这样我们才能用外部的浏览器访问它。

docker run -itd -p 80:80 1e9f5e13fb38好了,一个apache+php的容器就可以搭建成功,我们 可以在上面搭建其他服务了。

我们可以在宿主机curl测试一下我们 是否搭建成功(将容器放入后台可以使用ctrl p+q)

5c3c0925b96bcfa645a1f7127726635d.png

b19e9496d3b4981ebc9a9e658e43f3ab.png

那我们 php环境怎么样了呢?那就写一个phpinfo 页面试试吧

ea2adb45cfe84d03a7806154fae97684.png

php页面 创建好了,接下来我们需要将他放在docker容器的web根目录 里, 这里需要用到docker cp命令

a0ed7ff977228d87c055c986f2f72dbb.png

使用docker cp 命令复制到容器的web根目录/var/www/html/,这 里指定容器我直接 简写了开头的标识 4c1

0ae69728809f2f8a3156325d3dbde56d.png

可以看到,环境已经搭建好了。

我们已经在容器内做了改动 了,此时,如果我们停止容器,我们 的改动将会消失,如果我们想保存容器,那么就需要将我 们 的容器提交成镜像。

首先用docker commit提交成新镜像

docker commit -a “hayasec” -m "test.php" 4c1 haya/test此时可以查看一下镜像id然后使用docker save将镜 像导出

接下来我们可以将test.tar放到其他机器上,然后用docker load命令就可以进 行再次部署了。这里已经载入镜 像了,我们可以用docker tag 命令对docker镜像 进行命名

这时候有个小问题,之前我们运行了一个apache-php容器,现在我们已经不需要它了,所以我们用docker ps查看镜像id然后用docker stop 镜像id 来停止它。

Dockerfile是由一系列命令和参数构成的脚本,这些命令应用于基 础镜 像并最终创建一个新的镜像。

接下来就利用之前我们pull下来的apache-php镜像来制作一个可以ssh登陆的镜像吧

这里需要创建三个文件 Dockerfile run.sh sources163.txt,处于同级目录。

dockerfile如下内容如下:

FROM eboraas/apache-php #设置基础镜像镜像

MAINTAINER haya #指定作者

COPY sources163.txt /etc/apt/sources.list #更换国内源

RUN apt-get -y update

RUN apt-get install -y openssh-server --force-yes #安装ssh服务

RUN mkdir -p /root/.ssh #创建ssh目录

ADD run.sh /run.sh #将run.sh添加到容器内

RUN chmod 755 /run.sh

EXPOSE 22 #为暴漏容器运行时的监听端口给外部

EXPOSE 80

EXPOSE 443

CMD ["/run.sh"] #容器启动时要运行的命令run.sh文件内容如下:

#!/bin/bash

service ssh startsources163.txt内容如下:

deb trusty main restricted universe multiverse

deb trusty-security main restricted universe multiverse

deb trusty-updates main restricted universe multiverse

deb trusty-proposed main restricted universe multiverse

deb trusty-backports main restricted universe multiverse

deb-src trusty main restricted universe multiverse

deb-src trusty-security main restricted universe multiverse

deb-src trusty-updates main restricted universe multiverse

deb-src trusty-proposed main restricted universe multiverse

deb-src trusty-backports main restricted universe multiverse然后利用这个dockerfile构建镜像

镜像构建完毕后,可以看到:

然后运行镜像

docker run -itd -p 22222:22 57b46801d43c这时候看到,内部容器的ssh服务的22端口已经被映射到本机22222 端口了

接下来通过ssh服务连接容器

这时候有个问题,我们并不知道容器的密码是多少?怎么办呢?

而且这里需要注意一点是ssh的默认配置是不允许root登录的,我们需要添加一个用户或者修改sshd_config,这里进入容器的方法就有很多了

第一种:进入容器添加用户

第二种:最开始build镜像的时候将自己的公钥添加进容器内的~/.ssh/authorized_keys,然后实现免密码ssh 登录

第三:通过docker exec -it 98defd0c6e6b /bin/bash进入容器添加用户修改密码,在通过ssh登录

第四:修改ssh配置文件

这里说一下第一种,我们先用docker exec进入容器,然后添加一个可登录的用户

添加用户、修改完密码之后,我们再次登录

到这里,我们就完成了利用dockerfile对原镜像添加功能。

随后我们可以通过docker commit将目前我们修改过的容器再次提交成一个新的镜像。

最开始我们尽量使用最简单方法部署,这里我们用到的是docker-compose。

Docker Compose 是 Docker 官方 编排(Orchestration)项 目之一, 负责快速的部署分布式应用

这里用到的github中的一个开源项目,作者已经编写好用于worfpress的docker-compose文件,接下来我们只需要直接部署就行。

我们将项目clone下来

docker-compose.yml是容器运行的关键,具体编写方法可以参考:

我们clone下来的是别人写好的项目,所以可以直接用了

然后docker-compose up -d启动

接下来讲解docker容器通信。

网上大量文章采用docker link进行连接,根据目前官方文档 —link是一个被遗弃,最终可能会被删除的命令。

所以这里我们使用docker networks进行容器连接,我们将启动两个容器,一个apache-php 一个mysql,然后用docker network对容器进行连通。

首先创建一个名为test-net的网络,默认连接方式bridge.

启动一个mysql容器,映射3306端口,连接到test-net网络,设置别名为db,设置mysql密码为password

启动一个apache-php容器,映射80端口,连接到test-net网络,设置别名为web

tips:遇到容器已经存在的报错

docker停止所有容器 docker stop $(docker ps -q)

docker删除所有容器 docker rm $(docker ps -aq)

接下来我们进入到其中一个容器,初始容器是没有ping命令的,所以我们现在安装ping

然后安装ping

apt-get install iputils-ping接下里我们在apache-php容器ping mysql容器,可以看到mysql容器与apache 容器实现互联。

docker安全主要体现在以下方面:

docker容器的安全性

镜像的安全性

docker daemon的安全性

———-摘自 Docker进阶与实战

容器安全性的根源在于,容器和host共用内核,因此受攻击面特别大。

这里就抛砖引玉地讲一下docker虚拟机逃逸。

Docker与宿主机是共享内核的,一旦内核出现漏洞,那么docker容器的安全问题将危机到宿主机。

这里以大名鼎鼎的Dirty COW脏牛为例,演示docker逃逸。

在做这个实验之前,我们先了解下脏牛漏洞。

脏牛是一个linux本地提权漏洞,脏牛漏洞(CVE-2016_5195)是公开后影响范围 最广和最深的漏洞之一,这十年来的每一个Linux版本,包括 Android 、桌面版和服务器版都受到其影响。

我们现在一个下载一个ubuntu14.04 镜像来对漏洞进行 简单地复现

为了试验方便,我选择直接用vmware搭建虚拟机。

Docker利用脏牛逃逸的关键在于宿主机存在脏牛漏洞

这样的内核版本是存在脏牛的,我们可以在主机上创建一个低权限用户(可读权限即可),然后提权,由于可读即可写,所以利用方式很多,具体见:

通过替换/ etc / passwd为用户提供root权限

git clone make编译运行。

这样就可以直接提权了,这节主要关注docker安全,所以这里不再细讲。

接下来我们给虚拟机安装docker

apt-get install docker.io

然后pull一个带了POC的容器(这样做主要是为了方便,当然也可以用其他的)

然后运行镜像 进入容器 make编译POC

注意,这里并不是每次都能成功的,失败之后vdso_patch数组也会被填充,payload的内存地址数据不 为0,无法再次复现。失败输出:

[-] failed to win race condition…

[-] failed to restore vDSO

这时候无法再次做实验了,如果用虚拟机的话做之前最好做一个快照。

这里可以看到,已经完全获得宿主机的权限了。

实际生产环境中,还经常遇到一个问题

docker通过环境变量的方式传递 MySQL 存储引擎的密码,所以造成mysql 密码是明文

比较流行的解决办法是

1.创建两个 MySQL 容器 MySQL1 与 MySQL2,MySQL 的 root 密码分别为 daocloud 与 docker;

2.待 MySQL1 启动完毕,使用docker stop命令停止 MySQL1 容器,并将 MySQL1 容器的 volume1 全部拷贝出来,最终使用docker rm命令删除 MySQL1 容器;

3.待 MySQL2 启动完毕,使用docker stop命令停止 MySQL2 容器,并将 MySQL2 容器 volume2 内的文件全部删除,接着将 volume1 的内容拷贝至 volume2 下,最终启动 MySQL2。

还可以使用docker swarm 提供的 secret 机制,它允许将敏感信息加密后保存到 secret 中,用户可以指定哪些容器可以使用此 secret

详见:如何使用swarm中的secret

最后的建议:Docker近几年发展迅速,官方为Docker的发展付出了很大的努力。官方了大量的官方文档可以帮助我们更好地理解和使用Docker,日常阅读官方文档、更新日志是很有必要的。

Docker官方文档

Docker命令文档

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/488379.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

二叉树02

为了加强记忆我又写了一遍二叉树的基本代码。比上一次多了一点点功能。 1 #include<stdio.h>2 #include<iostream>3 using namespace std;4 struct Bitree{//二叉树的结构 5 int val;6 Bitree *lchild,*rchild;7 };8 void creat(Bitree * &T)//创建树 …

一个对称性解释三个宇宙学难题;引力波碰撞会发光?粘液霉菌助力寻找宇宙网 | 一周科技速览...

来源&#xff1a;返朴撰文 &#xff1a;董唯元、杨凌、顾舒晨、洪俊贤、太阁尔、姜小满目 录1. 一个对称性解释三个宇宙学难题2. 引力波碰撞会发光&#xff1f;3. 粘液霉菌助力寻找宇宙网4. 听&#xff0c;是杂质原子的声音5. 更快了&#xff01;地球的大型生态系统在崩溃6. 究…

如何用python爬虫赚早餐_如何利用python爬虫挣钱

Python爬虫是用Python编程语言实现的网络爬虫&#xff0c;主要用于网络数据的抓取和处理&#xff0c;相比于其他语言&#xff0c;Python是一门非常适合开发网络爬虫的编程语言&#xff0c;大量内置包&#xff0c;可以轻松实现网络爬虫功能。那么使用python如何赚钱呢&#xff1…

一ElasticSearch安装启动

参考官方&#xff1a;https://www.elastic.co/downloads/elasticsearch 转载于:https://www.cnblogs.com/tangyongathuse/p/6840231.html

python中表达式4+0.5值的数据类型为_python中,数字类型计算

说明&#xff1a;今天在看python数字类型的操作&#xff0c;在此记录下。操作过程&#xff1a;1.数字的加减乘除>>> 2 24>>> 4 - 22>>> 2 - 4-2>>> 2 * 24>>> 2 / 2 #除法的结果会返回小数的结果&#xff0c;如果是整除&#xf…

结构化数据不应该被人工智能忘之脑后 !

来源&#xff1a;Ihab Ilyas在处理非结构化数据的问题上&#xff0c;人工智能和深度学习方法一直都表现出众且广为人知&#xff0c;无论是在自然语言处理、知识库自动构建&#xff0c;还是图像视频的识别和生成应用中&#xff0c;都有很多成熟案例。然而对于结构化数据的研究&a…

php修改找不到数据类型,php – 在$_POST中找不到输入类型=图像值

只需使用var_dump()来查看$_POST中的内容&#xff1a;var_dump($_POST);您会看到,当您使用< input type “image”>提交表单时,您会得到&#xff1a;arraybuyuka_x > string 0 (length1)buyuka_y > string 0 (length1)所以,没有$_POST [‘buyuka’] – 相反,有&…

java数据类型转换和数组总结

流程控制 分支 循环语句     if...else...     if...else if...else switch(值0) { ------------值0是什么类型, case后面的值就要是什么类型       case 值1:         执行语句         break;       case 值1:         …

导入自定义模块syntaxerror: invalid syntax_技术分享 | Quill的模块机制

DevUI技术体验部是一支兼具设计视角和工程视角的团队&#xff0c;服务于华为云DevCloud平台和华为内部上百个中后台系统&#xff0c;主打产品 DevUI Design 服务于设计师和前端工程师。官方网站&#xff1a;devui.design。Ng组件库&#xff1a;ng-devui。DevUI Design&#xff…

我们对时间的理解错了吗?

来源&#xff1a; 利维坦文/Claudia Hammond译/boomchacha校对/Rachel原文/www.bbc.com/future/article/20191203-what-we-get-wrong-about-time“时间”是常见的名词。我们都熟知时间流逝的感觉&#xff1a;现在变成过去&#xff1b;今天变成昨天。你要是住在温带&#xff0c;…

php jquery validate remote,jquery插件validate里面的remote参数用法

validate验证在进行异步数据库查询验证的过程中用到了remote这个参数remote里面有url,dataType,data,type等等这几个参数&#xff0c;当data不写的时候默认是当前被验证的字段的值。传值到php文件中&#xff0c;在php文件中处理的时候&#xff0c;返回值为 “true”或者"f…

SVN使用过程中遇到的一些问题

更新svn的客户端TortoiseSVN后 &#xff0c;之前使用svn管理的文件的关联图标消失了 说明:下面的解决方法及图片来自博客&#xff1a;装了SVN&#xff0c;你的关联图标变了没有&#xff1f; 解决办法&#xff1a;在同步的文件点击右键如下图 ...现则Settings&#xff0c;出现的…

python计算线性相关系数_Python+pandas计算数据相关系数(person、Kendall、spearman)

pandas中DataFrame对象corr()方法的用法&#xff0c;该方法用来计算DataFrame对象中所有列之间的相关系数(包括pearson相关系数、Kendall Tau相关系数和spearman秩相关)。pandas相关系数-DataFrame.corr()参数详解DataFrame.corr(methodpearson, min_periods1)参数说明&#xf…

matlab设置非平坦结构元,详解MATLAB/Simulink通信系统建模与仿真图书信息

第1章 Simulink基础1.1 Simulink简介1.2 运行Simulink演示程序1.2.1 运行房屋热力学系统演示模型1.2.2 房屋热力学系统模型说明1.2.3 其他Simulink演示程序1.3 建立一个简单的Simulink模型1.4 保存Simulink模型1.5 打印及HTML报告1.5.1 打印模型1.5.2 生成模型报告1.6 打印边框…

创建Socket【Socket编程4】

java在包java.net中提供了两个类Socket和ServerSocket&#xff0c;分别用来表示双向连接的客户端和服务端。这是两个封装得非常好的类&#xff0c;使用很方便。其构造方法如下&#xff1a; Socket(InetAddress address, int port); Socket(InetAddress address, int port, bool…

python打包linux可执行文件_Linux下安装pyinstaller用于将py文件打包生成一个可执行文件...

听说pyinstaller多平台支持的比较好&#xff0c;考虑在linux(redhat 6 32-bit)上装个pyinstall,不过真的是遇到太多问题了。。。下面是安装和使用流程&#xff1a;安装使用流程1. 首先给系统装个easy_install&#xff0c; 如果装了的可以跳过这步到pypi官方网址 https://pypi.p…

oracle未找到时区,解决ORA-01882:未找到时区区域%s

和许多网友一样&#xff0c;今天遇到了ora-01882问题&#xff0c;查了matelink解决了&#xff01; 环境&#xff1a;Oracle server端版本&#xff1a;SQLgt; select * from v$version和许多网友一样&#xff0c;今天遇到了ora-01882问题&#xff0c;查了matelink解决了&#xf…

脑神经计算建模揭示前额叶皮层不同类型中间神经元在信息维持中的作用

来源&#xff1a;智能的本质与未来尽管占比相对锥形神经元数量少&#xff0c;但是中间神经元在大脑皮层实现认知功能中的作用却不容小觑。中间神经元的显著特点就是种类丰富&#xff0c;因此对不同类型中间经元在特定认知功能的分工作用的探索是揭示智能机制的关键之一。中国科…

支付宝支付-刷卡支付(条码支付)

此项目已开源欢迎Start、PR、发起Issues一起讨论交流共同进步 https://github.com/Javen205/IJPay http://git.oschina.net/javen205/IJPay 在官方的产品是叫做当面付 1、什么是当面付呢&#xff1f; 简单的讲就是条码支付(刷卡支付)、扫码支付、声波支付。 【官方是这样解释的…

solr做索引时抛出异常_Solr---gt;01

Solr介绍 什么叫做全文检索呢&#xff1f;这要从我们生活中的数据说起。 我们生活中的数据总体分为两种&#xff1a;结构化数据和非结构化数据。 1、结构化数据&#xff1a;指具有固定格式或有限长度的数据&#xff0c;如数据库&#xff0c;元数据等。 2、非结构化数据&a…