我将 nextcloud 安装从一台服务器移动到另一台服务器。在新服务器上,我想使用另一个版本的 PHP。问题是密码使用 argon2 算法(在表oc_users
和数据库oc_share
中)进行哈希处理。nextcloud
问题是新版本似乎不支持 argon2,当我尝试在新服务器上使用我知道可以在旧服务器上工作的用户+密码登录时,我收到“密码错误”消息。
在旧服务器上,我使用的是 remi 存储库中的 PHP 7.2;在新服务器上,我想使用 centos-sclo-rh 存储库中的 PHP 7.2 或 7.3(不在乎)。
user@home $ ssh old
user@old $ php --version
PHP 7.2.29 (cli) (built: Mar 17 2020 11:36:18) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.2.0, Copyright (c) 1998-2018 Zend Technologies
with Zend OPcache v7.2.29, Copyright (c) 1999-2018, by Zend Technologies
user@old $ php -r 'var_dump(PASSWORD_ARGON2I);'
int(2)
user@old $ exit
user@home $ ssh new
user@new $ scl enable rh-php72 -- php --version
PHP 7.2.24 (cli) (built: Nov 4 2019 10:23:08) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.2.0, Copyright (c) 1998-2018 Zend Technologies
with Zend OPcache v7.2.24, Copyright (c) 1999-2018, by Zend Technologies
user@new $ scl enable rh-php73 -- php --version
PHP 7.3.11 (cli) (built: Dec 10 2019 16:14:50) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.3.11, Copyright (c) 1998-2018 Zend Technologies
user@new $ scl enable rh-php72 -- php -r 'var_dump(PASSWORD_ARGON2ID);'
Warning: Use of undefined constant PASSWORD_ARGON2ID - assumed 'PASSWORD_ARGON2ID' (this will throw an Error in a future version of PHP) in Command line code on line 1
string(17) "PASSWORD_ARGON2ID"
user@new $ scl enable rh-php73 -- php -r 'var_dump(PASSWORD_ARGON2ID);'
PHP Warning: Use of undefined constant PASSWORD_ARGON2ID - assumed 'PASSWORD_ARGON2ID' (this will throw an Error in a future version of PHP) in Command line code on line 1
string(17) "PASSWORD_ARGON2ID"
我也尝试安装sclo-php7{2,3}-php-sodium
andlibsodium
因为我发现了这个:https ://stackoverflow.com/a/59392421/4102092但它没有帮助。
最后的问题是: 如何使用软件集合存储库中的 PHP 包并获得 argon2 支持?
你不能。
钠扩展仅在 PHP >= 7.4 中提供 argon2 密码哈希算法,在以前的版本中不提供。
在 7.2 / 7.3 中,argon2 是“标准”扩展的一部分,并且在 RH 构建中被禁用,因为 libargon2 在 RHEL / CentOS 中不可用
所以这是目前唯一的解决方案。