- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我正在使用所有者设置为 _www:_www
的 Apache Web 服务器。我从来不知道文件权限的最佳实践是什么,例如当我创建新的 Laravel 5 项目时。
Laravel 5 要求 /storage
文件夹是可写的。我发现了很多不同的方法来让它工作,我通常以递归地使它 777
chmod 结束。不过我知道这不是最好的主意。
官方文档说:
Laravel may require some permissions to be configured: folders within
storage
andvendor
require write access by the web server.
这是否意味着 Web 服务器也需要访问 storage
和 vendor
文件夹本身或只是它们当前的内容?
我认为更好的是更改所有者而不是权限。我将 Laravel 的所有文件权限递归更改为 _www:_www
,这使网站正常工作,就好像我将 chmod 更改为 777
一样。问题是,现在每次我想保存任何文件时,我的文本编辑器都会要求我输入密码,如果我尝试在 Finder 中更改任何内容(例如复制文件),也会发生同样的情况。
解决这些问题的正确方法是什么?
chmod
sudo
最佳答案
只是为任何查看此讨论的人说明一个显而易见的....如果你给你的任何文件夹 777 权限,你就允许任何人读取、写入和执行该目录中的任何文件....这意味着什么您已授予任何人(全世界任何黑客或恶意人士)上传任何文件、病毒或任何其他文件的权限,然后执行该文件...
IF YOU ARE SETTING YOUR FOLDER PERMISSIONS TO 777 YOU HAVE OPENED YOURSERVER TO ANYONE THAT CAN FIND THAT DIRECTORY. Clear enough??? :)
基本上有两种方法可以设置您的所有权和权限。您要么赋予自己所有权,要么让网络服务器成为所有文件的所有者。
作为所有者的网络服务器(大多数人这样做的方式,以及 Laravel 文档的方式):
假设 www-data(它可能是其他东西)是您的网络服务器用户。
sudo chown -R www-data:www-data /path/to/your/laravel/root/directory
if you do that, the webserver owns all the files, and is also the group, and you will have some problems uploading files or working with files via FTP, because your FTP client will be logged in as you, not your webserver, so add your user to the webserver user group:
sudo usermod -a -G www-data ubuntu
Of course, this assumes your webserver is running as www-data (the Homestead default), and your user is ubuntu (it's vagrant if you are using Homestead).
Then you set all your directories to 755 and your files to 644...SET file permissions
sudo find /path/to/your/laravel/root/directory -type f -exec chmod 644 {} \;
SET directory permissions
sudo find /path/to/your/laravel/root/directory -type d -exec chmod 755 {} \;
Your user as owner
I prefer to own all the directories and files (it makes working with everything much easier), so, go to your laravel root directory:
cd /var/www/html/laravel >> assuming this is your current root directory
sudo chown -R $USER:www-data .
然后我给自己和网络服务器权限:
sudo find . -type f -exec chmod 664 {} \; sudo find . -type d -exec chmod 775 {} \;
然后赋予网络服务器读写存储和缓存的权限
无论您以何种方式设置,都需要为网络服务器授予读写权限,用于存储、缓存以及网络服务器需要上传或写入的任何其他目录(取决于您的情况),因此运行命令上面的害羞:
sudo chgrp -R www-data storage bootstrap/cachesudo chmod -R ug+rwx storage bootstrap/cache
现在,您是安全的,您的网站可以正常工作,并且您可以相当轻松地处理这些文件
关于php - 如何为 Laravel 设置文件权限?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42789394/
我已经安装了 composer,但是查看 Laravel 文档,我正在努力解决: “确保将 ~/.composer/vendor/bin 目录放在您的 PATH 中,以便在您的终端中运行 larave
我想在迁移时插入外键而不是在 1 中添加外键值 `public function up() { Schema::table('users', function (Bluepri
这是一个open bug on Github对于 laravel-mongodb 包,但没有任何反应。也许有人知道解决方案..? 选择作为单个文档时,日期显示为日期 { "_id": "5ca
我有一个 Laravel 应用程序,我将其用作 Joomla 中构建的更大应用程序的 API。我真的很喜欢使用 Laravel,并决定在 Joomla 应用程序中使用 Eloquent。我通过在 La
我有两个 Laravel 应用程序使用相同的数据库,因此具有相同的用户和密码。 假设应用程序称为 A 和 B。 如果用户登录 A,我该怎么做才能让他们自动登录 B?因此,如果他们登录到 A,那么当他们
我正在 github 上查看 Laravel 的源代码并注意到有一个 laravel/laravel和一个 laravel/framework .它们都链接到 Laravel 网站上的相同文档,并声明
我正在尝试将 laravel 从 5.4 版本更新到 5.5。我已经按照 Laravel 指南的指示完成了所有操作: https://laravel.com/docs/master/upgrade 当
我尝试从 foreach 向每个用户添加一些新值,但因为我使用 get,现在我不能在响应中使用分页,但我还需要向每个用户添加这些值。有什么想法吗? public function statistics
我有一个链接到销毁按钮的删除链接 $task->id ,'method'=>'DELETE'] ) }}"> delete 这是销毁函数 public function destroy($i
我想在 Laravel 中上传一组文件,但我不确定文件的路径和存储对象。八现在数据已存储,但在我的情况下路径是#。在下图中,我有从前面发送的数据(Vuejs 和我正在使用 vue-upload-com
在使用三向数据透视表时,我很难在 Laravel 中进行预加载。数据库设置如下: +-------+--------+-------+-------------+ | deals | venues |
我一直在从事 laravel 5.7 博客项目。我想评论一篇文章。 我需要实现这个: 登录前,我可以在评论文本区输入任何内容 我提交评论(当然会被auth中间件拦截) 然后我被重定向到登录页面 登录后
我正在尝试为我的应用程序中的文件创建一个临时 URL。我能够将文件上传到 S3 存储桶,并且能够使用方法 \Storage::temporaryUrl($this->url, now()->addHo
如果将 Eloquent 模型作为输入传递给 Laravel 排队作业,但模型在作业在队列中运行之前被删除,会发生什么情况? 例如,我正在使用 Laravel 5.2 构建一个电子商务网站,客户可以在
我正在尝试运行在测试运行之前将数据输入数据库的单元测试。我已经定义了一个设置方法,它为每个我不想要的测试用例运行。设置方法执行良好,没有问题。我想要的是将数据输入数据库一次,然后由所有测试用例使用。所
美好的一天。例如,我有一个带有字段/属性的模型 People: name surname 而且模型也有这个方法: public function FullName() { return "{$
我无法理解 Laravel 存在验证在检查数据库中现有记录方面的工作原理。 例如 带有 user.id = 1 的 POST 请求 是否可以使用验证规则:'id' => 'exists:users'检
我正在使用Laravel 5.2创建站点 我想做的是 INSERT同时3行 新的3行必须包含时间戳created_at updated_at。 使用Query Builder方法insert,是的,它
我试图通过href Action 将一些数据传递给我的 Controller 。我不知道为什么,但是laravel使用 GET 方法传递数据,但是我需要一个 POST 来代替 GET 。我真的不明白为
我有一个问题,我的存储文件夹上的服务器前提每 2 天重置一次。所以我运行这些命令并得到修复: sudo chown -R $USER:www-data storage sudo chown -R $U
我是一名优秀的程序员,十分优秀!