温馨提示×

LNMP如何权限设置

小樊
47
2025-11-08 11:16:45
栏目: 编程语言

LNMP权限设置指南
在LNMP(Linux+Nginx+MySQL+PHP)环境中,合理的权限设置是保障系统安全与稳定的核心环节。以下从基础用户管理各组件权限配置安全增强措施三方面详细说明:

一、基础用户与组管理

避免使用root用户运行服务,为Nginx、MySQL、PHP-FPM创建专用用户与组,实现权限隔离。

  • 创建用户与组(以Ubuntu为例):
    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权限设置

Nginx作为Web服务器,需确保其能读取网站文件,同时限制不必要的写入权限。

  • 配置文件权限:Nginx主配置文件(/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 {} \;
    
  • 用户一致性:确保Nginx配置文件中的user指令与网站文件所有者一致(如user www-data;)。

三、MySQL/MariaDB权限设置

MySQL作为数据库服务,需严格控制用户权限,避免未授权访问。

  • 数据目录权限:MySQL数据目录(如/var/lib/mysql)的所有者应为mysql用户,权限设为750(仅mysql用户可写入,组用户可读)。
    sudo chown -R mysql:mysql /var/lib/mysql
    sudo chmod -R 750 /var/lib/mysql
    
  • 配置文件权限: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
    
  • 数据库用户权限:为每个应用创建专用数据库用户,仅授予必要的权限(如SELECTINSERT),并限制访问主机为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-FPM作为PHP处理器,需与Nginx用户一致,确保能读取网站文件并执行PHP脚本。

  • 配置文件权限:PHP-FPM池配置文件(如/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中的usergroup指令,与Nginx用户一致(如www-data)。
    user = www-data
    group = www-data
    
  • 网站文件权限:PHP文件需允许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  # 示例:允许上传目录写入
    
  • 日志文件权限:PHP-FPM日志文件(如/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
    
  • 一致性检查:确保Nginx的user指令、PHP-FPM的user/group指令及网站文件所有者三者一致(如均为www-data),避免502 Bad Gateway错误。

五、SELinux/AppArmor(可选)

若系统启用SELinux或AppArmor,需调整安全策略以允许服务访问必要资源。

  • SELinux:将网站目录的安全上下文设置为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
    
  • AppArmor:确保Nginx、MySQL、PHP-FPM的配置文件符合AppArmor策略(默认已启用),无需额外修改(除非自定义路径)。

六、安全增强措施

  • 避免过度权限:严禁对网站文件或目录设置777权限(所有用户可读写执行),这会导致严重的安全风险。
  • 定期审计权限:使用find命令定期检查系统权限,修复异常(如全局可写的文件或目录)。
    sudo find / -type d -perm 777 -exec chmod 755 {} \;  # 修复全局可写目录
    sudo find / -type f -perm 666 -exec chmod 644 {} \;  # 修复全局可写文件
    
  • 更新系统与软件:定期更新Linux内核、Nginx、MySQL、PHP等组件,修补已知安全漏洞。
    sudo apt update && sudo apt upgrade -y
    
  • 防火墙配置:使用ufwiptables限制端口访问,仅允许HTTP(80)、HTTPS(443)等必要端口。
    sudo ufw allow 80/tcp
    sudo ufw allow 443/tcp
    sudo ufw enable
    

通过以上步骤,可实现LNMP环境的精细化权限管理,在保障安全的同时满足服务运行需求。权限设置需遵循“最小权限原则”,即仅授予服务与用户完成工作所需的最低权限。

0