LNMP权限设置指南
在LNMP(Linux+Nginx+MySQL+PHP)环境中,合理的权限设置是保障系统安全与稳定的核心环节。以下从基础用户管理、各组件权限配置及安全增强措施三方面详细说明:
避免使用root用户运行服务,为Nginx、MySQL、PHP-FPM创建专用用户与组,实现权限隔离。
sudo groupadd www-data # 创建www-data组
sudo useradd -g www-data www-data # 创建www-data用户并加入www-data组
sudo groupadd mysql # 创建mysql组
sudo useradd -g mysql mysql # 创建mysql用户并加入mysql组
Nginx作为Web服务器,需确保其能读取网站文件,同时限制不必要的写入权限。
/etc/nginx/nginx.conf)及站点配置文件(/etc/nginx/sites-available/*)需设置为root:root(仅root可修改),权限为644(用户可读写,组与其他用户只读)。sudo chown root:root /etc/nginx/nginx.conf
sudo chmod 644 /etc/nginx/nginx.conf
sudo find /etc/nginx/sites-available/ -type f -exec chmod 644 {} \;
/var/www/html)的所有者应为Nginx运行用户(通常为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 {} \;
user指令与网站文件所有者一致(如user www-data;)。MySQL作为数据库服务,需严格控制用户权限,避免未授权访问。
/var/lib/mysql)的所有者应为mysql用户,权限设为750(仅mysql用户可写入,组用户可读)。sudo chown -R mysql:mysql /var/lib/mysql
sudo chmod -R 750 /var/lib/mysql
/etc/mysql/my.cnf)需设置为mysql:mysql,权限为640(仅root与mysql用户可读)。sudo chown mysql:mysql /etc/mysql/my.cnf
sudo chmod 640 /etc/mysql/my.cnf
SELECT、INSERT),并限制访问主机为localhost(避免远程访问)。CREATE DATABASE mydb;
CREATE USER 'myuser'@'localhost' IDENTIFIED BY 'StrongPassword123!';
GRANT SELECT, INSERT, UPDATE ON mydb.* TO 'myuser'@'localhost';
FLUSH PRIVILEGES;
Host改为localhost)。PHP-FPM作为PHP处理器,需与Nginx用户一致,确保能读取网站文件并执行PHP脚本。
/etc/php/7.x/fpm/pool.d/www.conf)需设置为root:root,权限为644。sudo chown root:root /etc/php/7.x/fpm/pool.d/www.conf
sudo chmod 644 /etc/php/7.x/fpm/pool.d/www.conf
www.conf中的user和group指令,与Nginx用户一致(如www-data)。user = www-data
group = www-data
www-data用户读取与执行(644),目录需允许进入(755)。对于需要写入的目录(如上传目录/var/www/html/uploads),可设置为775(需确保组权限正确)。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 {} \;
sudo chmod 775 /var/www/html/uploads # 示例:允许上传目录写入
/var/log/php7.x-fpm.log)的所有者应为www-data,权限设为640(允许用户写入,组用户可读)。sudo chown www-data:www-data /var/log/php7.x-fpm.log
sudo chmod 640 /var/log/php7.x-fpm.log
user指令、PHP-FPM的user/group指令及网站文件所有者三者一致(如均为www-data),避免502 Bad Gateway错误。若系统启用SELinux或AppArmor,需调整安全策略以允许服务访问必要资源。
httpd_sys_content_t(允许Web服务器读取),上传目录设置为httpd_sys_rw_content_t(允许写入)。sudo chcon -Rv --type=httpd_sys_content_t /var/www/html
sudo chcon -Rv --type=httpd_sys_rw_content_t /var/www/html/uploads
find命令定期检查系统权限,修复异常(如全局可写的文件或目录)。sudo find / -type d -perm 777 -exec chmod 755 {} \; # 修复全局可写目录
sudo find / -type f -perm 666 -exec chmod 644 {} \; # 修复全局可写文件
sudo apt update && sudo apt upgrade -y
ufw或iptables限制端口访问,仅允许HTTP(80)、HTTPS(443)等必要端口。sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw enable
通过以上步骤,可实现LNMP环境的精细化权限管理,在保障安全的同时满足服务运行需求。权限设置需遵循“最小权限原则”,即仅授予服务与用户完成工作所需的最低权限。