Установка PHP на Amazon Linux 2 с включенным Argon2 - PullRequest
2 голосов
/ 11 апреля 2019

У меня проблема с включением 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) Далее я устанавливаю еще несколько зависимостей по рекомендации из учебника. Это: - аргон2 - libargon2-0 - libargon2-0-dev

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

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

Ответы [ 2 ]

1 голос
/ 10 мая 2019

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

Вот шаги, которые нужно выполнить.

Установка libsodium:

$ sudo yum install libsodium-devel

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

$ php -m 

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

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

$ cd /etc/php.d

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

$ sudo touch libsodium.ini

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

$ sudo chmod 666 20-libsodium.ini

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

$ vi libsodium.ini

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

; Enable sodium extension module
extension=sodium.so

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

:wq!

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

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

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

0 голосов
/ 17 мая 2019

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

Установите Argon2

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
...