温馨提示×

LNMP环境下Ubuntu如何进行权限管理

小樊
36
2025-10-26 17:54:52
栏目: 智能运维

LNMP环境下Ubuntu权限管理指南
在Ubuntu系统中搭建LNMP(Linux+Nginx+MySQL/MariaDB+PHP)环境后,合理的权限管理是保障服务器安全与稳定的核心环节。以下从基础用户管理核心服务权限配置文件系统权限设置安全加固措施四方面展开说明:

一、基础用户与组管理

Ubuntu遵循“最小权限原则”,建议为LNMP各组件创建专用用户/组,避免使用root用户直接运行服务。

  • 创建专用用户/组
    为Nginx、MySQL、PHP-FPM分别创建用户和组(若系统未自带),例如:
    sudo groupadd www-data  # Nginx/PHP-FPM共用组
    sudo useradd -g www-data -s /usr/sbin/nologin -d /nonexistent www-data  # 禁止登录的www-data用户
    sudo groupadd mysql
    sudo useradd -g mysql -s /usr/sbin/nologin -d /nonexistent mysql
    

    注:-s /usr/sbin/nologin禁止用户登录,-d /nonexistent设置不存在的家目录,增强安全性。

  • 用户组关联
    若需让特定用户参与服务管理(如部署代码),可将用户添加到对应组(如www-data组):
    sudo usermod -aG www-data deploy_user  # 将deploy_user加入www-data组
    

二、Nginx权限配置

Nginx作为Web服务器,需确保其能读取网站文件,但不能有过多写入权限。

  • 修改运行用户
    编辑Nginx主配置文件,将user指令设置为www-data(默认已使用):
    sudo vim /etc/nginx/nginx.conf
    # 找到"user nginx;"改为"user www-data;"
    
    保存后重启Nginx使配置生效:
    sudo systemctl restart nginx
    
  • 设置网站目录权限
    假设网站根目录为/var/www/html,需将所有权赋予www-data组,并设置合理权限:
    sudo chown -R www-data:www-data /var/www/html  # 所有权归www-data组
    sudo find /var/www/html -type d -exec chmod 755 {} \;  # 目录权限755(所有者可读/写/执行,组和其他用户可读/执行)
    sudo find /var/www/html -type f -exec chmod 644 {} \;  # 文件权限644(所有者可读/写,组和其他用户可读)
    

三、MySQL/MariaDB权限管理

数据库需严格控制用户权限,避免未授权访问或越权操作。

  • 创建数据库与用户
    登录MySQL后,创建数据库、用户并授予权限(仅允许本地访问):
    mysql -u root -p
    CREATE DATABASE mydb CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;  # 创建数据库
    CREATE USER 'myuser'@'localhost' IDENTIFIED BY 'StrongPassword123';  # 创建本地用户
    GRANT ALL PRIVILEGES ON mydb.* TO 'myuser'@'localhost';  # 授予数据库所有权限
    FLUSH PRIVILEGES;  # 刷新权限使变更生效
    
  • 限制远程访问
    若无需远程连接数据库,删除远程访问权限:
    DELETE FROM mysql.user WHERE User='myuser' AND Host!='localhost';  # 删除非本地用户
    FLUSH PRIVILEGES;
    
  • 保护配置文件
    修改MySQL配置文件权限,防止敏感信息泄露:
    sudo chown mysql:mysql /etc/mysql/my.cnf  # 所有权归mysql用户
    sudo chmod 640 /etc/mysql/my.cnf  # 仅所有者(mysql)可读写,组用户可读
    

四、PHP-FPM权限配置

PHP-FPM需与Nginx协同工作,通常与Nginx共用www-data用户/组。

  • 修改运行用户
    编辑PHP-FPM池配置文件(路径随PHP版本变化,如/etc/php/8.1/fpm/pool.d/www.conf),设置usergroup为www-data:
    sudo vim /etc/php/8.1/fpm/pool.d/www.conf
    # 找到"user = www-data"和"group = www-data"(默认已使用),取消注释并确认
    
    重启PHP-FPM使配置生效:
    sudo systemctl restart php8.1-fpm
    
  • 设置PHP套接字权限
    确保Nginx能通过套接字与PHP-FPM通信,修改套接字文件权限:
    sudo chown www-data:www-data /run/php/php8.1-fpm.sock  # 权限需与PHP-FPM运行用户一致
    

五、SELinux/AppArmor(可选但推荐)

Ubuntu默认使用AppArmor(类似CentOS的SELinux),用于限制进程权限,进一步增强安全性。

  • 检查AppArmor状态
    sudo aa-status  # 查看AppArmor是否启用
    
  • 强制启用AppArmor
    若未启用,编辑/etc/default/grub,将GRUB_CMDLINE_LINUX_DEFAULT改为包含security=apparmor,然后更新GRUB并重启:
    sudo sed -i 's/GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"/GRUB_CMDLINE_LINUX_DEFAULT="quiet splash security=apparmor"/' /etc/default/grub
    sudo update-grub
    sudo reboot
    
  • 应用AppArmor配置
    确保Nginx、MySQL、PHP-FPM的配置文件被AppArmor保护(默认已加载),若需自定义规则,编辑对应配置文件(如/etc/apparmor.d/usr.sbin.nginx)。

六、定期审计与安全加固

权限管理需持续维护,避免权限过度开放。

  • 查找危险权限
    定期扫描系统中权限过高的文件/目录(如777权限),并及时修正:
    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  # 更新所有软件包
    
  • 使用安全工具
    安装fail2ban防止暴力破解,auditd记录系统操作日志:
    sudo apt install fail2ban auditd  # 安装工具
    sudo systemctl enable --now fail2ban  # 启用fail2ban
    sudo systemctl enable --now auditd  # 启用auditd
    

通过以上步骤,可构建一个安全、有序的LNMP权限管理体系,有效降低服务器被攻击的风险。需注意,权限设置需根据实际业务需求调整,避免因过度限制导致服务无法正常运行。

0