Установка PHP на Amazon Linux 2 с включенным Argon2

У меня возникла проблема с включением Argon2 для хеширования паролей. Я собираю PHP из исходного кода Amazon Linux 2, но после завершения сборки и компиляции PHP константа PASSWORD_ARGON2I не определена, и алгоритм недоступен.

Я пробовал множество разных способов компиляции PHP с использованием разных библиотек, но ни один из них не дал мне алгоритма Argon2, который мне нужен. Ниже я перечислю некоторые шаги, которые я предпринял:

1) Предоставление флага --with-sodium

Компиляция с этим флагом завершается, но выполнение тестового сценария, включающего функцию password_hash(), показывает, что Argon2I недоступен.

2) Компиляция с флагом --with-password-argon2

Это не удается скомпилировать из-за отсутствия библиотеки, что можно увидеть в ошибке ниже.

checking for Argon2 support... yes
checking for Argon2 library... not found
configure: error: Please ensure the argon2 header and library are installed

Исходя из этого, я предполагаю, что мне не хватает библиотеки, необходимой для работы флага, поэтому я установил Libsodium . Повторная попытка имеет тот же результат.

3) Далее я устанавливаю еще несколько зависимостей по рекомендации из туториала. Это: - argon2 - libargon2-0 - libargon2-0-dev

Это дает мне инструмент cli argon2, который работает, однако повторная компиляция PHP не работает с теми же ошибками.

На данный момент я не уверен, каков мой следующий шаг, любая помощь будет принята с благодарностью.


person Robert Hucks    schedule 11.04.2019    source источник
comment
Привет Роберт. Не могли бы вы взглянуть на решение и присудить награду? Спасибо   -  person itsben    schedule 18.05.2019
comment
перенастройте пакет и попробуйте установить его снова, я думаю, это сработает, если argon2 установлен правильно   -  person Vineet1982    schedule 21.05.2019


Ответы (3)


Я получил сообщение об ошибке Argon2i не поддерживается.. при попытке установить LexikJWTAuthenticationBundle в моем экземпляре Cloud9 EC2, где работает PHP72. После долгих исследований я нашел решение.

Вот шаги, которые необходимо выполнить.

Установите libsodium:

$ sudo yum install libsodium-devel

После его установки, если вы запустите эту команду для просмотра ваших модулей PHP, вы ожидаете увидеть libsodium в списке, но его там нет.

$ php -m 

Пакет на самом деле установлен какodium.so, а не libsodium.so (возможно, это и есть корень проблемы?). Чтобы PHP загрузил модуль, необходимо выполнить некоторые ручные действия.

Перейдите в каталог, в котором PHP ищет установленные модули.

$ cd /etc/php.d

Создайте файл, который будет указывать на пакет натрия.

$ sudo touch libsodium.ini

Дайте файлу права на чтение/запись.

$ sudo chmod 666 20-libsodium.ini

Откройте файл в редакторе. Мне нравится использовать вим.

$ vi libsodium.ini

Нажмите клавишу «i», чтобы перейти в режим вставки, и вставьте следующее:

; Enable sodium extension module
extension=sodium.so

Сохраните файл, нажав клавишу выхода и набрав:

:wq!

Теперь, если вы посмотрите на установленные модули PHP, набрав php -m, вы увидите список libsodium.

На этом этапе вы должны быть в состоянии запустить все, что вызывало ошибки Argon2i.

К вашему сведению, я не разработчик PHP и не эксперт AWS, но мне нужно было заставить это работать, чтобы развернуть корпоративное приложение PHP на EC2. Так что, если у вас есть какие-либо проблемы с вышеизложенным, я, возможно, не смогу помочь ... но я попытаюсь;)

person Aaron Bazzone    schedule 09.05.2019

Я смог решить эту проблему. Я создал новый экземпляр AWS Amazon Linux 2 и выполнил следующие шаги:

Установить Аргон2

sudo -s
git clone https://github.com/P-H-C/phc-winner-argon2.git
cd phc-winner-argon2
make
make test
make install PREFIX=/usr
cp /usr/lib/libargon2.so.1 /lib64/

Вернитесь в родительский каталог

cd ..

Установите PHP 7.3.5

wget https://www.php.net/distributions/php-7.3.5.tar.gz
tar -zxvf php-7.3.5.tar.gz
cd php-7.3.5
./configure --with-password-argon2
make 
make test
make install
exit

Вернитесь в родительский каталог

cd ..

Проверьте свою версию PHP

php --version

Создайте следующий PHP-скрипт (pwd.php).

<?php

  error_reporting(E_ALL);

  $hash = \password_hash('password', PASSWORD_ARGON2ID);
  echo "$hash\n";

?>

Выполните PHP-скрипт для проверки функциональности Argon2.

php pwd.php

Вы получите вывод, похожий на следующий:

$argon2id$v=19$m=1024,t=2,p=2$dlB2SWdpUEFYZE9RSWNmQg$JGWNTXEomWX1hyM8OfzkRNx5C3zmBu3sqKU1hwohNOU
person itsben    schedule 17.05.2019
comment
Привет, извините за долгий ответ, но нам пришлось перейти к другим проектам, и это отошло на второй план. Спасибо за публикацию инструкций, они помогли мне продвинуться немного дальше с командой конфигурации, однако она все равно выдает ошибку. checking for argon2id_hash_raw in -largon2... no configure: error: Problem with libargon2.(a|so). Please verify that Argon2 header and libaries >= 20161029 are installed Завтра я потрачу время на изучение этого (беглый поиск не дал многого), но буду признателен за любые рекомендации по этому поводу. - person Robert Hucks; 21.05.2019

sudo yum install -y libargon2 libargon2-devel

Это сработало для меня.

person Nick Brunt    schedule 07.10.2020