Pure-ftpd postgres adatbázissal

 ( pekob | 2017. április 19., szerda - 17:59 )

Sziasztok!

Csináltam egy pure-ftpd szervert, ami Postgres-ből autentikál.
De most kiderült, hogy egy már meglévő táblából kell autentikálnia, abban viszont SHA512-ben vannak tárolva a jelszavak.
A pure-ftpd konfig fájljában nincs utalás, hogy tudná ezt a titkosítást és eddig a google sem segített.
Valaki csinált már ilyet?

Köszönöm!

Hozzászólás megjelenítési lehetőségek

A választott hozzászólás megjelenítési mód a „Beállítás” gombbal rögzíthető.


- The user's password, hashed using argon2i, scrypt or crypt(3). SHA1 and MD5
are also supported for legacy reasons, but shouldn't be used any more.
Pure-FTPd also accepts the "any" value for the PGSQLCrypt field.
With "any", all hash functions are sequentially tried.


* RECOMMENDATION: Do not use SHA1, MD5, or, obviously, plaintext. Unless your
system provides a decent crypt() function, use a PostgreSQL function to verify
the hashed password or use argon2i/scrypt.

https://download.pureftpd.org/pub/pure-ftpd/doc/README.PGSQL


Passwords are hashed with the most secure hash function your system supports.
Hashes are tried in this order: argon2i, scrypt, bcrypt, SHA-512, MD5.


Argon2i and scrypt are the recommended functions, and require pure-ftpd to be
compiled in presence of libsodium.

https://download.pureftpd.org/pub/pure-ftpd/doc/README.Virtual-Users

Ezek alapján akár működhet is ha crypt-et adsz meg, de ha az nem megy próbáld meg az any-t.

♲♻♲

Köszi, próbáltam tegnap crypt-tel, ma meg any-vel, de nem szereti.
Így raktam bele a jelszót a mezőbe:
SELECT ENCODE(DIGEST('AnveshPassword','sha512'),'hex');

Ha ezzel generálok 512-es jelszót, azt megeszi:
python2.7 -c 'import sys, crypt, getpass; print(crypt.crypt(getpass.getpass("Password: "), crypt.METHOD_SHA512))'

De abban az adatbázisban, ahhonan autentikálni kéne, ott {SHA512}-vel kezdődnek a jelszavak, és azokat nem eszi meg, akkor sem, ha $6$-ra cserélem az elejét.

Az szerintem úgy kevés, van ott még valami salt is a dologban, illetve egy 3. $ karakter ha megnézed.
Valami ilyesmi: $6${salt}${hash}

♲♻♲

Hmm, hát igen, ebben lehet valami.
Annak idején így készítettem sha512 jelszavakat a dovecot-tal:
uj_pwd=$(doveadm pw -s SHA512 -p $regi_pwd)
Most ezeket a jelszavakat kéne megetetnem a pure-ftpd-vel.

Hát azt kéne kiderítened, hogy a doveadm milyen formátumot állít elő és, hogy abból tudsz-e olyat csinálni amit a crypt megeszik.

♲♻♲

A baj az, hogy ha még azt a plusz $ karaktert oda is teszed akkor sem lesz jó mert a crypt nem ugyanazt base64-et használja, mint a sima sha512 hash.

Itt van egy bash implementáció:
http://www.vidarholen.net/contents/blog/?p=33
http://www.vidarholen.net/contents/junk/files/sha512crypt.bash
Ebből szerintem ki tudod hámozni azt, hogy az eredetileg tárolt hash-ből tudsz-e olyan formátumot előállítani, amit megeszik a crypt.

♲♻♲

Az igen, ehhez lehet hogy kevés vagyok, de nézegetem, köszi!

A doveadm ezt csinálja:
https://github.com/dovecot/core/blob/master/src/auth/password-scheme.c#L520

Illetve az talán még fontosabb és nagyobb segítség, hogy hogyan bontja ki:
https://github.com/dovecot/core/blob/master/src/auth/password-scheme.c#L498

♲♻♲

Belemászok, nagyon köszönöm.