LNMP(Linux + Nginx + MySQL + PHP)作为常见的Web服务架构,其安全设置需要从系统层、服务层和应用层多维度加固。以下是关键安全要点及实施建议:
最小化安装与更新
yum --setopt=install_weak_deps=False install package
(CentOS)apt update && apt upgrade -y
(Debian/Ubuntu)用户与权限控制
/etc/ssh/sshd_config
中PermitRootLogin no
useradd -r -s /sbin/nologin www-service
防火墙配置
bash
ufw allow 22/tcp
ufw allow 80,443/tcp
ufw enable
文件系统防护
chattr +i /etc/passwd /etc/shadow
隐藏版本信息
server_tokens off;
more_clear_headers 'Server';
限制HTTP方法
if ($request_method !~ ^(GET|HEAD|POST)$ ) {
return 405;
}
防目录遍历与敏感文件访问
location ~* \.(env|log|htaccess)$ { deny all; }
location ~ /\. { deny all; access_log off; log_not_found off; }
SSL/TLS强化
nginx
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers 'ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384';
防DDoS基础
limit_req_zone $binary_remote_addr zone=one:10m rate=10r/s;
location / { limit_req zone=one burst=20; }
运行账户隔离
chown -R mysql:mysql /var/lib/mysql
安全初始化
mysql_secure_installation
移除测试数据库、匿名用户等权限最小化
CREATE USER 'appuser'@'localhost' IDENTIFIED BY 'StrongP@ssw0rd!';
GRANT SELECT,INSERT ON appdb.* TO 'appuser'@'localhost';
日志审计
# my.cnf
[mysqld]
log-error=/var/log/mysql/mysql-error.log
log-queries-not-using-indexes=1
禁用危险函数
disable_functions = exec,passthru,shell_exec,system,proc_open,popen
文件权限控制
open_basedir = /var/www/html:/tmp
防信息泄露
expose_php = Off
display_errors = Off
log_errors = On
Session安全
session.cookie_httponly = 1
session.cookie_secure = 1 # 启用HTTPS时使用
代码安全
htmlspecialchars()
防XSS)文件上传限制
client_max_body_size 10M;
upload_max_filesize = 10M
定期备份
# 数据库备份
mysqldump -u root -p --opt --routines appdb > /backups/appdb_$(date +%F).sql
# 网站文件备份
tar czf /backups/web_$(date +%F).tar.gz /var/www/html
日志集中分析
ini
[nginx-http-auth]
enabled = true
filter = nginx-auth
action = iptables[name=nginx, port=http, protocol=tcp]
定期漏洞扫描
服务隔离
docker run --read-only
# 1. 系统更新
apt update && apt upgrade -y
# 2. 防火墙设置
ufw allow 22/tcp && ufw allow 80,443/tcp && ufw enable
# 3. 创建专用用户
useradd -r -s /sbin/nologin webuser
chown -R webuser:webuser /var/www/html
# 4. 一键安全MySQL
mysql_secure_installation
# 5. 部署Let's Encrypt证书
certbot --nginx -d example.com
通过以上分层防护策略,可显著提升LNMP环境的安全性。建议结合具体业务需求调整配置,并定期进行安全审计。