LNMP(Linux+Nginx+MySQL+PHP)环境中,权限问题主要源于用户/组配置不一致、文件/目录权限设置不当、SELinux限制或PHP-FPM进程权限不足。以下是具体解决步骤:
Nginx默认以nginx或www-data用户运行,需先确认其身份:
ps aux | grep nginx
输出中USER列即为Nginx运行用户(如nginx)。后续权限设置需与该用户一致。
网站根目录(如/var/www/html)的权限需满足:所有者可读写,组和其他用户可读可执行(避免403 Forbidden错误)。
# 进入网站根目录
cd /var/www/html
# 修改所有者和组(替换为Nginx用户,如nginx)
sudo chown -R nginx:nginx /var/www/html
# 设置文件权限(644:所有者可读写,其他用户可读)
sudo find . -type f -exec chmod 644 {} \;
# 设置目录权限(755:所有者可读写执行,其他用户可读执行)
sudo find . -type d -exec chmod 755 {} \;
注意:上传目录(如uploads)需允许PHP写入,可设置为775(需谨慎,避免过度开放权限)。
PHP-FPM需以与Nginx相同的用户运行,否则会出现502 Bad Gateway(Nginx无法连接PHP-FPM)。
/etc/php-fpm.d/www.conf或/etc/php/版本号/fpm/pool.d/www.conf):sudo nano /etc/php-fpm.d/www.conf
user和group参数,修改为Nginx用户(如nginx):user = nginx
group = nginx
sudo systemctl restart php-fpm
SELinux会限制进程访问文件,需调整其策略:
sestatus
若输出SELinux status: enabled,需调整策略。sudo chcon -R -t httpd_sys_content_t /var/www/html
httpd_sys_rw_content_t类型:sudo chcon -R -t httpd_sys_rw_content_t /var/www/html/uploads
/etc/selinux/config,将SELINUX=enforcing改为SELINUX=disabled,重启服务器。确保Nginx配置文件(如/etc/nginx/nginx.conf)中的user指令与实际运行用户一致:
user nginx; # 替换为实际用户
修改后测试配置并重启Nginx:
sudo nginx -t # 测试语法
sudo systemctl restart nginx
/var/www/html/info.php):<?php phpinfo(); ?>
http://服务器IP/info.php,若能正常显示PHP信息页面,说明权限设置正确。通过以上步骤,可解决LNMP环境中常见的权限问题。需注意最小权限原则,避免使用777等过度开放的权限,降低安全风险。