調整 Mysql/MariaDB Table 名稱大小寫不敏感

MySQL 與 MaraiDB 預設對於 table 的名稱是大小寫敏感的, 也就是 case sensitive, 但最近遇到客戶要求要將表名稱設定為大小寫不敏感, 設定上十分容易, 步驟如下

注意: 請先檢查是否有任何 Table 名稱在改為小寫後會重複的 Table, 若發生衝突 MySQL 會崩潰

編輯 MySQL/MariaDB 設定檔(不同作業系統可能會在不同目錄)

sudo vim /etc/mysql/my.cnf

找到 [mysqld] 這個 section 下方加入

lower_case_table_names = 1

接著重新啟動 MySQL/MariaDB 即可

sudo service mysql restart

不用懶人包在 MAC 上安裝 Apache, PHP, MySQL

當我們需要在 Mac 下進行網站開發時, 時常會用到 Apache, PHP, MySQL (AMP) 組合, 在 Windows 下常見的懶人包有 XAMPP, Appserv…等, 雖然 Mac 也有懶人包像是 MAMP, 但實際上 MAC 已經內建了 Apache 與 PHP , 並不需要用到懶人包, 我們只需要設定一下就可以啟動他們.

提醒

由於許多操作涉及管理員權限, 因此指令都有加上 sudo, 過程中如有詢問密碼若無特別說明則為您的 mac 使用者密碼

啟動 Apache

啟動內建的 Apache

sudo apachectl start

當我們啟動 Apache 後, 便可以訪問一下 http://127.0.0.1 檢查一下是否有正常運作

如果畫面上出現 It Works 就代表我們成功啟動 Apache 了!

整合 PHP

由於 Mac 已經內建 PHP 模組, 我們只要在 Apache 中將他啟用就可以了

使用編輯器編輯 Apache 設定檔

/etc/apache/httpd.conf

找到下面這行將前面的 # 刪除

#LoadModule php5_module libexec/apache2/libphp5.so

重新啟動 Apache

sudo apachectl restart

步驟做完了, 當然要驗證一下 PHP 是否有如期運作, 透過下面指令建立一個測試用的 php 檔案

echo "<?php phpinfo();" | sudo tee /Library/WebServer/Documents/info.php

接著我們就可以瀏覽 http://127.0.0.1/info.php 檢查一下結果

如果出現如上圖的畫面就代表 PHP 已經正常啟動了!(PHP Info 可能會因為版本不同而有些微差異)

安裝 MySQL

由於 Mac 並沒有內建 MySQL, 因此我們需要自己從官方網站下載來安裝
https://dev.mysql.com/downloads/mysql/

使用 DMG 封裝的版本進行安裝

點選下載後會出現要你登入的頁面, 但其實可以直接點選下面的 No thanks, just start my download. 直接進行下載

安裝過程的最後一步會跳出一個臨時密碼的視窗, 我們要記住這個密碼, 後續設定會用到

接著打開 Mac 的系統設定, 左下角會多出一個 MySQL 的選項, 點開 MySQL 進行設定

剛安裝完成 MySQL 並不會啟動, 我們需要手動點選 Start MySQL Server(爾後電腦重開會自動啟動)

當狀態轉變為 running 就代表啟動成功

啟動 Mysql 後, 接著要修改 root 密碼

/usr/local/mysql/bin/mysqladmin -uroot -p password '新的密碼'

指令執行期間會提示輸入 root 密碼, 這時候要輸入的密碼是安裝完成後出現的那組臨時密碼

這樣 Apache + PHP + MySQL (AMP) 的開發環境就建立完成啦!

工作目錄權限調整

Mac 的 Apache 預設工作目錄為

/Library/WebServer/Documents/

由於預設的擁有者是 root, 這會導致我們無法直接寫入檔案, 可以透過以下指令將所有權變成你的

sudo chown -R 你的mac使用者 /Library/WebServer/Documents/

使用 CTFd 架設 CTF 平台 (Apache + mod_wsgi + MySQL)

這陣子因為課程需要建立一個 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不會正常運作

重設 mysql root 密碼(Mysql 5.7.5 以下, 5.7.6 以上)

由於工作內容時常接手不明主機, 找 root 密碼早已是家常便飯, 這邊與各位分享 Mysql <= 5.7.5 以及 Mysql >= 5.7.6 的 root 重設方法

1. Stop Service

停止執行中的 mysql

service mysql stop

2. Run Mysql in single-user mode

進入單人模式

mysqld_safe --skip-grant-tables --skip-networking &

參數解釋:
* –skip-grant-tables: 不載入權限表
* –skip-networking: 關閉網路連線(遠端使用者將無法連入主機)

警告: 單人模式下所有人都可以免密碼存取 root, 若您的環境是共用系統, 為避免造成資安上的疑慮, 請務必將主機上其他人請下線.

3. Reset Root Password

3.1 Mysql <= 5.7.5

SET PASSWORD FOR 'root'@'localhost' = PASSWORD('root_password');

3.2 Mysql >= 5.7.6

UPDATE mysql.user SET authentication_string = PASSWORD('root_password')
WHERE User = 'root' AND Host = 'localhost';

4. Flush Privileges

FLUSH PRIVILEGES;
exit;

5. Restart mysql

重新執行 mysql, 使其恢復正常模式

service mysql stop
service mysql start

6. Finish

現在可以使用新的 root 密碼進行登入了~

取得及修改 cpanel mysql 的 root 密碼

Cpanel 在主機管理系統的市佔率極高, 在路上很容易遇到 cpanel 主機, 雖然操作作業通常都由 cpanel 的後台直接進行, 但有時候我們需要直接從 cli 中去對資料庫操作, 這時候就會需要 mysql root password, 而 cpanel 的所有服務密碼都是獨立的, 因此 WHM 的 root password 並不適用.

cpanel 會將 root 密碼存在 /root/.my.conf 當中, 檔案內的 password 後方就是 root 密碼.

[client]
password="#kdu^39dk!;dl"
user=root

若想要修改 mysql 的密碼, 在修改密碼後回填 /root/.my.conf 以及重啟 DB, cpanel 就會使用新密碼進行操作.