[docker]搭建一个本地代码审计环境(docker-compose——nginx + php5 + mysql)

搭建一个本地代码审计环境(docker-compose——nginx + php5 + mysql)

看到最新Xiaocms爆了CVE,想审计一波
所以打算用docker-compose搭一个本地的平台
分享一下我是怎么搭建的
nginx + php5 + mysql(其实一开始搭了7.2的,Xiaocms不支持php7。)

目录结构

.
├── app
│   └── info.php
├── files
│   ├── docker-compose.yml
│   ├── nginx
│   │   ├── conf.d
│   │   │   └── default.conf
│   │   ├── dockerfile
│   │   └── nginx.conf
│   └── php
│       ├── dockerfile
│       ├── php-dev.ini
│       ├── php-fpm.conf
│       ├── php.ini
│       └── pkg # 这里可以放自己想多加的拓展,我放了redis
│           └── redis.tgz
└── logs
    ├── nginx
    │   └── error.log
    └── php

docker-compose.yml

version: '3'
services:
  php-fpm:
    build: ./php/
    container_name: php-fpm # 容器名字
    ports:
      - "9000"
    volumes:
      - ../../shenji/XiaoCms:/data/www:rw #挂载的目录,想审计别的目录把前面的目录换一下
      - ./php/php.ini:/usr/local/etc/php/php.ini:ro # 当前php配置文件;可以拷贝修改php.ini为想要的配置
      - ./php/php-fpm.conf:/usr/local/etc/php-fpm.conf:ro #配置文件
      - ../logs/php:/var/log/php-fpm:rw #存入的log前面的本地log挂载的地方
    restart: always # 关闭的时候自动重启
    hostname: "php-fpm" # 在配置nginx.conf的地方把ip为这个
    working_dir: /app/php # 工作目录
  nginx:
    build: ./nginx
    container_name: nginx
    depends_on:
      - php-fpm
    links:
      - php-fpm # 连到一个网络
      - db
    volumes:
      - ../../shenji/XiaoCms:/data/www:rw
      - ./nginx/conf.d:/etc/nginx/conf.d:ro # 导入自己写的nginx.conf
      - ./nginx/nginx.conf:/etc/nginx/nginx.conf:ro
      - ../logs/nginx:/var/log/nginx:rw

    ports:
      - "8080:8080"
      - "443"
    restart: always
    command: nginx -g 'daemon off;'
  db:
    image: daocloud.io/library/mysql:5.7.4
    restart: always

    expose:
    - "3306"

    environment:
      - MYSQL_ROOT_PASSWORD=root #root的密码
      - MYSQL_DATABASE=test #创建的数据库
   

php-fpm

dockerfile

FROM php:5.6.38-fpm-jessie # 这个可以随便改,想什么版本都可以 
LABEL maintainer="ckj123"

#  设置时区
ENV TZ=Asia/Shanghai
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone

