這陣子因為課程需要建立一個 CTF 平台, 最後決議使用 CTFd 來架設這次的CTF計分板, 安裝的過程中踩了不少的地雷, 又因為懶得裝 Nginx 改採 Apache + mod_wsgi 結果冒出了更多問題, 真的是人不作死就不會死.
本篇文章假定各位已經裝好 Apache 與 MySQL.
關於 CTFd
CTFd 是 isislab 推出的 open source jeopardy style CTF platform, 使用上非常容易上手, 運行要求十分輕量且容易客製化.
DEMO: CTFd.io
環境資訊
Python 2.7
Apache 2.4
Debian 8
1. 環境準備
sudo apt-get update
sudo apt-get install build-essential libffi-dev git libapache2-mod-wsgi python-pip python-dev
a2enmod mod_wsgi
2. 取的最新版 CTFd
git clone https://github.com/isislab/CTFd.git
cd CTFd
3. 安裝相依
pip install -r requirements.txt
pip install -U sqlalchemy
4. 設定啟動腳本
在 CTFd 下建立 apache.py, 讓 Apache 使用這個 py 來啟動服務
import sys
sys.path.insert(0, '/CTFd') # /CTFd 要改成你的 CTFd 主目錄的路徑, 範例是放在 /CTFd
from CTFd import create_app
application = create_app()
5. 設定 Apache
DocumentRoot /CTFd # CTFd 所在目錄
WSGIDaemonProcess CTFd user=www-data group=www-data threads=5 # user/group 決定 Apache 用哪個帳號運行這支程式
WSGIScriptAlias / /CTFd/apache.py # 前面步驟設定的啟動腳本
<Directory /CTFd>
WSGIProcessGroup CTFd
WSGIApplicationGroup %{GLOBAL}
Order allow,deny
Allow from all
Require all granted # Apache 2.4 預設禁止目錄在 /var/www 外, 這行可以解除這項限制
</Directory>
6. 設定資料庫連線(Mysql)
建立資料庫的時候編碼記得選擇 utf8mb4_bin (若選擇general將會導致計分板無法正確取得題目類型), 這樣就可以讓 CTFd 支援 Emoji 和中文
編輯 CTFd/CTFd/config.py
SQLALCHEMY_DATABASE_URI = "mysql://帳號:密碼@主機位置/資料庫名稱?charset=utf8mb4"
這邊無需導入資料表, 在網站第一次啟動的時候程式會自動建立必要資料表以及產生Admin
7. 重新啟動 Apache
systemctl restart apache2
備註
由於 CTFd 有檔案上傳與Log, 要記得將 CTFd 目錄的擁有者設定成 Apache 使用的帳號, 不然CTFd不會正常運作