2017-07-03 39 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