У меня есть приложение Rails с гемом аутентификации Devise, запускающим регистрацию и вход в систему. Я хочу использовать таблицу db, которую Devise заполняет, когда пользователь регистрируется в качестве таблицы, которую Postfix использует для аутентификации пользователей.
В таблице есть все поля, которые могут понадобиться Postfix для аутентификации SASL, за исключением того, что Devise шифрует пароль с помощью Blowfish перед помещением его в базу данных.
Как я могу заставить Postfix / SASL расшифровать эти пароли, чтобы пользователь мог быть правильно аутентифицирован? Придумайте соленый пароль, так что я не уверен, поможет ли это.
Какие-либо предложения? Скорее всего, я бы хотел сделать что-то подобное с Dovecot или Courier, я пока не привязан к одному из них.
postfix можно настроить для использования голубятня для аутентификации SASL, поэтому вам может быть лучше начать наоборот и выяснить, сможете ли вы заставить Dovecot обрабатывать эти хэши.
Имейте в виду, что хэши не предназначены для «дешифрования». Когда кто-то хочет войти в систему, приложение берет исходную соль, пароль, предоставленный пользователем, и пересчитывает хэш, если хеши совпадают, пароль был «правильным».
Это просто необработанные хэши, которые Devise хранит в базе данных, или они хранятся в формате Modular Crypt (начинается с $x$...
)? Если они находятся в формате криптографии, Dovecot сможет поддерживать их, пока вы укажете scheme=CRYPT
. Единственное, что я не вижу идентификатора MCF для SHA-1, только 5 долларов, что составляет SHA-256, и 6 долларов, что -512 (оба являются хешами семейства SHA-2).
В качестве альтернативы, если Devise использует функцию, доступную к базе данных, для создания пароля (например, функция MySQL PASSWORD ()), вы должны иметь возможность создать собственный запрос к базе данных для аутентификации с использованием любого коннектора базы данных почтового сервера, который дает вам возможность делать что-то вроде
SELECT NULL AS password, 'Y' as nopassword, userid AS user FROM users WHERE userid = '%u' AND mysql_pass = password('%w')
Я не уверен, сработает это для вас или нет, но на прошлой неделе в RSA была компания, предлагающая прозрачное шифрование данных для mySQL в Linux. Я никогда раньше не видел хорошего способа сделать это, но у этих ребят, похоже, он есть.
Они шифруют диск по мере записи mySQL и дешифруют по запросу данных. Никаких изменений в приложении или структуре данных вообще. Компания - Gazzang, сайт - www.gazzang.com.
Надеюсь это поможет.