如何为 Laravel 设置文件权限?

新手上路,请多包涵

我正在使用所有者设置为 _www:_www 的 Apache Web 服务器。我从不知道文件权限的最佳实践是什么,例如当我创建新的 Laravel 5 项目时。

Laravel 5 要求 /storage 文件夹是可写的。我找到了很多不同的方法来使它工作,我通常以递归方式使其 777 chmod 结束。我知道这不是最好的主意。

官方文档说:

Laravel 可能需要配置一些权限: storagevendor 中的文件夹需要 Web 服务器的写入权限。

这是否意味着 Web 服务器也需要访问 storagevendor 文件夹本身或只是其当前内容?

我认为更好的是更改 所有者 而不是权限。我将所有 Laravel 的文件权限递归地更改为 _www:_www 并且这使得站点正常工作,就好像我将 chmod 更改为 777 。问题是现在我的文本编辑器每次我想保存任何文件时都会询问我密码,如果我尝试在 Finder 中更改任何内容,例如复制文件,也会发生同样的情况。

解决这些问题的正确方法是什么?

  1. 改变 chmod
  2. 更改文件的所有者以匹配 Web 服务器的所有者,并可能将文本编辑器(和 Finder?)设置为跳过询问密码,或者让它们使用 sudo
  3. 更改web服务器的所有者以匹配os用户(不知道后果)
  4. 别的东西

原文由 Robo Robok 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.1k
2 个回答

只是为了让任何查看此讨论的人都明白……如果您授予任何文件夹 777 权限,则您允许任何人读取、写入和执行该目录中的任何文件……这意味着您已经给出任何人(全世界的任何黑客或恶意人员)都允许上传任何文件、病毒或任何其他文件,然后执行该文件……

如果您将文件夹权限设置为 777,则您已经向任何可以找到该目录的人打开了您的服务器。够清楚??? :)

基本上有两种方法可以设置您的所有权和权限。要么给自己所有权,要么让网络服务器成为所有文件的所有者。

Webserver 作为所有者(大多数人这样做的方式,以及 Laravel 文档的方式):

假设 www-data (它可能是别的东西)是您的网络服务器用户。

 sudo chown -R www-data:www-data /path/to/your/laravel/root/directory

如果你这样做,网络服务器拥有所有文件,也是组,你将在上传文件或通过 FTP 处理文件时遇到一些问题,因为你的 FTP 客户端将以你的身份登录,而不是你的网络服务器,所以添加您的用户到 webserver 用户组:

 sudo usermod -a -G www-data ubuntu

当然,这假设您的网络服务器以 www-data(Homestead 默认)运行,并且您的用户是 ubuntu(如果您使用 Homestead,它就是 vagrant)。

然后将所有目录设置为 755,将文件设置为 644… SET 文件权限

sudo find /path/to/your/laravel/root/directory -type f -exec chmod 644 {} \;

SET 目录权限

sudo find /path/to/your/laravel/root/directory -type d -exec chmod 755 {} \;

您的用户作为所有者

我更喜欢拥有所有的目录和文件(它使处理一切变得更加容易),所以,去你的 laravel 根目录:

 cd /var/www/html/laravel >> assuming this is your current root directory

 sudo chown -R $USER:www-data 。

然后我给自己和网络服务器权限:

须藤找到。 -type f -exec chmod 664 {} \;
须藤找到。 -type d -exec chmod 775 {} \;

然后赋予网络服务器读取和写入存储和缓存的权限

无论您采用哪种方式进行设置,您都需要为网络服务器授予存储、缓存以及网络服务器也需要上传或写入的任何其他目录的读写权限(取决于您的情况),因此请从上面的 bashy 运行命令:

 sudo chgrp -R www-data storage bootstrap/cache
sudo chmod -R ug+rwx 存储引导/缓存

现在,您很安全,您的网站可以正常工作,并且您可以相当轻松地处理这些文件

原文由 bgies 发布,翻译遵循 CC BY-SA 4.0 许可协议

我已经使用这个片段超过 3 年了。


laravel new demo

cd demo

sudo find ./ -type f -exec chmod 664 {} \;
sudo find ./  -type d -exec chmod 775 {} \;

sudo chgrp -Rf www-data storage bootstrap/cache
sudo chmod -Rf ug+rwx storage bootstrap/cache
sudo chmod -Rf 775 storage/ bootstrap/

php artisan storage:link

@realtebo 的推荐看起来不错。我会尝试。

 sudo find . -type d -exec chmod g+s {} \;  <----- NOTE THIS

原文由 bingglex 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题