RUN apt-get update && apt-get install -y \
        cron \
        git \
        zlib1g-dev \
        libfreetype6-dev \
        libjpeg62-turbo-dev \
        libpng-dev \
        libsasl2-dev \
        libmemcached-dev \
        curl \
    && docker-php-ext-configure gd --with-freetype-dir=/usr/include/ --with-jpeg-dir=/usr/include/ \
    && docker-php-ext-install -j$(nproc) gd \
        && docker-php-ext-install zip \
        && docker-php-ext-install pdo_mysql \
        && docker-php-ext-install opcache \
        && docker-php-ext-install mysqli \
        && docker-php-ext-install mysql \
        && rm -r /var/lib/apt/lists/*



COPY ./pkg/redis.tgz /home/redis.tgz

# Install PECL extensions (Redis)
RUN pecl install /home/redis.tgz && echo "extension=redis.so" > /usr/local/etc/php/conf.d/redis.ini

#  安装 Composer
ENV COMPOSER_HOME /root/composer
RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer
ENV PATH $COMPOSER_HOME/vendor/bin:$PATH

RUN rm -f /home/redis.tgz

WORKDIR /app
#  Write Permission
RUN usermod -u 1000 www-data

php-fpm.conf

php的配置文件

[global]
daemonize = no

[www]
user = www-data
group = www-data

listen = [::]:9000

pm = dynamic
;pm = static
pm.max_children = 50
pm.start_servers = 10
pm.min_spare_servers = 10
pm.max_spare_servers = 30

clear_env = no


rlimit_files = 1048576
;request_terminate_timeout = 0
;request_slowlog_timeout = 1
;slowlog = /data/log/php/php-slow.log

access.format = "%t \"%m %r%Q%q\" %s %{mili}dms %{kilo}Mkb %C%%"
catch_workers_output = yes

php_flag[display_errors] = on
;php_admin_flag[log_errors] = true
php_admin_value[date.timezone] = "Asia/Shanghai"

nginx

dockerfile

FROM nginx:1.9 # 也可以使用1.13(写博客的时候才发现用的是1.9)
LABEL maintainer="ckj123"

#  set timezome
ENV TZ=Asia/Shanghai
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone

nginx.conf

因为我把很多路径都改了,所以

user  nginx;
worker_processes  1;

error_log  /var/log/nginx/error.log warn;
pid        /var/run/nginx.pid;


events {
    worker_connections  1024;
}


http {
    include /etc/nginx/mime.types;
    default_type application/octet-stream;
    charset UTF-8; 

    sendfile on;
    tcp_nopush on;
    tcp_nodelay on;
    server_tokens off;
    keepalive_timeout 10;

    send_timeout 10; 
    server_name_in_redirect off;
    server_names_hash_bucket_size 64;
    types_hash_max_size 2048;
    client_header_timeout 10; 
    client_header_buffer_size 32k;
    large_client_header_buffers 4 32k;
    client_max_body_size 100m;
    client_body_timeout 10; 
    client_body_buffer_size 10m;
    reset_timedout_connection on; 
    

    # log setting
    log_format main  '$remote_addr - $remote_user [$time_local] "$request" '
             '$status $body_bytes_sent "$http_referer" '
             '"$http_user_agent" "$http_x_forwarded_for"';

    # access_log /var/log/nginx/access.log main;
    access_log off;
    error_log /var/log/nginx/error.log warn;


    fastcgi_buffers 256 16k; 
    fastcgi_buffer_size 128k; 
    fastcgi_connect_timeout 3s; 
    fastcgi_send_timeout 120s; 
    fastcgi_read_timeout 120s; 
    fastcgi_busy_buffers_size 256k; 
    fastcgi_temp_file_write_size 256k; 
    fastcgi_hide_header X-Powered-By;


    # Gzip Compression
    gzip on;
    gzip_disable "MSIE [1-6]\.(?!.*SV1)";
    gzip_proxied any;
    gzip_min_length 1000;
    gzip_comp_level 6;
    gzip_buffers 16 8k;
    gzip_http_version 1.0;
    gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript;
    gzip_vary on;


    open_file_cache max=10000 inactive=20s;
    open_file_cache_valid 30s;
    open_file_cache_min_uses 2;
    open_file_cache_errors on;


    include /etc/nginx/conf.d/*.conf;
}

conf.d

default.conf

端口监听的配置文件

server {
    listen   80 default;
    index index.html index.htm;
    server_name localhost docker;

    root /data/www;
    index index.php index.html index.htm;
    location / {
    index index.php;
       rewrite ^/index\.php$ - last;
          if (!-e $request_filename){
             rewrite ^(.*)$ /index.php?/$1 last;
          }
      }

    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root /data/www;
    }
    location ~ \.php {
        include fastcgi_params;
        fastcgi_pass   php-fpm:9000;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME  /data/www/$fastcgi_script_name;
    }
          location ~ \.php$ {
          index index.php;
          try_files $uri = 404;
          fastcgi_pass   php-fpm:9000;
          fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
          include        fastcgi_params;
      }

}

server {
    listen   8080 default;
    index index.html index.htm;
    server_name localhost docker;

    root /data/www;
    index index.php index.html index.htm;
    location / {
    index index.php;
       rewrite ^/index\.php$ - last;
          if (!-e $request_filename){
             rewrite ^(.*)$ /index.php?/$1 last;
          }
      }

    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root /data/www;
    }
    location ~ \.php {
        include fastcgi_params;
        fastcgi_pass   php-fpm:9000; # 这里的php-fpm 是docker-compose.yml里面的php-fpm对应的hostname
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME  /data/www/$fastcgi_script_name;
    }
          location ~ \.php$ {
          index index.php;
          try_files $uri = 404;
          fastcgi_pass   php-fpm:9000;
          fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
          include        fastcgi_params;
      }

}

结果

docker-compose up一下,等所有的下载完成之后就可以在本地的8080端口访问了

image

安装XiaoCms
image

image

ok,完成了可以代码审计了嘻嘻嘻嘻

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,544评论 6 501
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,430评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,764评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,193评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,216评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,182评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,063评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,917评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,329评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,543评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,722评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,425评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,019评论 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,671评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,825评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,729评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,614评论 2 353

推荐阅读更多精彩内容