假設源碼安裝至 /usr/local/mysql,數據目錄 /usr/local/mysql/var,啟動用戶 mysql:
| 路徑 | 擁有者:組 | 權限 | 說明 |
|---|---|---|---|
| /usr/local/mysql/var | mysql:mysql | 700 (drwx------) | 數據目錄:僅 mysql 用戶可讀寫執行 |
| /usr/local/mysql/var/* | mysql:mysql | 700 | 各庫目錄 |
| /usr/local/mysql/var/*/*.MYD | mysql:mysql | 600 (-rw-------) | 數據文件 |
| /usr/local/mysql/var/*/*.MYI | mysql:mysql | 600 | 索引文件 |
| /usr/local/mysql/var/*/*.frm | mysql:mysql | 600 | 表結構定義 |
chown -R mysql:mysql /usr/local/mysql/var
chmod -R go-rwx /usr/local/mysql/var
--user=mysql,拒絕 root 啟動--user=root,極度危險:
-- root 啟動導致的災難性後果
LOAD DATA INFILE '/etc/passwd' INTO TABLE t; -- 讀取系統敏感文件
SELECT '' INTO OUTFILE '/var/www/shell.php'; -- 寫 WebShell
MySQL 雖限制 LOAD DATA 僅能讀全局可讀文件、INTO OUTFILE 不覆蓋文件,但 root 權限下繞過手段極多。
# 危險操作:密碼明文入歷史
mysqldump -uroot -pSecret123 db > backup.sql
mysql -uroot -pSecret123
密碼寫入 ~/.bash_history、~/.mysql_history,被讀取即洩露。
# 1. 交互式輸入密碼(推薦)
mysqldump -uroot -p db > backup.sql
# Enter password: ********
# 2. 配置文件 ~./my.cnf(僅限受信環境)
[client]
password = Secret123
# 3. 禁用歷史記錄(極簡環境)
rm -f ~/.bash_history ~/.mysql_history
ln -s /dev/null ~/.bash_history
ln -s /dev/null ~/.mysql_history
mysql.user 表PASSWORD() 哈希存儲,洩露後仍可離線破解,需強密碼策略FILE/PROCESS/SUPER/SHUTDOWNSELECT User, Host, authentication_string FROM mysql.user;
# 1. 登錄
mysql -uroot -p
# 2. 修改(5.7.6+ 推薦)
ALTER USER 'root'@'localhost' IDENTIFIED BY 'NewStrongPass!2024';
# 或兼容舊版
UPDATE mysql.user SET authentication_string = PASSWORD('NewStrongPass!2024') WHERE User = 'root' AND Host = 'localhost';
# 3. 刷新生效
FLUSH PRIVILEGES;