手動編譯安裝通常在 /usr/local/apache2/conf/php.ini;套件管理安裝在 /etc/php.ini 或 /etc/php/版本/fpm/php.ini。修改後需重啟 PHP-FPM/Apache。
| 指令 | 建議值 | 說明 |
|---|---|---|
safe_mode | On | 啟用安全模式(PHP 5.4 移除,舊版適用),限制危險函數、檔案操作權限。 |
safe_mode_gid | Off | 開啟時同群組可存取檔案,關閉較嚴格。 |
safe_mode_exec_dir | /tmp/cmd 或 /usr/www | 安全模式下允許執行程式的目錄,建議指向專用空目錄或網站根目錄。 |
safe_mode_include_dir | /usr/www/include/ | 安全模式下允許 include 的目錄。 |
open_basedir | /usr/www/:/tmp/ | 關鍵:限制 PHP 僅能存取指定目錄,有效防範木馬跨目錄讀寫。 |
disable_functions | 見下表 | 禁用危險函數,防 WebShell。 |
expose_php | Off | 隱藏 HTTP 標頭 X-Powered-By: PHP/x.x.x,減少資訊洩露。 |
register_globals | Off | 必關:防止變量注入(PHP 5.4 移除,舊版必設)。 |
magic_quotes_gpc | On | 自動轉義 ' " \ NULL(PHP 5.4 移除,現代用預處理語句替代)。 |
display_errors | Off | 生產環境關閉錯誤顯示,避免洩露路徑、SQL。 |
error_reporting | E_ALL & ~E_NOTICE & ~E_DEPRECATED | 記錄級別,生產環境建議 E_ERROR | E_WARNING | E_PARSE。 |
log_errors | On | 啟用錯誤日誌。 |
error_log | /usr/local/apache2/logs/php_error.log | 日誌路徑,確保 Apache/PHP-FPM 使用者可寫。 |
disable_functions 清單; 執行命令類
disable_functions = exec,passthru,shell_exec,system,proc_open,popen,curl_exec,curl_multi_exec,parse_ini_file,show_source
; 檔案系統類(視業務需求保留部分)
disable_functions = chdir,chroot,dir,getcwd,opendir,readdir,scandir,fopen,unlink,delete,copy,mkdir,rmdir,rename,file,file_get_contents,fputs,fwrite,chgrp,chmod,chown
; 資訊洩露類
disable_functions = phpinfo,phpversion,get_cfg_var,ini_get_all,ini_get,ini_set,get_loaded_extensions,get_extension_funcs
# 建立無權限帳號
useradd -r -s /sbin/nologin mysqlstart
# 資料目錄授權
chown -R mysqlstart:mysqlstart /data/mysql
# systemd 服務修改 User=mysqlstart
systemctl edit mysqld
# [Service]
# User=mysqlstart
# Group=mysqlstart
systemctl daemon-reload && systemctl restart mysqld
# 建立專用帳號
useradd -r -s /sbin/nologin apache
# httpd.conf 修改
User apache
Group apache
# 目錄權限精細控制:僅授予必要讀/寫權限
net user apache ****microsoft /add
net localgroup users apache /del
# 服務屬性 → 登入 → 此帳號 → 輸入 apache 帳密
# 重啟 Apache 服務
open_basedir、disable_functions、expose_php=Off、錯誤不顯示只記錄。