首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

MySQL 安全加固實戰:Chroot 隔離、最小權限、網路限制與審計強化

     編輯:MySQL 資料庫相關知識

安全需求清單

  1. MySQL 運行於 Chroot 隔離環境;
  2. mysqld 進程使用專屬無殼層使用者/群組;
  3. 修改 root 帳號名稱並設定強密碼;
  4. 禁用網路連線(skip-networking 或 bind-address=127.0.0.1);
  5. 禁止 nobody/匿名帳號登入;
  6. 移除 test 資料庫與匿名使用者。

建立專屬帳號

groupadd mysql
useradd -r -s /sbin/nologin -M -g mysql -c "MySQL Server" mysql

原始碼編譯安裝(支援靜態連結以利 Chroot)

wget https://downloads.mysql.com/archives/get/p/23/file/mysql-4.0.16.tar.gz
tar zxvf mysql-4.0.16.tar.gz
cd mysql-4.0.16
./configure --prefix=/usr/local/mysql \
    --with-mysqld-user=mysql \
    --with-unix-socket-path=/tmp/mysql.sock \
    --with-mysqld-ldflags=-all-static
make && make install
strip /usr/local/mysql/libexec/mysqld
scripts/mysql_install_db
chown -R root /usr/local/mysql
chown -R mysql /usr/local/mysql/var
chgrp -R mysql /usr/local/mysql

關鍵:--with-mysqld-ldflags=-all-static 產生靜態連結二進位,Chroot 時無需複製動態函式庫。

Chroot 環境建立

# 建立目錄結構
mkdir -p /chroot/mysql/{dev,etc,lib,usr/local/mysql,var/lib/mysql,tmp}
# 複製必要檔案
cp /usr/local/mysql/bin/mysqld /chroot/mysql/usr/local/mysql/bin/
cp /usr/local/mysql/share/mysql/charsets /chroot/mysql/usr/local/mysql/share/mysql/ -r
cp /etc/passwd /etc/group /chroot/mysql/etc/
# 建立裝置節點
mknod -m 666 /chroot/mysql/dev/null c 1 3
mknod -m 666 /chroot/mysql/dev/zero c 1 5
# 掛載 /tmp(需與 /chroot 同分區)
mount --bind /tmp /chroot/mysql/tmp

啟動參數與 my.cnf 強化

[mysqld]
user=mysql
basedir=/usr/local/mysql
datadir=/var/lib/mysql
socket=/tmp/mysql.sock
pid-file=/var/run/mysqld.pid
skip-networking
bind-address=127.0.0.1
skip-show-database
local-infile=0
secure-file-priv=/tmp
log-error=/var/log/mysqld.log
slow-query-log=1
slow-query-log-file=/var/log/slow.log
long-query-time=2

啟動腳本整合 Chroot

# /etc/init.d/mysql 片段
start() {
    /usr/sbin/chroot /chroot/mysql /usr/local/mysql/bin/mysqld_safe \
        --user=mysql --datadir=/var/lib/mysql --socket=/tmp/mysql.sock \
        --pid-file=/var/run/mysqld.pid &
}

安裝後必做收尾

mysql -u root -p
mysql> RENAME USER 'root'@'localhost' TO 'dbadmin'@'localhost';
mysql> SET PASSWORD FOR 'dbadmin'@'localhost' = PASSWORD('ComplexPass!2024');
mysql> DELETE FROM mysql.user WHERE User='';
mysql> DROP DATABASE test;
mysql> FLUSH PRIVILEGES;

至此 MySQL 已在受限、隔離、最小權限環境下安全運行。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved