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

MySQL安裝目錄權限硬化指南:最小權限原則構建內部安全防線

     編輯:MySQL 資料庫相關知識

安全原則:權限最小化與職責分離

數據庫安全是持續過程而非一次性配置。內部安全聚焦文件系統權限控制,確保只有MySQL進程擁有者能讀寫關鍵文件,防止本地提權與橫向移動。

目錄所有權規劃

方案A:純MySQL用戶擁有(簡單環境)

chown -R mysql:mysql /usr/local/mysql

方案B:Root擁有程序目錄,MySQL僅擁有數據目錄(生產推薦)

chown -R root:mysql /usr/local/mysql
chown -R mysql:mysql /usr/local/mysql/data

原則:代碼目錄root擁有防篡改,數據目錄mysql擁有保障運行寫入。

目錄權限矩陣(八進制/符號雙標註)

路徑八進制符號模式說明
/usr/local/mysql 755 u=rwx,go=rx 管理員全控,其他可讀執行進入子目錄
/usr/local/mysql/bin 755 u=rwx,go=rx 二進制文件需執行權限
/usr/local/mysql/libexec 700 u=rwx,go-rwx 核心執行文件mysqld,僅屬主可訪問
/usr/local/mysql/data 700 (遞歸) go-rwx (遞歸) 數據文件、日志、socket絕對機密

特殊文件處理

  • Socket文件/tmp/mysql.sock:確保/tmp設置粘滯位(chmod +t /tmp),防止用戶刪除他人socket導致DoS
  • 配置文件/etc/my.cnf:全局可讀(644),嚴禁存放密碼;用戶級~/.my.cnf必須600
  • 日志目錄:若獨立掛載,同data目錄權限

驗證與審計腳本

#!/bin/bash
# 檢查關鍵目錄權限
check_perm() {
    stat -c "%a %n" "$1" | awk '{if ($1 != "'$2'") print "ALERT: " $0 " expected '$2'"}'
}
check_perm /usr/local/mysql 755
check_perm /usr/local/mysql/bin 755
check_perm /usr/local/mysql/libexec 700
find /usr/local/mysql/data -maxdepth 1 -exec stat -c "%a %n" {} \; | awk '$1 != 700 {print "DATA ALERT: " $0}'

啟動約束效果

配置完成後,只有mysql用戶能啟動服務。任何其他用戶嘗試啟動將因無法讀取libexec/mysqld、寫入data目錄、綁定socket而失敗,有效阻斷非授權實例運行。

Windows平台對應策略

  • 使用ICACLS設置NTFS ACL:icacls "C:\MySQL" /inheritance:r /grant:r "SYSTEM:(OI)(CI)F" "Administrators:(OI)(CI)F" "mysql:(OI)(CI)R"
  • 數據目錄:icacls "C:\MySQL\data" /grant:r "mysql:(OI)(CI)F" /remove "Users" "Authenticated Users"
  • 服務登錄賬號設置為專用mysql服務賬號,非LocalSystem
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved