Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

proftpd et backend postgresql

9 réponses
Avatar
Sébastien Kirche
Bonjour,

je souhaite mettre en ½uvre un « petit » serveur ftp pour lequel je ne
veux pas avoir à jouer avec les comptes unix de ma machine pour gérer
les comptes ftp. Comme j'ai par ailleurs PostgreSQL ici pour du dev
perso, la solution proftpd + postgresql me semblait la meilleure.

Seulement il semble n'exister qu'UN seul tuto[¹] léger sur la question
dans tout le web et je n'arrive pas à faire le fonctionner. J'ai suivi
les indications du document comprenant la création de 2 tables pour les
utilisateurs et les logs, à la différence que je les ai créées dans une
base dédiée.

Quand je tente un login ftp, il semble que l'authentification échoue
mais dans le log sql de proftpd rien n'indique la cause du problème.

J'ai peut-être raté un truc avec les uid et gid mais ce n'est pas clair.
Si l'un d'entre vous utilise cette méthode et veut bien partager sa
config je suis preneur.

En attendant voilà la transcription d'un essai de connexion ftp avec un
utilisateur 'test' dont le mot de passe est en clair dans la table
ftp.users, ainsi que les seules infos que j'obtiens dans le fichier de
trace sql (spécifié par SQLLogFile).

