我正在使用所有者设置为 _www:_www
的 Apache Web 服务器。我从不知道文件权限的最佳实践是什么,例如当我创建新的 Laravel 5 项目时。
Laravel 5 要求 /storage
文件夹是可写的。我找到了很多不同的方法来使它工作,我通常以递归方式使其 777
chmod 结束。我知道这不是最好的主意。
官方文档说:
Laravel 可能需要配置一些权限:
storage
和vendor
中的文件夹需要 Web 服务器的写入权限。
这是否意味着 Web 服务器也需要访问 storage
和 vendor
文件夹本身或只是其当前内容?
我认为更好的是更改 所有者 而不是权限。我将所有 Laravel 的文件权限递归地更改为 _www:_www
并且这使得站点正常工作,就好像我将 chmod 更改为 777
。问题是现在我的文本编辑器每次我想保存任何文件时都会询问我密码,如果我尝试在 Finder 中更改任何内容,例如复制文件,也会发生同样的情况。
解决这些问题的正确方法是什么?
- 改变
chmod
- 更改文件的所有者以匹配 Web 服务器的所有者,并可能将文本编辑器(和 Finder?)设置为跳过询问密码,或者让它们使用
sudo
- 更改web服务器的所有者以匹配os用户(不知道后果)
- 别的东西
原文由 Robo Robok 发布,翻译遵循 CC BY-SA 4.0 许可协议
只是为了让任何查看此讨论的人都明白……如果您授予任何文件夹 777 权限,则您允许任何人读取、写入和执行该目录中的任何文件……这意味着您已经给出任何人(全世界的任何黑客或恶意人员)都允许上传任何文件、病毒或任何其他文件,然后执行该文件……
基本上有两种方法可以设置您的所有权和权限。要么给自己所有权,要么让网络服务器成为所有文件的所有者。
Webserver 作为所有者(大多数人这样做的方式,以及 Laravel 文档的方式):
假设 www-data (它可能是别的东西)是您的网络服务器用户。
如果你这样做,网络服务器拥有所有文件,也是组,你将在上传文件或通过 FTP 处理文件时遇到一些问题,因为你的 FTP 客户端将以你的身份登录,而不是你的网络服务器,所以添加您的用户到 webserver 用户组:
当然,这假设您的网络服务器以 www-data(Homestead 默认)运行,并且您的用户是 ubuntu(如果您使用 Homestead,它就是 vagrant)。
然后将所有目录设置为 755,将文件设置为 644… SET 文件权限
SET 目录权限
您的用户作为所有者
我更喜欢拥有所有的目录和文件(它使处理一切变得更加容易),所以,去你的 laravel 根目录:
然后我给自己和网络服务器权限:
然后赋予网络服务器读取和写入存储和缓存的权限
无论您采用哪种方式进行设置,您都需要为网络服务器授予存储、缓存以及网络服务器也需要上传或写入的任何其他目录的读写权限(取决于您的情况),因此请从上面的 bashy 运行命令:
现在,您很安全,您的网站可以正常工作,并且您可以相当轻松地处理这些文件