我使用的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服务器的所有者以匹配操作系统用户(我不这样做 知道后果) 其他的东西


当前回答

我会这样做:

sudo chown -R $USER:www-data laravel-project/ 

find laravel-project/ -type f -exec chmod 664 {} \;

find laravel-project/ -type d -exec chmod 775 {} \;

最后,你需要给webserver修改存储和引导/缓存目录的权限:

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

其他回答

修改项目文件夹的权限,允许组内的任何用户(在你的例子中是_www)读/写/执行ec:

chmod -R 775 /path/to/your/project

然后将你的OS X用户名添加到_www组,允许它访问目录:

sudo dseditgroup -o edit -a yourusername -t user _www

如果在某些文件中有一些代码更改,然后又有一些权限更改,那么设置正确的权限并再次提交可能比尝试选择权限更改的文件更容易。 您将只剩下代码更改。

我有以下配置:

NGINX(运行用户:NGINX) PHP-FPM

并正确应用权限@bgies建议在接受的答案。在我的案例中,问题是php-fpm配置的运行用户和组最初是apache。

如果你使用NGINX和php-fpm,你应该打开php-fpm的配置文件:

nano /etc/php-fpm.d/www.config

并将用户和组选项的值替换为一个NGINX配置工作;在我的例子中,两者都是nginx:

... ; Unix用户/进程组 ; 备注:非必选用户。如果未设置组,则默认用户组 ;将被使用。 ; RPM: apache选择能够以httpd的方式访问某些目录 User = nginx ; RPM:在日志目录下保留一个允许写入的组。 Group = nginx ...

保存并重新启动nginx和php-fpm服务。

出于明显的安全原因,存储和供应商文件夹的权限应该保持在775。

但是,您的计算机和服务器Apache都需要能够在这些文件夹中进行写操作。例如:当你运行像php artisan这样的命令时,你的计算机需要写入存储中的日志文件。

你所需要做的就是把文件夹的所有权交给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所属的组中。像这样:

sudo usermod -a -G www-data userName

注意:通常情况下,组名是www-data,但在您的示例中,将其替换为_www

我还遵循了以用户为所有者的方式,用户是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部署,例如,你没有执行第二行,所以这是需要的。