centos laravel权限设置有哪些要点
导读:CentOS 上 Laravel 权限设置要点 一 运行身份与一致性 明确 Web 服务运行用户:Nginx 通常为 nginx,Apache 通常为 apache。在 /etc/nginx/nginx.conf 查看 Nginx 的 u...
CentOS 上 Laravel 权限设置要点
一 运行身份与一致性
- 明确 Web 服务运行用户:Nginx 通常为 nginx,Apache 通常为 apache。在 /etc/nginx/nginx.conf 查看 Nginx 的 user 指令;在 /etc/php-fpm.d/www.conf 将 user/group 与之一致(如都设为 nginx),避免 Permission denied。完成后重启服务:
systemctl restart nginx php-fpm。 - 统一项目文件属主/属组:将项目目录属主设为 Web 服务用户(如 nginx:nginx 或 apache:apache),确保运行时对日志、缓存、上传等有写权限。
- 多用户协作时,避免把整个项目都设为 Web 属主,仅对需写目录放宽组权限,或将开发者加入 Web 组,便于本地编辑与部署协同。
二 目录与文件权限基线
- 推荐基线:目录 755、普通文件 644;对需要写入的目录(如 storage、bootstrap/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 官方常见做法是仅对 storage、bootstrap/cache 放宽写权限,其他保持 755/644 的保守基线。
三 SELinux 与系统安全上下文
- 确认 SELinux 状态:
getenforce(常见为 Enforcing 或 Permissive)。在 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_basedir 或 disable_functions(如被禁用 symlink)限制;需调整 php.ini 相应配置并重启 php-fpm。
- 确保 storage 与 storage/app/public 对 Web 进程可写(见第二节),否则上传与访问会失败。
五 快速排查清单
- 核对进程运行用户与属主一致:Nginx/php-fpm 的用户与项目属主/属组匹配;不一致会导致 403/500。
- 目录权限与组写权限已正确设置:至少保证 storage、bootstrap/cache 为 775 且组为 Web 组。
- SELinux 是否拦截:在 /var/log/audit/audit.log 检索 denied;必要时使用 semanage/restorecon 修正上下文或临时切 Permissive 验证。
- Web 服务配置:Nginx 的 root 必须指向 public;PHP-FPM 使用 127.0.0.1:9000 或 unix socket 与 Nginx 通信,且 SCRIPT_FILENAME 正确。
- 敏感文件保护:.env 为 600,避免泄露数据库等凭据。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: centos laravel权限设置有哪些要点
本文地址: https://pptw.com/jishu/778721.html
