0x00 目的
實(shí)驗(yàn)室要做ctf比賽平臺,我負(fù)責(zé)包裝上傳賽題的工作,使用docker保證運(yùn)行環(huán)境的隔離.
0x01 lamp介紹&run
LAMP指的Linux(操作系統(tǒng))、Apache HTTP 服務(wù)器欲主,MySQL(有時也指MariaDB逝嚎,數(shù)據(jù)庫軟件和PHP(有時也是指Perl或Python 的第一個字母岛蚤,一般用來建立web應(yīng)用平臺。
找到一個合適的lamp鏡像
docker search lamp
會出現(xiàn)很多,復(fù)制去https://hub.docker.com/找到相關(guān)介紹,確定具體使用哪種.
這里使用linode/lamp
docker run -dt -p PORT:80 -v /opt/web:/var/www/web linode/lamp
#-v outdir:indir
#這里將容器內(nèi)的/var/www/web映射到本機(jī)的/Documents/web
#具體可以參考https://www.cnblogs.com/ivictor/p/4834864.html
#注:若映射到內(nèi)部有內(nèi)容的文件夾則會將內(nèi)部文件夾的內(nèi)容清空(我外部用的是一個空文件夾)
0x02 進(jìn)入容器配置apache2
docker exec -it CONTAINERID /bin/bash
#CONTAINERID使用docker ps 查看
參考https://www.linode.com/docs/websites/hosting-a-website-ubuntu-18-04/#install-mysql進(jìn)行配置
進(jìn)入容器后
service apache2 start
service mysql start
#打開apache2和mysql服務(wù)
修改連接數(shù)等配置
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啟動時候默認(rèn)開始的子進(jìn)程數(shù)
MinSpareServers #最小的閑置子進(jìn)程數(shù)
MaxSpareServers #最大的閑置子進(jìn)程數(shù)
MaxClients #控制最大進(jìn)程數(shù)
MaxConnectionsPerChild
#設(shè)置的是每個子進(jìn)程可處理的請求數(shù)懈糯。
#每個子進(jìn)程在處理了“MaxConnectionsPerChild”個請求后將自動銷毀。
#0意味著無限单雾,即子進(jìn)程永不銷毀赚哗。
#雖然缺省設(shè)為0可以使每個子進(jìn)程處理更多的請求,但如果設(shè)成非零值也有兩點(diǎn)重要的好處:
#1硅堆、可防止意外的內(nèi)存泄漏屿储。
#2、在服務(wù)器負(fù)載下降的時侯會自動減少子進(jìn)程數(shù)渐逃。因此够掠,可根據(jù)服務(wù)器的負(fù)載來調(diào)整這個值。
#在Apache2.3.9之前稱之為MaxRequestsPerChild茄菊。
ctrl+x退出,Y保存,ENTER退出
重啟apache2
service restart apache2
修改網(wǎng)頁根目錄等
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 www.example.com
# 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進(jìn)行了修改
#由于我映射的目錄是/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.conf
service restart apache2
#重讀配置文件
0x03 配置MySQL
sudo mysql_secure_installation
這里密碼是Admin2015,官方?jīng)]寫,找了很久!!
基本是一路按照默認(rèn)的一直ENTER就行(y和n大寫的就是默認(rèn)選項)
service restart mysql
#重啟mysql
0x04 修改目錄用戶組
權(quán)限介紹
https://blog.csdn.net/u013197629/article/details/73608613
cd /var/www
ps aux
#顯示其他用戶啟動的進(jìn)程(a)
#查看系統(tǒng)中屬于自己的進(jìn)程(x)
#啟動這個進(jìn)程的用戶和它啟動的時間(u)
chown -R www-data:www-data web
#這里通過ps aux看到apache服務(wù)是www-data用戶啟動的
#將web文件夾加入www-data用戶組
0x05 打包push到私有registry
exit #退出容器
保存對容器的更改
docker commit CONTAINERID USERNAME/NAME
#USERNAME是一般化的規(guī)定,一般情況是用戶名,就是隨意起的自己的名字
#NAME是倉庫名,我這里使用的事lamp
給鏡像加標(biāo)簽
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鏈接到遠(yuǎn)程服務(wù)器
使用scp傳輸文件
由于容器內(nèi)映射
直接傳入Ubuntu的文件夾
在Ubuntu內(nèi)更改文件夾權(quán)限
sudo chmod 777 /opt/web
mac內(nèi)
scp OUTFILE USER@IP:/opt/web