我使用的Apache Web服务器的所有者设置为_www:_www。我从来不知道文件权限的最佳实践是什么,例如当我创建新的Laravel 5项目时。
Laravel 5要求/storage文件夹是可写的。我发现了很多不同的方法来让它工作,我通常以递归地使它为777 chmod结束。但我知道这不是个好主意。
官方医生说:
Laravel可能需要配置一些权限:其中的文件夹
存储和供应商要求web服务器进行写访问。
这是否意味着web服务器也需要访问存储和供应商文件夹本身,还是只需要访问它们的当前内容?
我认为更好的是更改所有者而不是权限。我将所有Laravel的文件权限递归地更改为_www:_www,这使得网站正常工作,就像我将chmod更改为777一样。问题是,现在每次我想保存任何文件时,我的文本编辑器都会要求我输入密码,如果我试图在Finder中更改任何内容,比如复制一个文件,也会发生同样的情况。
解决这些问题的正确方法是什么?
改变chmod
更改文件的所有者以匹配
web服务器,也许设置文本编辑器(和Finder?)跳过
询问密码,或者让他们使用sudo
更改web服务器的所有者以匹配操作系统用户(我不这样做
知道后果)
其他的东西
这招对我很管用:
cd [..LARAVEL PROJECT ROOT]
sudo find . -type f -exec chmod 644 {} \;
sudo find . -type d -exec chmod 755 {} \;
sudo chmod -R 777 ./storage
sudo chmod -R 777 ./bootstrap/cache/
只有当你使用npm (VUE,编译SASS等)时,才添加这个:
sudo chmod -R 777 ./node_modules/
它的作用:
将所有文件权限更改为644
将所有文件夹权限更改为755
对于存储和引导缓存(laravel用于创建和执行文件的特殊文件夹,外部不可用),将内部所有内容的权限设置为777
对于nodeJS可执行文件,与上面相同
注意:也许你不能,或者不需要,用sudo做前缀。这取决于你的用户权限、组等等。
这招对我很管用:
cd [..LARAVEL PROJECT ROOT]
sudo find . -type f -exec chmod 644 {} \;
sudo find . -type d -exec chmod 755 {} \;
sudo chmod -R 777 ./storage
sudo chmod -R 777 ./bootstrap/cache/
只有当你使用npm (VUE,编译SASS等)时,才添加这个:
sudo chmod -R 777 ./node_modules/
它的作用:
将所有文件权限更改为644
将所有文件夹权限更改为755
对于存储和引导缓存(laravel用于创建和执行文件的特殊文件夹,外部不可用),将内部所有内容的权限设置为777
对于nodeJS可执行文件,与上面相同
注意:也许你不能,或者不需要,用sudo做前缀。这取决于你的用户权限、组等等。
我还遵循了以用户为所有者的方式,用户是www-data的成员。
我的命令顺序有点不同:
cd /var/www/html/laravel-project-root
sudo chown -R $USER:www-data .
sudo find . -type f -exec chmod 664 {} \;
sudo find . -type d -exec chmod 775 {} \;
sudo find . -type d -exec chmod g+s {} \; <----- NOTE THIS
sudo chgrp -R www-data storage bootstrap/cache
sudo chmod -R ug+rwx storage bootstrap/cache
请注意这个答案的特殊性:我是唯一一个(在这里)给每个文件夹添加组位的人。通过这种方式,如果某人或某物创建了一个新的子文件夹,它将自动以www-data作为组
这发生在我们被迫部署一些用户域文件时,使用ftp预加载,因此新的子文件夹文件夹总是属于www-data组,即使是由ftp客户端创建的
还要注意
sudo chgrp -R www-data storage bootstrap/cache > .使用实例
如果执行列表中的所有命令,则不需要。但如果你想修复一个ftp部署,例如,你没有执行第二行,所以这是需要的。