核心是让web服务器用户(如www-data或apache)能读项目、写storage和bootstrap/cache:先用ps或grep确认运行用户,再chown -r统一属主属组,接着find设644/755基础权限,最后chmod -r 775放开storage与cache;selinux或apparmor需额外配置策略。

卡在权限问题,不是 Laravel 不行,是 Linux 的用户、组、权限三者没对齐。核心就两点:让 Web 服务器进程(比如 www-data 或 apache)能读项目、能写 storage 和 bootstrap/cache,其他文件按需设好基础权限即可。
确认 Web 服务器运行用户
这是所有操作的前提,不能凭经验瞎猜:
- Apache 用户常见为 apache(CentOS/RHEL)或 www-data(Debian/Ubuntu),查法:
ps aux | grep -E '(apache|httpd|nginx)' | head -1,看输出中第二列的用户名 - Nginx 用户默认常为 nginx 或 www-data,也可查配置:
grep "user" /etc/nginx/nginx.conf - 如果用的是 PHP-FPM,还要确认其池配置里
user和group是什么,路径通常是/etc/php/*/fpm/pool.d/www.conf
统一项目目录属主与属组
把整个 Laravel 项目目录的所有权交给 Web 服务器用户,避免混杂 root 或当前用户导致的写入失败:
Zynq‑7000 / Zynq UltraScale+ 硬件调试技能。适用于 Xilinx Zynq(Cortex‑A9/A53 + FPGA)Linux 环境,调试 I2C、I2S、UART、GPIO 等外设。包括设备树配置、内核驱动、用户空间调试工具、交叉编译和常见问题排查,支持 PetaLinux 开发。
- 执行命令(以 Apache + CentOS 为例):
sudo chown -R apache:apache /var/www/myapp - 如果是 Nginx + Ubuntu:
sudo chown -R www-data:www-data /var/www/myapp - 注意:不要只改
storage和cache,vendor、config、routes 等目录也需要被 Web 进程读取,统一属主最稳妥
分层设置文件与目录权限
不推荐全盘 777,也不建议死守 644/755 而忽略可写需求:
- 先重置基础权限:
sudo find /var/www/myapp -type f -exec chmod 644 {} \;和sudo find /var/www/myapp -type d -exec chmod 755 {} \; - 再单独放开必须写的目录:
sudo chmod -R 775 /var/www/myapp/storage和sudo chmod -R 775 /var/www/myapp/bootstrap/cache - 如果仍报日志写入失败,检查
storage/logs下的laravel.log文件本身是否被 root 创建过——删掉它,让 Laravel 重新生成
SELinux 或 AppArmor 场景处理
CentOS/RHEL 默认开启 SELinux,Ubuntu 可能启用 AppArmor,它们会拦截“合法但未授权”的文件访问:
- 临时验证是否是它导致的:
sudo setenforce 0(SELinux)或sudo systemctl stop apparmor(Ubuntu),再试访问;若恢复,说明需要策略适配 - 永久解决(SELinux):
sudo semanage fcontext -a -t httpd_sys_rw_content_t "/var/www/myapp/storage(/.*)?",然后sudo restorecon -Rv /var/www/myapp/storage - 同理处理
bootstrap/cache目录,类型用相同值即可