,----
| 17:32 seki@petisuix ~% ftp obelix
| Connected to obelix.seki.fr.
| 220 ProFTPD 1.3.0 Server (Obelix) [::ffff:192.168.0.10]
| Name (obelix:seki): test
| 331 Password required for test.
| Password:
| 530 Login incorrect.
| Login failed.
| 421 Service not available, remote server has closed connection
`----

,----
| Feb 18 17:33:26 mod_sql/4.2.1[13142]: defaulting to 'postgres' backend
| Feb 18 17:33:26 mod_sql/4.2.1[13142]: backend module 'mod_sql_postgres/4.02'
| Feb 18 17:33:26 mod_sql/4.2.1[13142]: backend api 'mod_sql_api_v2'
| Feb 18 17:33:26 mod_sql/4.2.1[13142]: >>> sql_sess_init
| Feb 18 17:33:26 mod_sql/4.2.1[13142]: entering postgres cmd_defineconnection
| Feb 18 17:33:26 mod_sql/4.2.1[13142]: name: 'default'
| Feb 18 17:33:26 mod_sql/4.2.1[13142]: user: 'proftpd'
| Feb 18 17:33:26 mod_sql/4.2.1[13142]: host: 'localhost'
| Feb 18 17:33:26 mod_sql/4.2.1[13142]: db: 'ftp_users'
| Feb 18 17:33:26 mod_sql/4.2.1[13142]: port: '5432'
| Feb 18 17:33:26 mod_sql/4.2.1[13142]: ttl: '0'
| Feb 18 17:33:26 mod_sql/4.2.1[13142]: exiting postgres cmd_defineconnection
| Feb 18 17:33:26 mod_sql/4.2.1[13142]: entering postgres cmd_open
| Feb 18 17:33:26 mod_sql/4.2.1[13142]: connection 'default' opened
| Feb 18 17:33:26 mod_sql/4.2.1[13142]: connection 'default' count is now 1
| Feb 18 17:33:26 mod_sql/4.2.1[13142]: exiting postgres cmd_open
| Feb 18 17:33:26 mod_sql/4.2.1[13142]: backend successfully connected.
| Feb 18 17:33:26 mod_sql/4.2.1[13142]: mod_sql engine : on
| Feb 18 17:33:26 mod_sql/4.2.1[13142]: negative_cache : off
| Feb 18 17:33:26 mod_sql/4.2.1[13142]: authenticate : users
| Feb 18 17:33:26 mod_sql/4.2.1[13142]: usertable : ftp.users
| Feb 18 17:33:26 mod_sql/4.2.1[13142]: userid field : userid
| Feb 18 17:33:26 mod_sql/4.2.1[13142]: password field : passwd
| Feb 18 17:33:26 mod_sql/4.2.1[13142]: uid field : uid
| Feb 18 17:33:26 mod_sql/4.2.1[13142]: gid field : gid
| Feb 18 17:33:26 mod_sql/4.2.1[13142]: homedir field : homedir
| Feb 18 17:33:26 mod_sql/4.2.1[13142]: homedir(default) : '/mnt/hda3/ftp'
| Feb 18 17:33:26 mod_sql/4.2.1[13142]: shell field : shell
| Feb 18 17:33:26 mod_sql/4.2.1[13142]: homedirondemand : false
| Feb 18 17:33:26 mod_sql/4.2.1[13142]: SQLMinUserUID : 999
| Feb 18 17:33:26 mod_sql/4.2.1[13142]: SQLMinUserGID : 999
| Feb 18 17:33:26 mod_sql/4.2.1[13142]: <<< sql_sess_init
| Feb 18 17:33:39 mod_sql/4.2.1[13142]: >>> sql_pre_pass
| Feb 18 17:33:39 mod_sql/4.2.1[13142]: <<< sql_pre_pass
| Feb 18 17:33:39 mod_sql/4.2.1[13142]: >>> cmd_getpwnam
| Feb 18 17:33:39 mod_sql/4.2.1[13142]: entering postgres cmd_escapestring
| Feb 18 17:33:39 mod_sql/4.2.1[13142]: exiting postgres cmd_escapestring
| Feb 18 17:33:39 mod_sql/4.2.1[13142]: cache miss for user 'test'
| Feb 18 17:33:39 mod_sql/4.2.1[13142]: entering postgres cmd_select
| Feb 18 17:33:39 mod_sql/4.2.1[13142]: entering postgres cmd_open
| Feb 18 17:33:39 mod_sql/4.2.1[13142]: connection 'default' count is now 2
| Feb 18 17:33:39 mod_sql/4.2.1[13142]: exiting postgres cmd_open
| Feb 18 17:33:39 mod_sql/4.2.1[13142]: query "SELECT userid, passwd, uid, gid, ho
| medir, shell FROM ftp.users WHERE (userid='test') LIMIT 1"
| Feb 18 17:33:39 mod_sql/4.2.1[13142]: entering postgres cmd_close
| Feb 18 17:33:39 mod_sql/4.2.1[13142]: connection 'default' count is now 1
| Feb 18 17:33:39 mod_sql/4.2.1[13142]: exiting postgres cmd_close
| Feb 18 17:33:39 mod_sql/4.2.1[13142]: exiting postgres cmd_select
| Feb 18 17:33:39 mod_sql/4.2.1[13142]: cache miss for user 'test'
| Feb 18 17:33:39 mod_sql/4.2.1[13142]: user 'test' cached
| Feb 18 17:33:39 mod_sql/4.2.1[13142]: + pwd.pw_name : test
| Feb 18 17:33:39 mod_sql/4.2.1[13142]: + pwd.pw_uid : 121
| Feb 18 17:33:39 mod_sql/4.2.1[13142]: + pwd.pw_gid : 65534
| Feb 18 17:33:39 mod_sql/4.2.1[13142]: + pwd.pw_dir : /mnt/hda3/ftp
| Feb 18 17:33:39 mod_sql/4.2.1[13142]: + pwd.pw_shell :
| Feb 18 17:33:39 mod_sql/4.2.1[13142]: <<< cmd_getpwnam
| Feb 18 17:33:39 mod_sql/4.2.1[13142]: >>> cmd_auth
| Feb 18 17:33:39 mod_sql/4.2.1[13142]: entering postgres cmd_escapestring
| Feb 18 17:33:39 mod_sql/4.2.1[13142]: exiting postgres cmd_escapestring
| Feb 18 17:33:39 mod_sql/4.2.1[13142]: cache hit for user 'test'
| Feb 18 17:33:39 mod_sql/4.2.1[13142]: >>> cmd_check
| Feb 18 17:33:39 mod_sql/4.2.1[13142]: checking auth_type Plaintext
| Feb 18 17:33:39 mod_sql/4.2.1[13142]: 'Plaintext' auth handler reports success
| Feb 18 17:33:39 mod_sql/4.2.1[13142]: cache hit for user 'test'
| Feb 18 17:33:39 mod_sql/4.2.1[13142]: <<< cmd_check
| Feb 18 17:33:39 mod_sql/4.2.1[13142]: <<< cmd_auth
| Feb 18 17:33:39 mod_sql/4.2.1[13142]: entering postgres cmd_exit
| Feb 18 17:33:39 mod_sql/4.2.1[13142]: entering postgres cmd_close
| Feb 18 17:33:39 mod_sql/4.2.1[13142]: connection 'default' closed
| Feb 18 17:33:39 mod_sql/4.2.1[13142]: connection 'default' count is now 0
| Feb 18 17:33:39 mod_sql/4.2.1[13142]: exiting postgres cmd_close
| Feb 18 17:33:39 mod_sql/4.2.1[13142]: exiting postgres cmd_exit
`----


[¹] http://www.howtoforge.com/proftpd_postgresql_auth_logging
--
Sébastien Kirche

9 réponses

Avatar
Sébastien Monbrun aka TiChou
Dans le message <news:,
*Sébastien Kirche* tapota sur f.c.o.l.configuration :

Salut Sébastien,

Je te fais une réponse indirecte et rapide.

[...]

Une raison pour préférer ProFTPd à vsftpd ? Je verrais bien la solution
suivante : vsftpd + pam_pgsql

--
Sébastien Monbrun aka TiChou
Avatar
Sébastien Kirche
Le 18 février 2007 à 18:53, Sébastien Monbrun aka TiChou s'est exprimé
ainsi :

Je te fais une réponse indirecte et rapide.


C'est déjà ça : je me sens moins seul.

[...]

Une raison pour préférer ProFTPd à vsftpd ?


Oui, il était déjà installé dans mon système sans que je m'en sois servi
jusqu'alors.

Je verrais bien la solution suivante : vsftpd + pam_pgsql


OK, je vais étudier le cas et je reviens :)
Merci.
--
Sébastien Kirche

Avatar
Arol
"Sébastien Kirche" a écrit dans le message de news:
Seulement il semble n'exister qu'UN seul tuto[¹] léger sur la question
dans tout le web et je n'arrive pas à faire le fonctionner.


En général, quand on a une idée, qu'on cherche sur le net qu'on trouve quasi
aucune référence sur le sujet, c'est qu'ou bien l'idée est génialissime ou
bien sans aucun intérêt.
Dans 99.99% des cas, l'idée n'a aucun intérêt.
Donc, faut chercher une autre idée.

Par conséquent, la 1ère chose que je fais avant de me lancer dans la
réalisation d'une solution, c'est de vérifier sur le net le nombre de
références sur le sujet.
Je choisis quasi systématiquement les solutions les plus populaires ou tous
les problèmes aux quels j'aurais à faire face ont déjà leurs solutions.

C'est pour ça que malgré mon incompétence notoire en informatique, j'arrive
à faire illusion sans qu'on puisse me prendre à défaut : )
Merci internet.

Avatar
Sébastien Kirche
Le 18 février 2007 à 21:38, Arol s'est exprimé ainsi :

"Sébastien Kirche" a écrit dans le message de news:
Seulement il semble n'exister qu'UN seul tuto[¹] léger sur la
question dans tout le web et je n'arrive pas à faire le fonctionner.


