Laravel chmod(/var/dev/project/storage/oauth-public.key):操作失败:不允许操作
来源:互联网 发布:dota2数据分析网站 编辑:程序博客网 时间:2024/05/20 06:04
在更新了以下软件包后,我发现无法找到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安装再次我仍然是同样的错误。
7答案
尝试:
sudo chown www-data:www-data storage/oauth-*.keysudo chmod 600 storage/oauth-*.key
它解决了我的问题。
/vendor/league/oauth2-server/src/CryptKey.php
。它迫使双方所有者和权限,以特定的方式来设置,server:server
并0600
。另请参阅: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.x
composer.json
"laravel/passport": "^3.0"
然后
composer update
最后!我找到了解决方案。(CentOs)
chown apache:apache oauth-public.keychown 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.keysudo chmod 600 oauth-public.key
完成后,通过在存储文件夹中运行此操作来检查您的权限:
ls -la
oauth-private.key的所有者不应该是www-data:www-data。
oauth-public.key的所有者应该是www-data:www-data
作曲家安装作品我:)
同样的问题,我暂时回到了我的composer.lock文件的早期版本。看起来OAuth包正在尝试修改存储文件夹中的密钥的权限,而且我的服务器没有。
我会看看包更改日志,看看什么改变了,可能会在几个小时后重新运行更新。
这也取决于你的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