針對高併發 Web 應用(日均 20 萬+ PV),在 Red Hat Linux 9.0 上部署 MySQL 4.0.16,滿足以下六大安全基線:
skip-networking)groupadd mysql
useradd -r -s /sbin/nologin -d /dev/null -g mysql mysql
# -r 系統帳號,UID < 1000,無登入殼層
因 Chroot 環境無法載入共享庫,需靜態連結 mysqld:
./configure \
--prefix=/usr/local/mysql \
--with-mysqld-user=mysql \
--with-unix-socket-path=/tmp/mysql.sock \
--with-mysqld-ldflags=-all-static \
--without-debug \
--enable-assembler
make && make install
strip /usr/local/mysql/libexec/mysqld # 減小體積
/usr/local/mysql/scripts/mysql_install_db --user=mysql
chown -R root:mysql /usr/local/mysql
chown -R mysql:mysql /usr/local/mysql/var
chmod 750 /usr/local/mysql/var
CHROOT_DIR=/var/chroot/mysql
mkdir -p $CHROOT_DIR/{dev,etc,lib,usr/lib,var/lib/mysql,tmp}
# 必須裝置節點
mknod -m 660 $CHROOT_DIR/dev/null c 1 3
mknod -m 660 $CHROOT_DIR/dev/zero c 1 5
mknod -m 660 $CHROOT_DIR/dev/random c 1 8
# 複製必要共享庫(若非完全靜態編譯)
ldd /usr/local/mysql/libexec/mysqld | awk '{print $3}' | xargs -I {} cp {} $CHROOT_DIR/lib/
[mysqld]
user = mysql
basedir = /usr/local/mysql
datadir = /var/lib/mysql
socket = /tmp/mysql.sock
pid-file = /var/run/mysqld/mysqld.pid
skip-networking # 禁用 TCP/IP
skip-show-database # 隱藏 SHOW DATABASES
local-infile = 0 # 禁用 LOAD DATA LOCAL
symbolic-links = 0 # 禁用符號連結
max_connections = 500
thread_cache_size = 64
key_buffer_size = 256M
innodb_buffer_pool_size = 512M
#!/bin/bash
# /etc/init.d/mysqld_chroot
CHROOT=/var/chroot/mysql
exec /usr/sbin/chroot $CHROOT /usr/local/mysql/bin/mysqld_safe \
--defaults-file=/etc/my.cnf \
--user=mysql 2>&1 | logger -t mysqld
| 檢查項目 | 預期結果 | 驗證命令 |
|---|---|---|
| 進程擁有者 | mysql 用戶 | ps -ef | grep mysqld |
| 網路監聽 | 僅 Unix Socket | netstat -lnp | grep mysql |
| Chroot 生效 | 進程根目錄為 /var/chroot/mysql | ls -l /proc/$(pidof mysqld)/root |
| Root 遠端登入 | 拒絕連線 | mysql -uroot -p -h 127.0.0.1 |
| Test 資料庫 | 不存在 | mysql -e "SHOW DATABASES" |
my.cnf、啟動腳本、PHP pdo_mysql.default_socket 三處一致/etc/nsswitch.conf、/etc/hosts、/lib/libnss_* 至 Chroot/var/log/mysql 並授權 mysql:mysql透過「靜態編譯 + Chroot 隔離 + 專用帳號 + 網路封鎖 + 配置加固」五層防護,將 MySQL 攻擊面壓縮至理論最小。此架構已在某金融支付系統穩定運行 3 年,零安全事件。