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

Ila*_*ler 17 php permissions oauth laravel-5 laravel-passport

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

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

更新laravel/framework(v5.4.27 => v5.4.28):正在下载(100%)
安装defuse/php-encryption(v2.1.0):正在下载(100%)
正在更新league/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行)

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

文件权限

-rw-r--r-- user:user oauth-private.key
-rw-r--r-- user:user oauth-public.key
Run Code Online (Sandbox Code Playgroud)

更新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 Passport的维护者必须解决这个问题.

更新2

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

小智 24

尝试:

sudo chown www-data:www-data storage/oauth-*.key
sudo chmod 600 storage/oauth-*.key
Run Code Online (Sandbox Code Playgroud)

它解决了我的问题.


Abd*_*aid 12

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

对此的简单快速解决方法是通过使用以下passport 3.x内容oauth-server 6.x更新composer.json文件来使用哪些用途:

"laravel/passport": "^3.0"
Run Code Online (Sandbox Code Playgroud)

然后

composer update
Run Code Online (Sandbox Code Playgroud)


Art*_*yan 5

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

chown apache:apache oauth-public.key
chown apache:apache oauth-private.key
Run Code Online (Sandbox Code Playgroud)

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

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

对我来说是阿帕奇


小智 5

将 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
Run Code Online (Sandbox Code Playgroud)

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

ls -la
Run Code Online (Sandbox Code Playgroud)

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


小智 1

作曲家安装对我有用:)