在 777 我的整个应用程序之后“无法打开流:权限被拒绝”
Posted
技术标签:
【中文标题】在 777 我的整个应用程序之后“无法打开流:权限被拒绝”【英文标题】:"failed to open stream: Permission denied" after 777 my entire app 【发布时间】:2019-07-21 20:13:31 【问题描述】:为了解决这个问题,我长出了几根白发。
突然在我的 Laravel 项目中,我无法将任何文件直接上传到我的符号链接公共/存储,因为它抱怨权限。
然后我对应用程序中的每个文件进行了 777 处理(我知道,我知道),但它仍在抱怨权限问题。我也运行过composer dump-autoload
,它似乎从来没有做任何事情,但我想我还是试试吧。
有人知道我还能尝试什么吗?我可以验证一切都是 777,所以我看不出为什么任何权限都会失败...
【问题讨论】:
不清楚你在问什么。提示:递归chown
和 chmod
不会跟随符号链接......如果我不得不猜测,我会假设无法列出父目录或符号链接目标; chmod +x
有帮助。
一些可能有助于确定原因的事情:错误堆栈跟踪、导致它的代码、Web 服务器(apache/nginx?)、服务器配置(启用跟随符号链接?)、操作系统名称/版本、Laravel版本,php 版本
你可以分享你用来保存和获取文件的代码吗?
【参考方案1】:
呸,对不起,这有点牵扯到红鲱鱼。
777 一切都不起作用,因为上传的文件被设置为 644(所以我的手册 777 只适用于已经存在的文件)
为了将来参考,如果有人在使用 Laravel 并且排队的作业无法访问 644 文件,请在上传后立即将文件设置为 664(apache
拥有上传的文件,但 www-data
(或 ec2-user
)是排队时尝试访问的人)。
【讨论】:
这提示在某处设置了错误的网络服务器用户,因为apache
和www-data
是普通的等效用户,只是不同的Linux 发行版使用了两个不同的用户名。
刚刚检查了源代码,但在任何地方都找不到用户名...更改http.conf
以使服务器以www-data
而不是apache
运行也可能会修复它...因为这应该导致www-data
拥有一个文件。必须有一些原因,为什么用户名不一致......很可能它来自一些作曲家依赖,它是用另一个发行版构建的,因此是另一个用户名。
你几乎肯定是对的@MartinZeitler - 在我的情况下,我会说这是因为 Laravel 本身大部分时间都以apache
运行,但是当它运行队列外的作业时,它使用任何用户启动队列(或主管)。 664 而不是 644 对我来说很好,但是让服务器以www-data
运行也可以。【参考方案2】:
SE Linux 可能是罪魁祸首,因为政策在某些情况下会发生变化,例如。当有损坏的模块时,它会搞砸。那将是setsebool -P httpd_read_user_content 1
(如果这会引发错误,手动删除损坏的模块是唯一有帮助的方法)。
【讨论】:
这没有回答我的问题,但看起来它对合适的人真的很有帮助,所以我给它打勾:) SE linux 有什么帮助吗?我只知道它与事物发生冲突。 (这是一个修辞问题)。 @Chipster 它通常提供适当的隔离,其中一切都有安全上下文。一旦定义了策略,它就会运行。到目前为止,由于redis
卸载了一半,我只发生过一次模块损坏。
@MartinZeitler 所以它是一种防病毒软件?
@Chipster people.redhat.com/tcameron/Summit2012/SELinux/…以上是关于在 777 我的整个应用程序之后“无法打开流:权限被拒绝”的主要内容,如果未能解决你的问题,请参考以下文章
laravel - 无法以附加模式打开流或文件“/storage/logs/laravel.log”:无法打开流:权限被拒绝
“无法打开流或文件“laravel.log”:无法打开流:权限被拒绝”
无法打开流或文件“/app/storage/logs/laravel.log”:无法打开流:权限被拒绝
在我的本地主机中全局安装作曲家,现在我得到“file_put_contents(./composer.json):无法打开流:权限被拒绝”?