温馨提示×

LNMP在Ubuntu上的权限管理技巧

小樊
43
2025-11-08 16:30:42
栏目: 智能运维

LNMP在Ubuntu上的权限管理技巧

1. 用户与组管理:最小权限原则

为LNMP组件创建专用低权限用户,避免使用root运行服务。Ubuntu默认已存在www-data(Nginx/PHP-FPM)、mysql(MySQL)用户,若未存在可通过以下命令创建:

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/PHP-FPM用www-data,MySQL用mysql):

sudo chown -R www-data:www-data /var/www/html  # 网站根目录
sudo chown -R mysql:mysql /var/lib/mysql       # MySQL数据目录

2. Nginx权限配置:避免过度开放

  • 修改运行用户:编辑/etc/nginx/nginx.conf,将user指令设置为www-data(默认已配置):
    user www-data;
    
  • 设置文件权限:网站目录(如/var/www/html)需允许Nginx读取,执行以下命令:
    sudo find /var/www/html -type d -exec chmod 755 {} \;  # 目录权限755(所有者可读/写/执行,组和其他可读/执行)
    sudo find /var/www/html -type f -exec chmod 644 {} \;  # 文件权限644(所有者可读/写,组和其他可读)
    

3. MySQL/MariaDB权限管理:精准控制数据库访问

  • 创建数据库与用户:仅授予必要权限(如SELECTINSERT),避免使用GRANT ALL PRIVILEGES(除非必需):
    CREATE DATABASE mydb;  -- 创建数据库
    CREATE USER 'myuser'@'localhost' IDENTIFIED BY 'StrongPassword123';  -- 创建本地用户
    GRANT SELECT, INSERT, UPDATE ON mydb.* TO 'myuser'@'localhost';  -- 授予特定权限
    FLUSH PRIVILEGES;  -- 刷新权限使变更生效
    
  • 限制远程访问:若无需远程连接,修改MySQL配置文件/etc/mysql/mysql.conf.d/mysqld.cnf,将bind-address设置为127.0.0.1
    bind-address = 127.0.0.1
    
    重启MySQL使配置生效:
    sudo systemctl restart mysql
    

4. PHP-FPM权限配置:同步用户与组

  • 修改运行用户:编辑PHP-FPM池配置文件(如/etc/php/8.1/fpm/pool.d/www.conf),确保usergroup设置为www-data(与Nginx一致):
    user = www-data
    group = www-data
    listen.owner = www-data  # 监听套接字所有者
    listen.group = www-data  # 监听套接字组
    
  • 设置套接字权限:确保Nginx能访问PHP-FPM套接字文件(路径通常为/run/php/php8.1-fpm.sock):
    sudo chown www-data:www-data /run/php/php8.1-fpm.sock
    sudo chmod 660 /run/php/php8.1-fpm.sock  # 所有者和组可读/写,其他无权限
    

5. SELinux/AppArmor:强化访问控制

  • AppArmor(Ubuntu默认启用):确保Nginx、MySQL、PHP-FPM的配置文件符合AppArmor策略。若需调整,可编辑对应配置文件(如/etc/apparmor.d/usr.sbin.nginx),添加允许访问的路径(如网站目录):
    /var/www/html/** rwk,  # 允许Nginx读/写/执行网站目录
    
    重新加载AppArmor使变更生效:
    sudo systemctl reload apparmor
    
  • SELinux(若启用):调整安全上下文,允许Nginx访问网站文件:
    sudo chcon -Rv --type=httpd_sys_content_t /var/www/html  # 设置内容类型
    sudo chcon -Rv --type=httpd_sys_rw_content_t /var/www/html/uploads  # 若需写入(如上传目录)
    

6. 定期审计与优化:保持权限安全

  • 清理宽松权限:定期查找并修复过度开放的权限(如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
    
  • 日志监控:通过/var/log/nginx/error.log/var/log/mysql/error.log/var/log/php8.1-fpm.log监控权限相关错误,及时响应异常。

7. 额外技巧:使用ACL实现灵活权限

若需更细粒度的权限控制(如允许某用户访问特定目录),可使用访问控制列表(ACL):

sudo apt install acl  # 安装ACL工具
sudo setfacl -m u:username:rwx /var/www/html/specific_dir  # 给指定用户添加读/写/执行权限
sudo getfacl /var/www/html/specific_dir  # 查看ACL权限

通过以上技巧,可实现LNMP在Ubuntu上的精细化权限管理,平衡安全性与功能性。

0