docker基於lamp的ctf web題目容器

qianby發表於2021-09-09

0x00 目的

實驗室要做ctf比賽平臺,我負責包裝上傳賽題的工作,使用docker保證執行環境的隔離.

0x01 lamp介紹&run

LAMP指的Linux(作業系統)、Apache HTTP 伺服器,MySQL(有時也指MariaDB,資料庫軟體和PHP(有時也是指Perl或Python 的第一個字母,一般用來建立web應用平臺。
找到一個合適的lamp映象

docker search lamp

會出現很多,複製去找到相關介紹,確定具體使用哪種.

這裡使用linode/lamp
docker run -dt -p PORT:80 -v /opt/web:/var/www/web linode/lamp#-v outdir:indir#這裡將容器內的/var/www/web對映到本機的/Documents/web#具體可以參考https://www.cnblogs.com/ivictor/p/4834864.html#注:若對映到內部有內容的資料夾則會將內部資料夾的內容清空(我外部用的是一個空資料夾)

0x02 進入容器配置apache2

docker exec -it CONTAINERID /bin/bash#CONTAINERID使用docker ps 檢視

參考進行配置

進入容器後
service apache2 start
service mysql start#開啟apache2和mysql服務
修改連線數等配置
sudo cp /etc/apache2/apache2.conf /etc/apache2/apache2.conf.bak #做備份sudo nano /etc/apache2/apache2.conf #使用nano開啟配置檔案

拉到最後

   <IfModule mpm_prefork_module>
       StartServers 4
       MinSpareServers 20
       MaxSpareServers 40
       MaxClients 200
       MaxRequestsPerChild 4500
   </IfModule>
StartServers #apache啟動時候預設開始的子程式數MinSpareServers #最小的閒置子程式數MaxSpareServers #最大的閒置子程式數MaxClients #控制最大程式數MaxConnectionsPerChild 
#設定的是每個子程式可處理的請求數。#每個子程式在處理了“MaxConnectionsPerChild”個請求後將自動銷燬。#0意味著無限,即子程式永不銷燬。#雖然預設設為0可以使每個子程式處理更多的請求,但如果設成非零值也有兩點重要的好處:#1、可防止意外的記憶體洩漏。#2、在伺服器負載下降的時侯會自動減少子程式數。因此,可根據伺服器的負載來調整這個值。#在Apache2.3.9之前稱之為MaxRequestsPerChild。
ctrl+x退出,Y儲存,ENTER退出
重啟apache2
service restart apache2
修改網頁根目錄等
sudo nano /etc/apache2/sites-available/example.com.conf
<VirtualHost *:80>  # Admin email, Server Name (domain name), and any aliases
  ServerAdmin webmaster@example.com
  ServerName  example.com
  ServerAlias   # Index file and Document Root (where the public files are located)
  DirectoryIndex index.html index.php
  DocumentRoot /var/www/html/example.com/public_html  # Log file locations
  LogLevel warn
  ErrorLog  /var/www/html/example.com/log/error.log
  CustomLog /var/www/html/example.com/log/access.log combined
</VirtualHost>#這裡我對DocumentRoot,ErrorLog,CustomLog進行了修改#由於我對映的目錄是/var/www/web,所以把DocumentRoot 改為/var/www/web#ErrorLog改為/var/www/log/error.log#CustomLog改為/var/www/log/access.log combined
ctrl+x退出,Y儲存,ENTER退出
sudo a2ensite example.com.confservice restart apache2#重讀配置檔案

0x03 配置MySQL

sudo mysql_secure_installation

這裡密碼是Admin2015,官方沒寫,找了很久!!

基本是一路按照預設的一直ENTER就行(y和n大寫的就是預設選項)
service restart mysql#重啟mysql

0x04 修改目錄使用者組

許可權介紹
https://blog.csdn.net/u013197629/article/details/73608613

cd /var/www
ps aux 
#顯示其他使用者啟動的程式(a)#檢視系統中屬於自己的程式(x)#啟動這個程式的使用者和它啟動的時間(u)chown -R www-data:www-data web#這裡透過ps aux看到apache服務是www-data使用者啟動的#將web資料夾加入www-data使用者組

0x05 打包push到私有registry

exit  #退出容器
儲存對容器的更改
docker commit CONTAINERID USERNAME/NAME#USERNAME是一般化的規定,一般情況是使用者名稱,就是隨意起的自己的名字#NAME是倉庫名,我這裡使用的事lamp
給映象加標籤
docker tag IMAGEID IP(or 127.0.0.1)/NAME:VERSION#具體看上一篇
傳到registry
docker push IP(or 127.0.0.1)/NAME:VERSION

0x06 檔案傳輸

我是mac使用ssh連結到遠端伺服器
使用scp傳輸檔案
由於容器內對映
直接傳入Ubuntu的資料夾
在Ubuntu內更改資料夾許可權

sudo chmod 777 /opt/web

mac內

scp OUTFILE USER@IP:/opt/web



作者:YuriPuck
連結:


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/3549/viewspace-2820934/,如需轉載,請註明出處,否則將追究法律責任。

相關文章