温馨提示×

Debian LNMP如何解决权限问题

小樊
39
2025-12-30 11:47:09
栏目: 智能运维

Debian LNMP 权限问题排查与修复

一、先统一运行身份

  • 确认进程运行的用户与组:
    • Nginx:查看 /etc/nginx/nginx.conf 首行的 user(Debian 常见为 www-datanginx)。
    • PHP-FPM:查看 /etc/php/<版本>/fpm/pool.d/www.conf 中的 usergroup(Debian 常见为 www-data),以及 listen.owner / listen.group / listen.mode
  • 统一身份的做法(二选一):
    • 方案A(推荐):让 Nginx 与 PHP-FPM 使用同一用户(如 www-data)。将 Nginx 的 user www-data;,并确保 PHP-FPM 的 user=www-data、group=www-data,同时把 listen.owner=www-data、listen.group=www-data 保持一致。
    • 方案B:改用 TCP 通信,避免套接字权限问题。将 PHP-FPM 的 listen=127.0.0.1:9000,Nginx 的 fastcgi_pass 127.0.0.1:9000;
  • 重启服务并验证:
    • systemctl restart php<版本>-fpm nginx
    • ps -ef | grep -E ‘nginx|php-fpm’ 核对运行用户是否一致。

二、正确设置网站目录与文件权限

  • 目录与文件的基础权限(Debian 常用 www-data 作为 Web 运行用户):
    • 网站根目录:chown -R www-data:www-data /var/www/your-site
    • 目录权限:find /var/www/your-site -type d -exec chmod 755 {} ;
    • 文件权限:find /var/www/your-site -type f -exec chmod 644 {} ;
  • 需要写入的子目录(如 storage、cache、logs、uploads)单独放开写权限:
    • chown -R www-data:www-data /var/www/your-site/storage /var/www/your-site/cache /var/www/your-site/logs /var/www/your-site/uploads
    • chmod -R 775 /var/www/your-site/storage /var/www/your-site/cache /var/www/your-site/logs /var/www/your-site/uploads
  • 安全提醒:避免使用 777,优先采用最小权限原则(目录 755、文件 644、可写目录 775 并归属 www-data)。

三、按症状快速定位与修复

  • 502 Bad Gateway,错误日志出现 “connect() to unix:/run/php/phpX.Y-fpm.sock failed (13: Permission denied)”

    • 原因:Nginx 与 PHP-FPM 运行用户不一致,或套接字文件权限/属主不对。
    • 处理:统一为同一用户(如 www-data),或改用 127.0.0.1:9000 TCP;确保 listen.owner/listen.group 与 Nginx 运行用户一致;重启服务。
  • 日志/缓存写入失败,PHP 报 “fopen(xxx.log): failed to open stream: Permission denied”

    • 原因:PHP-FPM 进程用户对日志目录无写权限,或新生成文件继承了错误的属主/属组。
    • 处理:将日志/缓存目录归属 www-data,并设置 775;必要时删除旧日志让进程重建;确认 PHP-FPM 运行用户为 www-data
  • 目录列表或敏感文件可访问

    • 处理:在 Nginx 配置中关闭目录浏览(autoindex off;),并禁止访问 .ht.git 等敏感路径。

四、最小权限配置示例

  • 目录结构:/var/www/example.com
  • 设置属主与权限:
    • chown -R www-data:www-data /var/www/example.com
    • find /var/www/example.com -type d -exec chmod 755 {} ;
    • find /var/www/example.com -type f -exec chmod 644 {} ;
    • chmod -R 775 /var/www/example.com/{storage,cache,logs,uploads}
  • PHP-FPM(/etc/php/8.2/fpm/pool.d/www.conf 片段):
    • user = www-data
    • group = www-data
    • listen = /run/php/php8.2-fpm.sock
    • listen.owner = www-data
    • listen.group = www-data
    • listen.mode = 0660
  • Nginx(/etc/nginx/nginx.conf 片段):
    • user www-data;
  • 重载服务:
    • systemctl restart php8.2-fpm nginx

五、安全与维护要点

  • 坚持最小权限:目录 755、文件 644、可写目录 775 并归属 www-data;严禁 777
  • 限制 PHP 能力:在 php.ini 中禁用危险函数(如 eval、system、exec 等),生产环境关闭 display_errors,必要时用 open_basedir 限制访问目录。
  • Nginx 安全:禁用 autoindex,移除 server_tokens,正确配置 fastcgi_pass,启用 HTTPS
  • 持续更新与监控:及时更新 Nginx/PHP/MySQL 与系统补丁,使用 UFW 放行 80/443,配合 Fail2ban/Logwatch 做安全审计。

0