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

时间:2017-07-03 07:24:50

标签: php laravel-5 oauth permissions laravel-passport

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

  

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

     

更新laravel / framework(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:install 生成新的 oauth - 文件。

现在,在尝试访问 api 路由时出现以下错误。

  

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

堆栈跟踪

  

在CryptKey.php(第51行)

     

at 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'))

     

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

     

在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 Security Improvements

  

版本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 Passport的维护者必须解决这个问题。

更新2

删除供应商文件夹并再次执行 composer install 后,我仍然遇到同样的错误。

7 个答案:

答案 0 :(得分:24)

尝试:

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

它解决了我的问题。

答案 1 :(得分:12)

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

通过使用passport 3.x更新您的oauth-server 6.x文件,composer.json使用"laravel/passport": "^3.0" 即可轻松快速地解决此问题。

composer update

然后

apt-get update && apt-get upgrade bazel

答案 2 :(得分:5)

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

let app = XCUIApplication()
let loginButton = app.buttons["Login"]
loginButton.tap()

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

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

对我来说,这是 apache

答案 3 :(得分:3)

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

所有

这应该足够了:

.useXpath().click("(//*[contains(text(),'Button 1')])[2]")

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

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

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

答案 4 :(得分:0)

作曲家安装对我有用:)

答案 5 :(得分:0)

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

我将查看软件包更改日志,查看更改内容,并在下班后重新运行更新。

答案 6 :(得分:0)

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

如果你使用的是larvel 5.3它使用的是Passport 1.0(你应该升级!!)[没有补丁],但是它使用的是当时(5.1.4)的联盟/ OAuth服务器的稳定版本,它有支票file

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