如何一劳永逸地设置laravel文件权限
How to setup laravel file permission once and for all
我关注了这个投票 并做了以下事情:
sudo chown -R my-user:www-data /var/www/domain.com/
sudo find /var/www/domain.com/ -type f -exec chmod 664 {} \;
sudo find /var/www/domain.com/ -type d -exec chmod 775 {} \;
sudo chgrp -R www-data /var/www/domain.com/storage /var/www/domain.com/bootstrap/cache
sudo chmod -R ug+rwx /var/www/domain.com/storage /var/www/domain.com/bootstrap/cache
一切正常,但每当目录(在存储目录中)由我的用户而不是 www-data 用户创建时,网络服务器无法写入它或相反亦然。除非我在创建目录后重新运行那些命令。
注意:有时我 运行 使用创建目录的 my-user 命令,有时使用 www-data 用户创建目录。 (在存储目录内)。
此外,my-user 已经在 www-data 组中。
如何避免权限错误?无需 运行再次执行所有这些命令。
选项 1 添加 www-data 组到 my-user:
sudo adduser www-data my-user
选项 2 将 php-fpm 的用户更改为 my-user (ref):
在www.conf中找到options user和group,改成[my-user] group=mygroup
我最好的解决方案是创建一个 artisan 命令。
这样你就不用每次都使用linux创建文件夹和设置权限的方式了。
所以创建一个artisan命令执行如下
php artisan createStorageFolder:FolderName
这会自动将用户权限设置为 apache:apache 或类似权限。如果不是你也可以执行 linux/shell 命令来设置 artisan 方法的权限。
jr web dev 的 webroot 区域有这个问题(我们阻止他访问项目所在的一般 webroot 访问权限)。简单的修复只是添加一个每分钟更改一次权限的 cronjob。
试一试:
# give the newly created files/directories the group of the parent directory
# e.g. the laravel group
sudo find $project_Path/bootstrap/cache -type d -exec chmod g+s {} \;
sudo find $project_Path/storage -type d -exec chmod g+s {} \;
# let newly created files/directories inherit the default owner
# permissions up to maximum permission of rwx e.g. new files get 664,
# folders get 775
sudo setfacl -R -d -m g::rwx ./storage
sudo setfacl -R -d -m g::rwx ./bootstrap/cache
在 laravel 项目文件夹的根目录下 sudo chown -R $USER:$USER *
怎么样?
要么
sudo chown -R $USER:$USER [laravel folder name]
如果您在 laravel 文件夹/项目的父目录之外/中?
您提到您的用户与 www-data 用户属于同一组,因此 this 中的以下答案可能有效(我在 ubuntu 中尝试过,但类似的步骤可能有效在你的 *nix OS):
类型sudo gedit ~/.bashrc
找到任何 umask
行并将其更改为 umask 002
这意味着您和您的组可以为新文件和目录设置所有权限。实际上,这意味着创建的新文件具有 664 权限,新目录具有 775
这应该包括使用您的用户帐户创建的新文件。当然,您在执行 sudo create this file
时需要小心,因为这将为 root 用户创建它。
请注意,这不是一个完美的解决方案,因为仍然有一些事情只有文件所有者和 root 用户才能做(例如更改所有者或权限),但它可能会涵盖大多数其他情况
我关注了这个投票
sudo chown -R my-user:www-data /var/www/domain.com/
sudo find /var/www/domain.com/ -type f -exec chmod 664 {} \;
sudo find /var/www/domain.com/ -type d -exec chmod 775 {} \;
sudo chgrp -R www-data /var/www/domain.com/storage /var/www/domain.com/bootstrap/cache
sudo chmod -R ug+rwx /var/www/domain.com/storage /var/www/domain.com/bootstrap/cache
一切正常,但每当目录(在存储目录中)由我的用户而不是 www-data 用户创建时,网络服务器无法写入它或相反亦然。除非我在创建目录后重新运行那些命令。
注意:有时我 运行 使用创建目录的 my-user 命令,有时使用 www-data 用户创建目录。 (在存储目录内)。
此外,my-user 已经在 www-data 组中。
如何避免权限错误?无需 运行再次执行所有这些命令。
选项 1 添加 www-data 组到 my-user:
sudo adduser www-data my-user
选项 2 将 php-fpm 的用户更改为 my-user (ref):
在www.conf中找到options user和group,改成[my-user] group=mygroup
我最好的解决方案是创建一个 artisan 命令。
这样你就不用每次都使用linux创建文件夹和设置权限的方式了。
所以创建一个artisan命令执行如下
php artisan createStorageFolder:FolderName
这会自动将用户权限设置为 apache:apache 或类似权限。如果不是你也可以执行 linux/shell 命令来设置 artisan 方法的权限。
jr web dev 的 webroot 区域有这个问题(我们阻止他访问项目所在的一般 webroot 访问权限)。简单的修复只是添加一个每分钟更改一次权限的 cronjob。
试一试:
# give the newly created files/directories the group of the parent directory
# e.g. the laravel group
sudo find $project_Path/bootstrap/cache -type d -exec chmod g+s {} \;
sudo find $project_Path/storage -type d -exec chmod g+s {} \;
# let newly created files/directories inherit the default owner
# permissions up to maximum permission of rwx e.g. new files get 664,
# folders get 775
sudo setfacl -R -d -m g::rwx ./storage
sudo setfacl -R -d -m g::rwx ./bootstrap/cache
在 laravel 项目文件夹的根目录下 sudo chown -R $USER:$USER *
怎么样?
要么
sudo chown -R $USER:$USER [laravel folder name]
如果您在 laravel 文件夹/项目的父目录之外/中?
您提到您的用户与 www-data 用户属于同一组,因此 this 中的以下答案可能有效(我在 ubuntu 中尝试过,但类似的步骤可能有效在你的 *nix OS):
类型sudo gedit ~/.bashrc
找到任何 umask
行并将其更改为 umask 002
这意味着您和您的组可以为新文件和目录设置所有权限。实际上,这意味着创建的新文件具有 664 权限,新目录具有 775
这应该包括使用您的用户帐户创建的新文件。当然,您在执行 sudo create this file
时需要小心,因为这将为 root 用户创建它。
请注意,这不是一个完美的解决方案,因为仍然有一些事情只有文件所有者和 root 用户才能做(例如更改所有者或权限),但它可能会涵盖大多数其他情况