php+nginx

ctf topic Production Manual

 

First, make topic

 

Production ctf title preconditions: CentOS7 , need to have docker Service

 

Production test1 compressed packages under Title 1 :

 

1 , clear questions asked, questions asked are as follows:

 

 

 

2, Docker Hub find the right mirror:

(Note: When looking for a mirror, not looking for no run start command Mirror)

No special requirements, began making the mirror.

The first subject of the request from the docker hub find the corresponding image on the subject requires php mirror need php run the server, using the general Apache .

Mirror The mirror shown in FIG find available Found

 

 

 

 

 

 

 

3, Docker server download mirrors

As shown, the docker pull download image command

 

 

 

 

 

 

4, to view mirror docker images

 

 

 

 

 

5、启动镜像 docker run -tid 镜像名:版本号(如果TAGlatest,则不用加版本号)

 

 

 

 

6、查找镜像对应的端口 docker ps

 

 

 

 

7、根据镜像对应的端口启动镜像

docker run -tid -p XX:XX 镜像名:版本号

(前边的XX代表虚拟机的端口,后面的XX代表容器的端口,容器的端口是通过刚刚找到的)

 

 

 

 

8、无特殊题目制作要求的情况下,将题目文件上传到对应的docker容器中

分三步进行,第一步:将题目文件上传到linux服务器中

 

 

 

 

第二步:找到docker容器进入的目录位置:

docker exec -it 容器id /bin/bash

(默认进入容器内部的命令为/bin/bash或者是/bin/sh)

然后pwd查看当前路径

 

 

 

 

第三步:将linux文件上传到docker容器对应的目录中:

docker cp 文件名 容器id:容器目录

 

 

 

 

9、打开浏览器访问

ip地址加端口(linux服务器ip+启动命令设置的linux虚拟机端口)

 

 

 

发现文件乱码如何解决

 

 

 

 

10、解决文件乱码问题:

分以下几步:

第一步,进入docker容器内部,删除docker 容器文件

 

 

 

第二步,删除宿主机上的文件

 

 

 

第三步,创建一个新文件,直接复制题目内容到新文件中,退出保存

 

 

 

 

 

 

第四步:将文件上传至docker 容器内部(和第8条第三步一样)

docker cp 文件名 容器id:容器目录

 

 

 

第五步:浏览器访问

 

 

 

 

 

11、把容器做成镜像,

docker commit 容器id 镜像名称

 

 

 

 

12、将镜像打成tar

docker save -o XX.tar 镜像名:版本号

(XX为打包出来的文件名)

题目制作成功,tar包可用

 

13、 tar包加载为镜像

下次使用时:将tar文件上传至服务器,加载镜像即可

docker load --input XXX.tar

 

二:CTF web题目权限问题

1. 根据制作的题目镜像启动容器

docker run -tid --name {container_name} -p {host_port}:{container_port} {image_id}/{image_name}:{tag}

 

 

 

 

2. 进入容器内部查看权限

docker exec -it {container_id} /bin/bash

 

 

 

 

 

3. 查看当前用户的权限

ps -a

 

 

 

nginxphp-fpm的主进程(master process)为root用户权限;下方的nginx权限为nginx用户的权限,php-fpm权限为root用户的权限。当php进程的权限为root用户时,做题的人可以通过该权限直接对题目本身(容器)进行随意破坏,这样不行,需要修改php普通用户的权限。

 

4. 修改用户权限

cd /usr/local/etc

ls

vi php-fpm.conf

 

 

 

 

 

 

 

 

将文件内容修改为以下图片所示,修改user=rootuser=www-data,修改listen.owner=rootlisten.owner=www-data

 

 

 

ps -a查看权限,配置完成之后,查看配置并未生效,需要对php重启使配置生效

 

 

 

supervisorctl status查看docker容器当前运行的应用

 

supervisorctl stop php 停止

supervisorctl start php 开启

效果等同于重启

supervisorctl restart php 重启

 

 

 

 

再次通过ps -a查看当前进程权限

 

 

 

用户权限已经改好了

 

 

5. 修改上传文件权限

在通过docker exec -it {container_id} /bin/bash进入容器内部的默认路径下执行

ls

mkdir upload

ls -al

新建的upload文件夹的权限为root:root(权限为root:root时,普通用户无法对文件夹进行写入,没有root权限,需要修改为普通用户也能访问)

chown [-R] 账号名称:用户组名称 文件或目录

chown www-data:www-data upload/

ls -al 查看权限的时候能看到upload文件夹权限用户以及用户组都变成了www-data www-data

 

 

 

用户上传文件夹权限已经修改完毕,可以让用户上传文件。

 

6. 把容器做成镜像

docker commit {container_id} {image_name}:{tag}

 

 

 

 

7. 将镜像打成tar

docker save -o XX.tar {image_name}:{tag}

 

 

 

 

8. tar包加载为镜像

下次使用时:将tar文件上传至服务器,加载镜像即可

docker load --input XXX.tar

 

Guess you like

Origin www.cnblogs.com/longchengruoxi/p/11743631.html