欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Laravel chmod(/var/dev/project/storage/oauth-public.key):操作失败:不允许操作

程序员文章站 2022-07-15 16:09:07
...

在更新了以下软件包后,我发现无法找到oauth-public.key文件。

包装操作:1次安装,2次更新,0次清除

更新laravel /框架(v5.4.27 => v5.4.28):下载(100%)
安装defuse / php-encryption(v2.1.0):下载(100%)
更新联盟/ oauth2-server(5.1.3 => 5.1 .4):下载(100%)

首先我删除了项目/存储中的两个oauth文件,然后执行了这个命令:php artisan passport:安装生成新的oauth文件。

现在,当尝试访问api路由时,我收到以下错误。

(1/1)ErrorException chmod(/var/dev/project/storage/oauth-public.key):操作失败:不允许操作

堆栈跟踪

在CryptKey.php(第51行)

在HandleExceptions-> handleError(2,'chmod(/var/dev/project/storage/oauth-public.key):操作失败:不允许操作','/ var / dev / project / vendor / league / oauth2-server /src/CryptKey.php',51,array('keyPath'=>'file:///var/dev/project/storage/oauth-public.key','passPhrase'=> null,'keyPathPerms'=> '644'))

在CryptKey.php(第51行)中的chmod('file:///var/dev/project/storage/oauth-public.key',384)

在CryptKey-> __construct('file:///var/dev/project/storage/oauth-public.key')在ResourceServer.php(第50行)

文件权限

-rw-r--r-- user:user oauth-private.key
-rw-r--r-- user:user oauth-public.key

更新1

我发现oauth Libaray引入了一个安全解决方案。Oauth V5安全性改进

5.1.4版本是与其他5.1.x版本的向后兼容版本。

您将注意到您的服务器中记录了以下消息:

您必须设置加***以提高此库的安全性 - 有关详细信息,访问此页面https://oauth2.thephpleague.com/v5-security-improvements/

一旦您实例化了\ League \ OAuth2 \ Server \ AuthorizationServer的实例,您应该调用setEncryptionKey()方法传递至少32个字节的随机数据来抑制此通知。

你可以使用base64_encode(random_bytes(32))生成这个。或者,如果您正在使用已经生成加***的Laravel等框架,那么您可以通过(在Laravel的情况下使用env('APP_KEY'))。

问题是Laravel护照的维护者必须解决这个问题。

更新2

在我删除供应商文件夹并执行composer安装再次我仍然是同样的错误。

分享改善这个问题
 
2  
我也是。我也收到这个错误  ariezona 7月3日在7:35

尝试:

sudo chown www-data:www-data storage/oauth-*.key
sudo chmod 600 storage/oauth-*.key

它解决了我的问题。

分享改善这个答案
 
 
它解决了问题,但所有其他所有者和组都设置为我的用户。所以我认为把所有者设置为www数据是不正确的? Ilario Engler Jul 3 at 9:20
 
在Ubuntu 16.04上工作很棒  Thiago Pereira 7月3日13:30
 
这解决了这个问题,因为“联盟/ oauth2server”有突破性的变化。见/vendor/league/oauth2-server/src/CryptKey.php。它迫使双方所有者和权限,以特定的方式来设置,server:server0600。另请参阅:github.com/laravel/passport/issues/418  mayid 7月10日18:54

根据最新的oauth-server 5.1.4 更新,您应该设置尚未实现的加***passport 2.x

一个简单而快速的解决方法是通过更新您的文件使用passport 3.x哪些用途:oauth-server 6.xcomposer.json

"laravel/passport": "^3.0"

然后

composer update
分享改善这个答案
 

最后!我找到了解决方案。(CentOs)

chown apache:apache oauth-public.key
chown apache:apache oauth-private.key

首先,您需要找到您的服务器的用户名:这将返回您需要的用户名

ps aux | grep -E '[a]pache|[h]ttpd|[_]www|[w]ww-data|[n]ginx' | grep -v root | head -1 | cut -d\  -f1

对我来说,这是apache

分享改善这个答案
 

将oauth-private.key的所有者更改为www-data:www-data是不安全的。只有oauth-public.key应该由www-data:www-data拥有。

这应该是足够的

sudo chown www-data:www-data oauth-public.key
sudo chmod 600 oauth-public.key

完成后,通过在存储文件夹中运行此操作来检查您的权限:

ls -la

oauth-private.key的所有者不应该是www-data:www-data。
oauth-public.key的所有者应该是www-data:www-data

分享改善这个答案
 

作曲家安装作品我:)

分享改善这个答案
 
 
现在尝试...但是我仍然遇到与问题中所述相同的错误。  Ilario Engler Jul 3 at 8:47

同样的问题,我暂时回到了我的composer.lock文件的早期版本。看起来OAuth包正在尝试修改存储文件夹中的**的权限,而且我的服务器没有。

我会看看包更改日志,看看什么改变了,可能会在几个小时后重新运行更新。

分享改善这个答案
 
 
是的,它实际上正在尝试更改权限。看到这个提交:github.com/thephpleague/oauth2-server/commit/...  mayid 七月10在20:04
 
@mayid,那里现场。然而,我的服务器不允许修改权限,所以我们必须手动调整,并发布评论与我的结果。  W Hansen Jul 11​​ at 8:02

这也取决于你的Laravel和Passport版本。如果使用最新的Laravel 5.4,它使用Passport 3.0,它具有Oauth包的补丁。

如果你使用larvel 5.3,它使用Passport 1.0(你应该升级!!)[没有补丁],但是它使用的是具有检查文件的当时(5.1.4)的联盟/ OAuth-server的稳定版本。

解决方案:您需要强制安装5.1.3版本(不理想),但会解决问题。在项目根目录下运行。 composer require league/oauth2-server 5.1.3