En général, quand on a une idée, qu'on cherche sur le net qu'on trouve
quasi aucune référence sur le sujet, c'est qu'ou bien l'idée est
génialissime ou bien sans aucun intérêt. Dans 99.99% des cas, l'idée
n'a aucun intérêt. Donc, faut chercher une autre idée.


En l'occurrence, j'ai vu quelques posts qui traitent du sujet, mais une
seule personne a pris la peine de rédiger un tuto sur la question. Les
autres pointent sur celui-ci.

Par conséquent, la 1ère chose que je fais avant de me lancer dans la
réalisation d'une solution, c'est de vérifier sur le net le nombre de
références sur le sujet. Je choisis quasi systématiquement les
solutions les plus populaires ou tous les problèmes aux quels j'aurais
à faire face ont déjà leurs solutions.


Mais sans connaître spécialement un serveur ftp particulier, j'étais
parti pour faire avec celui qui est (était) en place. Je ne sais pas
depuis quand, ça va faire 4 ans que je fais vivre mon système sans
réinstallation.

Pour prendre un parallèle, c'est un peu comme pour le MTA : faut-il
faire confiance à exim4 en place ou faut-il installer postfix ? Quand on
ne connaît pas trop le sujet c'est schtroumpf vert et vert schtroumpf,
et venir poser la question ça peut s'apparenter à demander si on préfère
Emacs à Vi ou les slips aux caleçons :)

C'est pour ça que malgré mon incompétence notoire en informatique,
j'arrive à faire illusion sans qu'on puisse me prendre à défaut : )
Merci internet.


:)
--
Sébastien Kirche


Avatar
Sébastien Kirche
Le 18 février 2007 à 20:48, Sébastien Kirche a formulé :

Je verrais bien la solution suivante : vsftpd + pam_pgsql


OK, je vais étudier le cas et je reviens :)


Bon, après avoir un peu joué avec j'ai simplement déplacé mon problème.
J'ai configuré /etc/pam.d/vsftpd, /etc/vsftpd.conf mais je ne peux
toujours pas me logger sur le ftp : 530 login incorrect.

J'essaie de creuser tout seul mais je ne trouve pas de log d'erreur de
pam_pgsql.
J'ai eu d'abord des choses dans /var/log/user.log à cause d'un problème
d'installation de pam_pgsql mais maintenant à part /var/log/vsftpd.log
qui ne contient que les commandes ftp je n'ai rien de plus.
J'ai bien vu que pam_pgsql avait une option 'debug' qui est censée
envoyer des choses à syslog mais je ne les trouve pas.

Sinon je pense que j'ai un problème probablement sur le stockage du mot
de passe. Suivant un tuto[¹] j'ai une colonne dans la tables des comptes
définie en char(32) et pam_pgsql est réglé pour utiliser le format md5,
est-ce que cette commande est valable pour générer rapidement un mot de
passe à placer dans la table qui correspond à 'test' :

perl -MDigest::MD5 -e 'print Digest::MD5::md5_hex("test")."n"'


[¹] http://viki.brainsware.org/VirtualUsersjMCg
--
Sébastien Kirche


Avatar
Vincent Bernat
OoO Lors de la soirée naissante du dimanche 18 février 2007, vers
17:47, Sébastien Kirche
disait:

je souhaite mettre en ½uvre un « petit » serveur ftp pour lequel je ne
veux pas avoir à jouer avec les comptes unix de ma machine pour gérer
les comptes ftp. Comme j'ai par ailleurs PostgreSQL ici pour du dev
perso, la solution proftpd + postgresql me semblait la meilleure.


Je sais faire pour proftpd + sonfichierpassword à lui. Si ça t'intéresse.
--
HARDFAIL("Not enough magic.");
2.4.0-test2 /usr/src/linux/drivers/block/nbd.c

Avatar
Sébastien Kirche
Le 20 février 2007 à 23:00, Vincent Bernat s'est exprimé ainsi :

Je sais faire pour proftpd + sonfichierpassword à lui. Si ça
t'intéresse.


