2017-07-03 100 views
15

更新了以下软件包后,我收到一个错误消息:oauth-public.key文件couldn'不被发现。Laravel chmod(/var/dev/project/storage/oauth-public.key):操作失败:不允许操作

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

更新laravel /框架(v5.4.27 => v5.4.28):下载(100%)
安装化解/ PHP-加密( V2.1.0):下载(100%)
更新联赛/的oauth2服务器(5.1.3 => 5.1.4):下载(100%)

首先我删除两个oauth-文件在项目/存储中,然后执行此c ommand:php artisan护照:安装以生成新的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):化经营n失败:操作不允许','/var/dev/project/vendor/league/oauth2-server/src/CryptKey.php',51,array('keyPath'=>'file:/// var/dev /项目/存储/ oauth-public.key','passPhrase'=> null,'keyPathPerms'=>'644'))

at chmod('file:/// var/dev/project/storage/oauth -public.key”,384)在CryptKey.php (线51)

在CryptKey-> __construct( '文件:///var/dev/project/storage/oauth-public.key') 在ResourceServer.php(line 50)

文件权限

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

更新1

我发现的OAuth Libaray推出的安全补丁。 Oauth V5 Security Improvements

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

你会在你的服务器发现记录如下消息:

您必须设置加密密钥向前发展,以改善该库的安全 - 看到这个页面了解更多信息https://oauth2.thephpleague.com/v5-security-improvements/

要剿此注意,一旦你实例化了一个\ League \ OAuth2 \ Server \ AuthorizationServer实例,你应该调用传入至少32字节随机数据的setEncryptionKey()方法。

您可以使用base64_encode(random_bytes(32))来生成此代码。或者,如果您使用的Laravel等框架已经生成加密密钥,则可以通过该框架(Laravel使用env('APP_KEY'))。

问题是Laravel Passport的维护人员必须解决这个问题。

更新2

之后我删除了文件夹的供应商并执行作曲家安装我再次得到还是同样的错误。

+2

我也是。我也有这个错误 – ariezona

回答

0

作曲家作品安装FO我:)

+0

刚刚尝试过......但我仍然得到了与问题中所述相同的错误。 –

22

尝试:

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

它解决了我的问题。

+1

它解决了问题,但所有其他所有者和组都设置给我的用户。所以我认为将所有者设置为www-data不正确? –

+0

在Ubuntu上运行良好16.04 –

+0

这样可以解决问题,因为“league/oauth2server”发生了突变。参见'/ vendor/league/oauth2-server/src/CryptKey.php'。它强制所有者和权限都以特定的方式设置,'server:server'和'0600'。另请参阅:https://github.com/laravel/passport/issues/418 – mayid

0

同样的问题在这里,我暂时回滚到我的composer.lock文件的早期版本。它看起来像OAuth包试图修改存储文件夹中的密钥的权限,我的服务器没有它。

我将看看包更改日志,看看有什么变化,并可能在几小时后重新运行更新。

+0

是的,它实际上是在尝试更改权限。看到这个提交:https://github.com/thephpleague/oauth2-server/commit/2f8de3d2302beb490abb9475cf426148801c25c4 – mayid

+0

@mayid,现场。然而,我的服务器不允许修改权限,所以我们必须手动调整它,否则我的结果会发表评论。 –

3

终于!我找到了解决方案。 (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 

对于我来说,阿帕奇

3

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

这应该是足够了:

OAuth的private.key的
ls -la 

业主不应该是WWW的数据:

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

一旦完成,通过在存储文件夹中运行此检查您的权限:WWW的数据。
oauth-public的所有者。键应该是www-data:www-data

11

根据最新的oauth-server 5.1.4update,你应该设置一个尚未实现的加密密钥,在passport 2.x

一个简单而快速固定,这是通过使用passport 3.x通过与更新composer.json文件使用oauth-server 6.x

"laravel/passport": "^3.0" 

然后

composer update 
0

这取决于你的Laravel和Passport版本太多。 如果使用最新的Laravel 5.4,它将使用带有Oauth软件包补丁的Passport 3.0。

如果你使用的是larvel 5.3,它使用Passport 1.0(你应该升级!!)[无补丁],但是它使用当时(5.1.4)的stable/OAuth-server稳定版本,请检查file

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