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

Posted

技术标签:

【中文标题】Laravel chmod(/var/dev/project/storage/oauth-public.key):操作失败:不允许操作【英文标题】:Laravel chmod(/var/dev/project/storage/oauth-public.key): Operation failed: Operation not permitted 【发布时间】:2017-12-06 09:18:13 【问题描述】:

更新以下软件包后,我收到一个错误,即找不到 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%)

首先我删除了project/storage中的两个oauth-文件,然后执行这个命令:php artisan passport:install生成新的oauth-强>文件。

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

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

堆栈跟踪

在 CryptKey.php(第 51 行)中

在 HandleExceptions->handleError(2, 'chmod(/var/dev/project/storage/oauth-public.key): Operation failed: Operation not allowed', '/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'))

在 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 后,我仍然遇到同样的错误。

【问题讨论】:

我也是。我也遇到了这个错误 【参考方案1】:

试试:

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

它解决了我的问题。

【讨论】:

它解决了问题,但所有其他所有者和组都设置为我的用户。所以我认为将所有者设置为 www-data 是不正确的? 在 Ubuntu 16.04 上运行良好 这解决了这个问题,因为“league/oauth2server”有重大变化。见/vendor/league/oauth2-server/src/CryptKey.php。它强制以特定方式设置所有者和权限,server:server0600。另请参阅:github.com/laravel/passport/issues/418 谢谢伙计,就我而言,我必须将其设为 chmod 660【参考方案2】:

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

一个简单快速的解决方法是使用passport 3.x,它使用oauth-server 6.x,通过更新你的composer.json文件:

"laravel/passport": "^3.0"

然后

composer update

【讨论】:

非常感谢!此解决方案对我有用,无需更改任何所有者或权限。【参考方案3】:

终于!我找到了解决方案。 (CentO)

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

【讨论】:

【参考方案4】:

将 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

【讨论】:

【参考方案5】:

composer install 对我有用 :)

【讨论】:

刚刚尝试过......但我仍然得到与问题中描述的相同的错误。【参考方案6】:

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

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

【讨论】:

是的,它实际上是在尝试更改权限。请参阅此提交:github.com/thephpleague/oauth2-server/commit/… @mayid,在那儿。但是,我的服务器不允许修改权限,所以我们必须手动调整它并在我的结果中发表评论。【参考方案7】:

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

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

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

【讨论】:

以上是关于Laravel chmod(/var/dev/project/storage/oauth-public.key):操作失败:不允许操作的主要内容,如果未能解决你的问题,请参考以下文章

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

laravel 上线注意事项 (ubuntu lamp)

laravel 安装

Deepin-安装laravel

Laravel 5:laravel.log 无法打开:权限被拒绝

laravel 项目上传服务器 500