当前位置: 首页 > 知识库问答 >
问题:

如何为Laravel设置文件权限?

聂炜
2023-03-14

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

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

官方文件说:

Laravel可能需要配置某些权限:存储供应商中的文件夹需要web服务器的写访问权限。

这是否意味着web服务器也需要访问存储供应商文件夹本身,还是只需要访问它们当前的内容?

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

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

  1. 更改chmod
  2. 更改文件的所有者,使其与web服务器的文件相匹配,并可能设置文本编辑器(和查找器?)跳过询问密码,或让他们使用sudo
  3. 更改web服务器的所有者以匹配os用户(不知道后果)
  4. 其他

共有1个答案

乐正嘉瑞
2023-03-14

只是为了向观看这场讨论的人陈述一下显而易见的事情....如果你给你的任何一个文件夹777权限,你就是允许任何人读、写和执行那个目录中的任何文件....这意味着你给了任何人(全世界的任何黑客或恶意者)上传任何文件、病毒或任何其他文件的权限,然后执行那个文件...

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

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

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

假设www-data(可能是其他东西)是您的webserver用户。

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

如果您这样做,webserver拥有所有文件,也是组,并且您将会有一些问题通过FTP上传文件或处理文件,因为您的FTP客户端将以您的身份登录,而不是您的webserver,所以将您的用户添加到webserver用户组:

sudo usermod -a -G www-data ubuntu

当然,这假设您的Web服务器是作为www-data运行的(Homestead的默认值),并且您的用户是ubuntu(如果您使用的是Homestead,那么它是Valrant)。

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

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

设置目录权限

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 .

然后我同时授予自己和webserver权限:

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

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

无论您以哪种方式设置,您都需要为Web服务器提供存储、缓存以及Web服务器需要上传或写入的任何其他目录的读写权限(这取决于您的情况),因此运行上面bashy中的命令:

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

现在,您是安全的,您的网站可以正常工作,您可以相当容易地处理文件

 类似资料:
  • 问题内容: 我正在使用拥有者设置为的Apache Web服务器。我永远都不知道文件权限的最佳做法是什么,例如,当我创建新的Laravel 5项目时。 Laravel 5要求文件夹可写。我发现了很多不同的方法可以使其正常工作,而我通常以递归方式使其成为chmod。我知道这不是最好的主意。 官方文件说: Laravel可能需要配置一些权限:Web服务器中的文件夹, 并且需要Web服务器进行写访问。 这

  • 用户在轻推上传文件时,考虑到对文件的传播有着不同的考量,因此在发送文件时也可以对文件的转发和下载权限进行设置。转发权限可选择:可转发、仅在企业内转发、不可转;下载权限可设置:可下载和不可下载。 例如,当文件为企业内的重要文件,仅希望企业内员工可见,不希望外传时,则可以设置文件为仅在企业内转发,不可下载;设置后,则该文件只能在企业内分享,文件可以支持在线预览,不可下载,并且将加上阅读者的名字和手机号

  • 我正在尝试使用jib-maven-plugin构建docker映像,我想为特定文件夹设置权限。如果我使用的是docker文件,配置将如下所示: 现在,我该如何使用jib maven插件实现这一点?我相信在波姆的某个地方。jib maven插件中的xml

  • 我使用中的此选项在服务器中运行: 我得到这个错误: 分析INI配置文件时出错:未知的选项安全性。

  • 问题内容: 如何在文件夹上设置777权限。 我需要将以下文件夹的权限设置为777:admin \ includes \ module_installation 我不知道如何在窗口7中的特定文件夹上设置权限777? 请帮我如何设置?我正在使用Windows 7。 问题答案: 是基于Unix的系统中的权限,对所有者,组和所有人具有完全的读/写/执行权限。通常,我们将此权限授予不需要在Web服务器上公开

  • 问题内容: 我正在使用kops在AWS上运行Kubernetes集群。我已经将EBS卷安装到了容器上,并且可以从我的应用程序中看到它,但是由于我的应用程序没有以root用户身份运行,因此它是只读的。我如何以root以外的用户身份挂载a ?在似乎不具有任何选项来控制的用户,组或文件权限安装路径。 这是我的部署yaml文件: 问题答案: Pod安全上下文支持设置,允许您设置拥有该卷的组ID,从而确定谁