如何为Laravel设置文件权限?

31 浏览
0 Comments

如何为Laravel设置文件权限?

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

Laravel 5需要将 /storage 文件夹写入。我找到了很多不同的方法来使它工作,并且通常会以递归的方式将其chmod设置为777。我知道这不是最好的想法。

官方文档说:

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

这是否意味着Web服务器也需要访问storagevendor文件夹本身,还是只需要访问它们的当前内容?

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

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

  1. 更改chmod
  2. 更改文件的所有者以匹配Web服务器的所有者,并可能设置文本编辑器(和Finder?)以跳过要求密码,或使它们使用 sudo
  3. 更改Web服务器的所有者以匹配操作系统用户(我不知道后果)
  4. 其他事情
0
0 Comments

storagevendor 文件夹的权限必须保持为 775,这是出于明显的安全原因。

然而,您的电脑和服务器 Apache 都需要能够写入这些文件夹。比如,当您运行像 php artisan 这样的命令时,您的电脑需要在 storage 的日志文件中写入。

您需要做的就是将文件夹的所有权转移到 Apache :

sudo chown -R www-data:www-data /path/to/your/project/vendor
sudo chown -R www-data:www-data /path/to/your/project/storage

然后,您需要将您的用户(由其 username 引用)添加到服务器 Apache 所属的组中。就像这样:

sudo usermod -a -G www-data userName

注意:最常见的组名是 www-data ,但在您的情况下,请将其替换为 _www

0
0 Comments

显然对于任何查看该讨论帖子的人来说,如果你赋予任何文件夹777权限,则意味着你允许任何人读取、写入和执行该目录下的任何文件....也就是说你已经授权了任何人(包括来自全世界的黑客或恶意人士)上传任何文件,包括病毒或其他文件,然后执行该文件...

如果你设置了文件夹权限为777,那么你就向全世界公开了你的服务器。清楚明白吗? 🙂

通常有两种方案来设置你的所有权和权限。要么你拥有自己的所有权,要么你将所有文件的所有权交给了网站服务器。

网站服务器作为所有者(通常也是 Laravel 文档中提到的方法):

假设 www-data(也可能是其他用户)是你的网站服务器用户。

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

如果你这样做了,那么网站服务器就拥有了所有文件的所有权和组权。但你使用 FTP 上传文件或处理文件时可能会出现问题,因为你的 FTP 客户端登录的用户是你自己,而不是网站服务器的用户。所以你需要将你的用户添加到网站服务器用户群组中:

sudo usermod -a -G www-data ubuntu

当然,这假设你的网站服务器正在以 www-data 的身份运行(跟 Homestead 默认设置一样),你的用户是 ubuntu(如果你使用 Homestead,则是 vagrant)。

接下来你需要将所有目录权限设置为755,所有文件权限设置为644......

SET file permissions

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

SET directory permissions

在命令行中键入以下命令,将Laravel根目录下所有目录的权限修改为755:

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

然后,我给自己和Web服务器授权:

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

接下来,为Web服务器授予storage和cache的读写权限,以及任何其他目录(取决于您的情况),请执行上面的命令:

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

现在,您的站点是安全的,并且您可以轻松处理这些文件。

0