温馨提示×

centos laravel权限设置有哪些要点

小樊
32
2025-12-23 08:20:52
栏目: 智能运维

CentOS 上 Laravel 权限设置要点

一 运行身份与一致性

  • 明确 Web 服务运行用户:Nginx 通常为 nginx,Apache 通常为 apache。在 /etc/nginx/nginx.conf 查看 Nginx 的 user 指令;在 /etc/php-fpm.d/www.confuser/group 与之一致(如都设为 nginx),避免 Permission denied。完成后重启服务:systemctl restart nginx php-fpm
  • 统一项目文件属主/属组:将项目目录属主设为 Web 服务用户(如 nginx:nginxapache:apache),确保运行时对日志、缓存、上传等有写权限。
  • 多用户协作时,避免把整个项目都设为 Web 属主,仅对需写目录放宽组权限,或将开发者加入 Web 组,便于本地编辑与部署协同。

二 目录与文件权限基线

  • 推荐基线:目录 755、普通文件 644;对需要写入的目录(如 storagebootstrap/cache)放宽到 775 并确保组为 Web 组,以便进程可写。
  • 常用命令(按你的 Web 组调整,如 nginx 则用 nginx):
    # 项目根目录(按需收紧,避免过度放权)
    find /var/www/laravel -type d -exec chmod 755 {} \;
    find /var/www/laravel -type f -exec chmod 644 {} \;
    
    # 必须可写的目录
    chgrp -R nginx storage bootstrap/cache
    chmod -R ug+rwx storage bootstrap/cache
    
    # 敏感文件
    chmod 600 /var/www/laravel/.env
    
  • 说明:Laravel 官方常见做法是仅对 storagebootstrap/cache 放宽写权限,其他保持 755/644 的保守基线。

三 SELinux 与系统安全上下文

  • 确认 SELinux 状态:getenforce(常见为 EnforcingPermissive)。在 Enforcing 下,需为 Web 目录设置正确的安全上下文,否则即使权限正确也会被拒绝访问。
  • 为 Laravel 目录设置上下文(示例):
    # 只读内容
    sudo semanage fcontext -a -t httpd_sys_content_t "/var/www/laravel(/.*)?"
    # 需要写入的路径
    sudo semanage fcontext -a -t httpd_sys_rw_content_t "/var/www/laravel/storage(/.*)?"
    sudo semanage fcontext -a -t httpd_sys_rw_content_t "/var/www/laravel/bootstrap/cache(/.*)?"
    # 应用上下文
    sudo restorecon -R /var/www/laravel
    
  • 若暂时无法使用 SELinux 策略工具,可在测试环境将其设为 Permissive 以排障,但生产环境不建议长期关闭:sudo setenforce 0(永久修改在 /etc/selinux/config)。生产环境应保留 Enforcing 并通过策略放行。

四 上传与软链接的正确配置

  • 创建上传目录软链:将 storage/app/public 链接到 public/storage,便于通过 Web 访问用户上传内容。
    php artisan storage:link
    
  • 若执行失败,常见原因包括:PHP 的 open_basedirdisable_functions(如被禁用 symlink)限制;需调整 php.ini 相应配置并重启 php-fpm
  • 确保 storagestorage/app/public 对 Web 进程可写(见第二节),否则上传与访问会失败。

五 快速排查清单

  • 核对进程运行用户与属主一致:Nginx/php-fpm 的用户与项目属主/属组匹配;不一致会导致 403/500
  • 目录权限与组写权限已正确设置:至少保证 storagebootstrap/cache775 且组为 Web 组。
  • SELinux 是否拦截:在 /var/log/audit/audit.log 检索 denied;必要时使用 semanage/restorecon 修正上下文或临时切 Permissive 验证。
  • Web 服务配置:Nginx 的 root 必须指向 public;PHP-FPM 使用 127.0.0.1:9000unix socket 与 Nginx 通信,且 SCRIPT_FILENAME 正确。
  • 敏感文件保护:.env600,避免泄露数据库等凭据。

0