Перенос хэшей паролей с glftpd 2.01 (PKCS5_PBKDF2_HMAC_SHA1) на proftpd + mod_sql_passwd

Для перехода с de-factor с закрытым исходным кодом glftpd 2.01 на proftpd мне нужно перенести хэши паролей учетных записей пользователей с glftpd на proftpd. Читая эту тему, я решил, что mod_sql_passwd должен помочь.

Поэтому я настроил свой сервер proftpd следующим образом:

<global>
    SQLBackend              mysql
    SQLAuthTypes            Crypt
    SQLAuthenticate         users groups

    SQLConnectInfo  testdbuser@testdbhost testdb

    SQLUserInfo     ftpuser userid passwd uid gid homedir shell
    SQLGroupInfo    ftpgroup groupname gid members
    SQLMinID        500
    CreateHome on

[...]

    RootLogin off
    RequireValidShell off
    DefaultRoot ~
</global>

DefaultServer                   off
ServerType                      standalone

<VirtualHost 0.0.0.0>
    Port 21
    PassivePorts 10000 10250
    MasqueradeAddress 123.123.123.123

    SQLAuthTypes pbkdf2
    SQLPasswordPBKDF2 sha1 100 40

    SQLNamedQuery get-user-salt SELECT "salt FROM ftpuser WHERE userid = '%{0}'"
    SQLPasswordUserSalt sql:/get-user-salt Prepend
</VirtualHost>

Хэши в glftpd passwd выглядят следующим образом:

$7e8ab0c7$bf044082ab83875eeb3a2158cd6253f8e88f40cf

База данных выглядит так (представление CSV) :

"id","userid","passwd","salt","uid","gid","homedir","shell","count","accessed","modified"
"1","test","bf044082ab83875eeb3a2158cd6253f8e88f40cf","7e8ab0c7","5500","5500","/data/test","/sbin/nologin","20","2020-03-31 20:02:45","2020-03-25 16:30:49"

Все конфигурации на данный момент приводят к:

USER test (Login failed): No such user found

Хотя на самом деле пользователь существует, и путем изменения хэша на хеш в стиле Crypt () Bcrypt, вход в систему проходит успешно.

Вопросы / проблемы:

  • это неясно, сколько итераций используется для хэшей glftpd из небольшого источника, доступного в glftpd, может быть получено значение итерации 100
  • , неясно, должен ли знак доллара добавляться к соли и значениям хэша или нет
  • proftpd с DebugLevel 10 не дает никакой другой информации, кроме «Тест ПОЛЬЗОВАТЕЛЯ (Ошибка входа): Такой пользователь не найден», хотя с обычным хешем типа Crypt () Bcrypt он работает безупречно (см. верхнюю часть конфигурации)
  • неясно, как строятся хэши glftpd 2.01, я попробовал SQLPasswordOptions HashPassword HashSalt [11 99816], который казался наиболее логичным, но безуспешно [²]

Было бы здорово услышать от кого-нибудь, как у кого-то была аналогичная задача и у кого-то был опыт в этом виде миграции. Также приветствуются дополнительные подсказки, помогающие решить эту тему.

[¹] https://glftpd.io/files/glftpd-LNX_2.01.tgz (bin / sources / PassChk / passhk.c) glftpd 2.01 "passchk.c":

    PKCS5_PBKDF2_HMAC_SHA1(pwd, strlen(pwd), real_salt, SHA_SALT_LEN, 100,
               mdlen, md);

[²] http://www.proftpd.org/docs/contrib/mod_sql_passwd.html#Transformations

2
задан 31 March 2020 в 22:39
1 ответ

Решено:

<global>
    SQLBackend              mysql
    SQLAuthTypes            Crypt
    SQLAuthenticate         users groups

    SQLConnectInfo  testdbuser@testdbhost testdb

    SQLUserInfo     ftpuser userid passwd uid gid homedir shell
    SQLGroupInfo    ftpgroup groupname gid members
    SQLMinID        500
    CreateHome on

[...]

    RootLogin off
    RequireValidShell off
    DefaultRoot ~
</global>

DefaultServer                   off
ServerType                      standalone
Port 0

<VirtualHost 0.0.0.0>
    Port 21
    PassivePorts 10000 10250
    MasqueradeAddress 123.123.123.123

    SQLPasswordEngine on

    SQLAuthTypes pbkdf2
    SQLPasswordPBKDF2 sha1 100 20

    SQLNamedQuery get-user-salt SELECT "salt FROM ftpuser WHERE userid = '%{0}'"
    SQLPasswordUserSalt sql:/get-user-salt Prepend

    SQLPasswordEncoding hex
    SQLPasswordSaltEncoding hex

    SQLPasswordOptions HashEncodeSalt HashEncodePassword
</VirtualHost>

Пришлось

  • определить шестнадцатеричную кодировку строчных символов с помощью SQLPasswordEncoding и SQLPasswordSaltEncoding
  • исправить длину вывода с 40 до 20 байтов с SQLPasswordPBKDF2
  • добавьте SQLPasswordOptions , чтобы дать модулю команду сначала декодировать шестнадцатеричные значения, а затем использовать хэши
  • , чтобы включить SQLPasswordEngine
1
ответ дан 2 April 2020 в 06:32

Теги

Похожие вопросы