如何为Laravel设置文件权限?

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

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

官方文档说:

Laravel可能需要配置一些权限:Web服务器内的文件夹,并且需要Web服务器的写入访问权限。storagevendor

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

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

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

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

答案 1

只是为了说明任何观看此讨论的人显而易见的事实....如果您授予任何文件夹777权限,则允许任何人读取,写入和执行该目录中的任何文件。这意味着您已经授予任何人(全世界的任何黑客或恶意人员)上传任何文件,病毒或任何其他文件的权限,然后执行该文件...

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

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

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

假设www-data(它可能是其他东西)是您的Web服务器用户。

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

如果您这样做,则Web服务器拥有所有文件,并且也是组,并且您在通过FTP上传文件或使用文件时会遇到一些问题,因为您的FTP客户端将以您而不是Web服务器的身份登录,因此请将您的用户添加到Web服务器用户组:

sudo usermod -a -G www-data ubuntu

当然,这假设您的Web服务器以www-data(Homestead默认值)运行,并且您的用户是ubuntu(如果您使用的是Homestead,则它是流浪汉)。

然后,您将所有目录设置为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 .

然后我给自己和Web服务器都授予权限:

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

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


答案 2

出于明显的安全原因,和 文件夹的权限应保留为 。storagevendor775

但是,您的计算机和服务器Apache都需要能够在这些文件夹中写入。例如:当您运行这样的命令时,您的计算机需要写入.php artisanstorage

您需要做的就是将文件夹的所有权授予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

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

sudo usermod -a -G www-data userName

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


推荐