À priori je suis passé à vsftpd, mais ça m'intéresse quand même de
savoir par quoi tu passes. C'est juste une directive dans le
proftpd.conf + une liste dans un fichier, ou ça utilise un truc un peu
plus sophistiqué style pam ?
--
Sébastien Kirche

Avatar
Vincent Bernat
OoO En cette nuit nuageuse du mercredi 21 février 2007, vers 00:10,
Sébastien Kirche disait:

Je sais faire pour proftpd + sonfichierpassword à lui. Si ça
t'intéresse.


À priori je suis passé à vsftpd, mais ça m'intéresse quand même de
savoir par quoi tu passes. C'est juste une directive dans le
proftpd.conf + une liste dans un fichier, ou ça utilise un truc un peu
plus sophistiqué style pam ?


Un simple fichier.

AuthUserFile /etc/proftpd.users
AuthOrder mod_auth_file.c
--
Je vote [OUI] (mon chat aussi) a la creation de fr.comp.misc.dinosaures
-+- XH in: Guide du Cabaliste Usenet - Bien configurer son dinosaure -+-


Avatar
Sébastien Kirche
Le 21 février 2007 à 00:34, Sébastien Monbrun aka TiChou vraute :

Désolé du délai mais j'ai tout un tas d'autres trucs à régler en ce
moment que me prendre la tête avec un *&@# de serveur ftp en plus de
soucis de santé.

Bon, après avoir un peu joué avec j'ai simplement déplacé mon
problème. J'ai configuré /etc/pam.d/vsftpd, /etc/vsftpd.conf mais je
ne peux toujours pas me logger sur le ftp : 530 login incorrect.


Tu devrais peut être publier tes fichiers de configuration.


Je vais m'y replonger après avoir laissé un peu décanter le truc.

Je pense maintenant que mon problème est plus du côté de la mise en
oeuvre de pam puisque j'ai le même résultat en utilisant une autre
méthode (pam_userdb).

J'essaie de creuser tout seul mais je ne trouve pas de log d'erreur
de pam_pgsql.


C'est journalisé via syslog.

J'ai bien vu que pam_pgsql avait une option 'debug' qui est censée
envoyer des choses à syslog mais je ne les trouve pas.


Normallement dans le fichier qui journalise le level debug.


J'ai bien un /var/log/debug qui est utilisé dans
/etc/syslog-ng/syslog-ng.conf (paramétrage par défaut) mais rien qui
concerne vsftp/pam/pgsl


Sinon je pense que j'ai un problème probablement sur le stockage du
mot de passe. Suivant un tuto[¹] j'ai une colonne dans la tables des
comptes définie en char(32) et pam_pgsql est réglé pour utiliser le
format md5,


Pourquoi n'essayes-tu d'abord pas avec un mot de passe en clair en
configurant pam_pgsql avec pw_type à clear ?


Comme dit plus haut, j'ai aussi essayé avec pam_userdb et ça ne marche
pas mieux, erreur identique 530 login incorrect. Ce qui me gonfle c'est
que je n'arrive pas à avoir d'info plus précise que « ça ne marche pas »
le seul log qui est alimenté est celui de vsftpd qui déroule la session
ftp mais je ne sais pas pourquoi le login est incorrect.

Il n'y aurait pas moyen avec un outil de test d'invoquer pam pour tester
l'authentification ? Histoire de ne pas cumuler des problèmes de config
ftp avec la config pam ?

est-ce que cette commande est valable pour générer rapidement un mot
de passe à placer dans la table qui correspond à 'test' :

perl -MDigest::MD5 -e 'print Digest::MD5::md5_hex("test")."n"'


Oui (attention à ne pas insérer le retour à la ligne dans la base de
donnée). Ou bien :

$ printf "test" | md5sum


j'avais essayé avec echo "test" | md5sum et je vois que la différence
vient justement du n.

--
Sébastien Kirche