LNMP在Debian上的权限设置指南
LNMP(Linux+Nginx+MySQL+PHP)环境的权限设置需遵循最小权限原则:Web进程(Nginx/PHP-FPM)仅需对网站文件有必要的读/写权限,数据库用户仅能访问其负责的数据库,避免使用root用户运行服务。
www-data用户/组运行Nginx和PHP-FPM。若未存在,可通过以下命令创建(-r表示系统用户,-g指定主组):sudo useradd -r -g www-data www-data
www-data组(如用户dev):sudo usermod -aG www-data dev
加入后需重新登录生效,该用户可通过sudo -u www-data执行Web相关操作。网站根目录权限:
网站文件(如/var/www/html)的所有权需设为www-data:www-data,目录权限为755(允许所有者读/写/执行,其他用户读/执行),文件权限为644(允许所有者读/写,其他用户读):
sudo chown -R www-data:www-data /var/www/html
sudo find /var/www/html -type d -exec chmod 755 {} \;
sudo find /var/www/html -type f -exec chmod 644 {} \;
敏感文件特殊处理:
/etc/nginx/nginx.conf、PHP的/etc/php/8.2/fpm/php.ini):权限设为644(避免泄露敏感配置)。/var/www/html/uploads):若需写入,可单独设置目录权限为775(需确保www-data组有写权限):sudo chmod 775 /var/www/html/uploads
禁止敏感目录访问:
通过Nginx配置禁止访问.htaccess、wp-config.php等敏感文件:
location ~ /\.ht {
deny all;
}
location ~* wp-config\.php$ {
deny all;
}
修改后重启Nginx:sudo systemctl restart nginx。
进程用户设置:
确保Nginx以www-data用户运行(默认配置)。编辑/etc/nginx/nginx.conf,找到user指令并确认:
user www-data;
配置文件权限:
Nginx配置文件(/etc/nginx/sites-available/下的站点文件)权限设为644,避免误修改导致服务异常:
sudo chmod 644 /etc/nginx/sites-available/*
日志目录权限:
Nginx日志目录(/var/log/nginx)所有权设为www-data:adm(adm组用于系统日志管理),权限设为755:
sudo chown -R www-data:adm /var/log/nginx
sudo chmod 755 /var/log/nginx
重启Nginx生效:
sudo systemctl restart nginx
初始安全设置:
安装MariaDB后,运行mysql_secure_installation脚本,完成以下操作:
DELETE FROM mysql.user WHERE User='';)。DELETE FROM mysql.user WHERE User='root' AND Host NOT IN ('localhost', '127.0.0.1');)。DROP DATABASE IF EXISTS test;)。FLUSH PRIVILEGES;)。创建数据库用户:
仅为特定数据库授权,避免使用root账户。例如,创建用户webuser并授权数据库mydb:
CREATE DATABASE mydb;
CREATE USER 'webuser'@'localhost' IDENTIFIED BY 'StrongPassword123!';
GRANT ALL PRIVILEGES ON mydb.* TO 'webuser'@'localhost';
FLUSH PRIVILEGES;
配置文件权限:
MariaDB配置文件(/etc/mysql/mariadb.conf.d/50-server.cnf)权限设为644,保护数据库敏感配置:
sudo chmod 644 /etc/mysql/mariadb.conf.d/50-server.cnf
重启MariaDB生效:
sudo systemctl restart mariadb
/etc/php/8.2/fpm/pool.d/www.conf),确保user和group设置为www-data:user = www-data
group = www-data
/run/php/php8.2-fpm.sock)的权限允许Nginx访问:sudo chown www-data:www-data /run/php/php8.2-fpm.sock
sudo chmod 660 /run/php/php8.2-fpm.sock
若使用TCP端口(如127.0.0.1:9000),需确保防火墙允许该端口(sudo ufw allow 9000/tcp)。sudo systemctl restart php8.2-fpm
sudo apt update && sudo apt upgrade -y
ufw限制入站流量,仅允许HTTP(80)、HTTPS(443)和SSH(22)端口:sudo apt install ufw
sudo ufw enable
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw allow 22/tcp
sudo ufw deny from all # 默认拒绝其他流量
/etc/ssh/sshd_config),设置:PermitRootLogin no
重启SSH服务:sudo systemctl restart ssh。