如何为Laravel设置文件权限?
如何为Laravel设置文件权限?
我正在使用拥有所有者为_www:_www
的Apache Web服务器。例如,当我创建新的Laravel 5项目时,我从来不知道文件权限的最佳实践。
Laravel 5需要将 /storage
文件夹写入。我找到了很多不同的方法来使它工作,并且通常会以递归的方式将其chmod
设置为777
。我知道这不是最好的想法。
官方文档说:
Laravel可能需要配置一些权限:web服务器需要写访问
storage
和vendor
文件夹中的文件。
这是否意味着Web服务器也需要访问storage
和vendor
文件夹本身,还是只需要访问它们的当前内容?
我认为更好的做法是更改所有者而不是权限。我递归地将所有Laravel文件的权限更改为_www:_www
,这使得网站能够正常工作,就像我将chmod更改为777
一样。问题是,现在我的文本编辑器每次保存任何文件时都会要求我输入密码,如果我尝试更改Finder中的任何内容,例如复制文件,也会发生同样的情况。
解决这些问题的正确方法是什么?
- 更改
chmod
- 更改文件的所有者以匹配Web服务器的所有者,并可能设置文本编辑器(和Finder?)以跳过要求密码,或使它们使用
sudo
。 - 更改Web服务器的所有者以匹配操作系统用户(我不知道后果)
- 其他事情
storage
和 vendor
文件夹的权限必须保持为 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
显然对于任何查看该讨论帖子的人来说,如果你赋予任何文件夹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
现在,您的站点是安全的,并且您可以轻松处理这些文件。