Apache mod-auth-mysql с зашифрованным паролем phpass (Wordpress)

Мне нужна защита паролем на некоторых веб-страницах за пределами основного сайта Wordpress. Пользователи предпочли бы использовать имена пользователей и пароли, которые у них уже есть в Wordpress.

Очевидным решением может стать использование модуля Apace для аутентификации на основе Mysql: mod-auth-mysql.

Однако это не представляется возможным, потому что Wordpress использует шифрование пароля Phpass, которое не поддерживается mod-auth-mysql.

Есть ли способ обойти это ограничение?


person Peter Lamberg    schedule 22.09.2012    source источник


Ответы (1)


Вы можете использовать пропатченную версию mod-auth-mysql, чтобы принимать зашифрованные пароли Phpass. Я включу инструкции о том, как это сделать в Ubuntu и Debian.

Необработанный файл исправления доступен здесь

Исправление Mod-auth-mysql в Ubuntu/Debian для поддержки Phpass

Эти инструкции были протестированы в Ubuntu 10.4, 12.04 и 14.04.5, но должны работать и на многих других платформах на основе Debian с минимальными изменениями.

Создайте рабочий каталог для сборки исправленного пакета .deb.

mkdir mod-auth-mysql-phpass
cd mod-auth-mysql-phpass

Получите зависимости, необходимые для сборки пакета и исходного кода пакета.

sudo apt-get build-dep mod-auth-mysql fakeroot
apt-get source mod-auth-mysql

Перейдите во вновь созданную исходную папку.

cd mod-auth-mysql-4.3.9

Используйте инструмент Debian для создания патча в правильном формате Debian (.dpatch). Сначала проверьте текущий список патчей.

cat debian/patches/00list

Последний официальный патч будет в конце списка. Используйте имя последнего патча в качестве последнего аргумента команды dpatch-edit-patch ниже. Также выберите номер на один больше для имени нового патча phpass. В моем случае последний патч в списке был 017-doc_persistent_conn.dpatch, а имя патча phpass тогда 018-phpass.

dpatch-edit-patch patch 018-phpass 017-doc_persistent_conn.dpatch

dpatch-edit-patch запустит новую оболочку в специальной папке, которую она будет использовать для создания пользовательского патча в формате Debian.

скачать сырой патч

wget https://pelam.fi/published_sources/mod-auth-mysql-phpass/patch.diff

Примените необработанный патч и удалите его.

patch < patch.diff
rm patch.diff

Сообщите dpatch-edit-patch, что наш пользовательский патч может быть сгенерирован.

exit

Удивитесь вашему новому правильно отформатированному патчу Debian. Вам также следует ознакомиться с изменениями, внесенными этим неофициальным патчем, если вы заботитесь о безопасности :)

cat debian/patches/018-phpass.dpatch 

Добавьте новый патч в список патчей, которые будут применяться при сборке пакета .deb.

echo 018-phpass.dpatch >> debian/patches/00list 

Соберите пропатченный пакет

dpkg-buildpackage -b -uc

Теперь вы можете установить созданный вами пакет .deb (имя собранного пакета может отличаться в зависимости от вашей системы).

sudo dpkg --install ../libapache2-mod-auth-mysql_4.3.9-13.1ubuntu3_amd64.deb

Настройка Mod-auth-mysql для аутентификации в Wordpress с использованием Phpass

Включить mod-auth-mysql:

sudo a2enmod auth_mysql

Перезапустите apache, чтобы новый модуль вступил в силу:

sudo service apache2 restart

Документацию (теперь включая Phpass) можно просмотреть, например. меньше команды

zless /usr/share/doc/libapache2-mod-auth-mysql/DIRECTIVES.gz

Вот пример файла .htaccess, доступ к которому разрешен только администраторам Wordpress:

AuthType Basic
AuthName "Give Wordpress Administrator username and password"

Auth_MySQL_User YOUR_MYSQL_USER_HERE
Auth_MySQL_Password YOUR_MYSQL_PASSWORD_HERE
Auth_MySQL_Host YOUR_MYSQL_SERVER_HERE

AuthBasicAuthoritative Off
# I don't know a better way to disable the default password file authentication
AuthUserFile /dev/null
Auth_MySQL on
Auth_MySQL_DB YOUR_WORDPRESS_MYSQL_SCHEMA_NAME_HERE
Auth_MySQL_Password_Table wp_users
Auth_MySQL_Username_Field wp_users.user_login
Auth_MySQL_Password_Field wp_users.user_pass
Auth_MySQL_Encryption_Types PHPass PHP_MD5

Auth_MySQL_Group_Table "wp_users, wp_usermeta"
Auth_MySQL_Group_Clause "AND wp_users.ID = wp_usermeta.user_id AND wp_usermeta.meta_key='wp-capabilities' and m.meta_value like '%s:13:\"administrator\"%'"
Auth_MySQL_Persistent On
Auth_MySQL_Authoritative Off
Auth_MySQL_CharacterSet utf8

Require valid-user
Order allow,deny
Allow from all
person Peter Lamberg    schedule 22.09.2012
comment
Во-первых, это отлично. Патч отлично работает и компилируется. Я не вижу ничего гнусного в коде. :) Однако он никогда не аутентифицируется в базе данных PHPBB3. Я использую 3.09 на Ubuntu 12.04 с MySQL и Apache2, и в журналах ничего нет. У меня нет способа отладки, и ничего из того, что я пытаюсь сделать, похоже, не работает. Моя конфигурация почти идентична приведенной выше, за исключением того, что элементы группы не включены. Любые идеи? Было ли это проверено на PHPBB3? - person mhradek; 07.01.2013
comment
Спасибо mhradek за указание на то, что PHPBB3 экранирует специальные символы HTML в пароле, как указано здесь >. Старая версия исправления доступна по адресу pelam. .fi/published_sources/mod-auth-mysql-phpass/ Патч pelam.fi/published_sources/mod-auth-mysql-phpass/patch.diff, упомянутый в ответе выше, был обновлен для обработки экранирования при обнаружении варианта PHPBB3 PHPASS. - person Peter Lamberg; 12.01.2013