Aller au contenu

[RESOLU] Debian Etch - Pure-ftpd-mysql


Messages recommandés

Salut,

Je veux installer PureFtpd sur ma nouvelle Debian Etch 4.0 en version MySQL pour gérer facilement des usagers virtuels depuis une interface web (je crois que c'est ce que tout le monde veux... sauf ceux qui passe par LDAP/AD).

J'ai installé le serveur, j'ai lu pas ma toute la doc et le man disponible. J'ai remarqué que Pure-Ftpd pour Debian était différent du PureFtpd original pour éviter des fichiers de configurations différents, il utilise un wrapper. Déjà là ça devrait simplifier ma vie :roll:

apt-get install pure-ftpd pure-ftpd-mysql

... déjà là il y a un problème !!!! APT refuse l'installation des 2 paquets simultanément. Il dit que c'est soit pure-ftpd ou soit pure-ftpd-mysql ??? Alors quoi faire lorsque quelqu'un veut avoir un serveur FTP utilisant les comptes Unix et MySQL ou encore même LDAP simultanément (car il y a un paquet pure-ftpd-ldap) ?

Alors j'installe uniquement pure-ftpd-mysql

Problème ! Le wrapper ne marche pas. lorsque je me connectes avec un client j'ai l'erreur:

Can't exec "/usr/sbin/pure-ftpd": No such file or directory at /usr/sbin/pure-ft
pd-wrapper line 174.
/usr/sbin/pure-ftpd-wrapper: Cannot exec /usr/sbin/pure-ftpd: No such file or di
rectory at /usr/sbin/pure-ftpd-wrapper line 174.
Connexion fermée par l'hôte distant.

Comme indiqué à la ligne 174 je retrouve une ligne de commande exécutant le programme /usr/sbin/pure-ftpd mais ce fichier n'existe pas ...

J'essais donc d'installer le paquet pure-ftpd comme ceci:

apt-get install pure-ftpd

APT me dit qu'il va désinstaller le paquet pure-ftpd-mysql pour que pure-ftpd puisse s'installer ;)

J'ai pas le choix, je le fais !

Je retourne dans /etc/pure-ftpd, je remarque que tous les fichiers concernant MySQL sont toujours présent. Je me dis alors que ce qui concerne MySQL n'est pas effacé. Sauf le fichier qui sert au wrapper pour lancer l'exécution de PureFtpd.

Par la suite,

J'ai créé un compte Unix pour le virtuel:

groupadd -g 1000 ftpd
useradd -m -g 1000 -s /bin/nologin -u 1000 ftpd

J'ai configuré le fichier /etc/pure-ftpd/db/mysql.conf:

MYSQLSocket  /var/run/mysqld/mysqld.sock
MYSQLUser  monuser
MYSQLPassword  monpasswd
MYSQLDatabase  pureftpd
MYSQLCrypt  cleartext
MYSQLGetPW  SELECT password FROM ftpd WHERE user="\L"
MYSQLGetUID  SELECT uid FROM ftpd WHERE user="\L"
MYSQLGetGID  SELECT gid FROM ftpd WHERE user="\L"
MYSQLGetDir  SELECT dir FROM ftpd WHERE user="\L"

J'ai créé la base de données, table et champs nécessaires (et même plus). J'ai utilisé le mode cleartext pour le moment pour justement éviter une histoire de mot de passe crypté et que MySQL et/ou PureFtpd ne retourne par correctement:

USE pureftpd;

CREATE TABLE ftpd (
user varchar(16) NOT NULL default '',
password varchar(64) NOT NULL default '',
uid varchar(11) NOT NULL default '-1',
gid varchar(11) NOT NULL default '-1',
dir varchar(128) NOT NULL default '',
PRIMARY KEY (user),
UNIQUE KEY user (user)
) TYPE=MyISAM COMMENT='Pure-FTPD - Users list';

J'ai ajouté mon premier utilisateur de test (toto):

INSERT INTO ftpd (user,password,dir, gid, uid) VALUES ('toto','monpasswd','/home/ftpd','1000','1000');

Et finalement je fais le grand test... mais ça ne marche pas. Le serveur semble bien "UP", il répond au client ! Je bloque au niveau de l'authentification. Logiquement mon utilisateur virtuel "toto" devrait se logguer en utilisant le compte UNIX 1000:1000 et se placer dans le répertoire /home/ftpd comme racine (qui est le dossier personnel également du compte UNIX).

Voici ce que le client reçoit comme message lorsque je fais mon test:

C:\Documents and Settings\glenn>ftp ftp.monserveur.com
Connecté à ftp.monserveur.com.
220---------- Welcome to Pure-FTPd [privsep] [TLS] ----------
220-You are user number 1 of 50 allowed.
220-Local time is now 07:40. Server port: 21.
220-This is a private system - No anonymous login
220-IPv6 connections are also welcome on this server.
220 You will be disconnected after 15 minutes of inactivity.
Utilisateur (ftp.monserveur.com:(none)) : toto
331 User toto OK. Password required
Mot de passe : [je tape mon mot de passe ici]
530 Login authentication failed
Échec de l'identification.
ftp>

Et voici ce que j'ai dans le SYSLOG sur le serveur:

Jun 20 06:38:18 tempo pure-ftpd-wrapper[14682]: connect from 192.168.0.2 (192.168.0.2)
Jun 20 06:38:18 tempo pure-ftpd: (?@192.168.0.2) [INFO] New connection from 192.168.0.2
Jun 20 06:38:18 tempo pure-ftpd: (?@192.168.0.2) [INFO] PAM_RHOST enabled. Getting the peer address
Jun 20 06:38:20 tempo pure-ftpd: (?@192.168.0.2) [WARNING] Authentication failed for user [toto]
Jun 20 06:38:26 tempo pure-ftpd: (?@192.168.0.2) [INFO] Logout.

Plutot étrange, le serveur semble pointer vers PAM au-lieu du connecteur SQL intégré... si je me fis à d'autres personnes ayant eux des dificultés avec PureFtpd et un serveur MySQL, c'était plutot des messages comme "The SQL server seems to be down".

J'y repense, le dossier /etc/pure-ftpd/auth ne contient aucune ligne ne représente l'authentification MySQL :byebye: :

lrwxrwxrwx 1 root root   26 2007-05-30 12:03 65unix -> ../conf/UnixAuthentication
lrwxrwxrwx 1 root root   25 2007-05-30 12:03 70pam -> ../conf/PAMAuthentication

Je devrais également avoir:

lrwxrwxrwx 1 root root   23 2007-06-20 09:20 30mysql -> ../conf/MySQLConfigFile

Ensuite,

Je décide de réinstaller le paquet pure-ftpd-mysql car le wrapper semble ne plus voir la config MySQL. Lorsque celui-ci est installé j'obtiens :

Can't exec "/usr/sbin/pure-ftpd": No such file or directory at /usr/sbin/pure-ftpd-wrapper line 174.
/usr/sbin/pure-ftpd-wrapper: Cannot exec /usr/sbin/pure-ftpd: No such file or directory at /usr/sbin/pure-ftpd-wrapper line 174.
Connexion fermée par l'hôte distant.

Alors en réinstallant le paquet pure-ftpd-mysql, APT a supprimé les fichiers de pure-ftpd encore...

Je décide alors de prendre en note le fichier d'exécution pour l'authentification MySQL que le wrapper utilise:

lrwxrwxrwx 1 root root   23 2007-06-20 09:20 30mysql -> ../conf/MySQLConfigFile

Je réinstalla à nouveau pure-ftpd, puis j'ajoute manuellement le lien symbolique:

ln -s ../conf/MySQLConfigFile 30mysql

Je relance le démon PureFtpd avec:

/etc/init.d/pure-ftpd restart

Celui-ci me retourne exactement l'allure d'un serveur qui exécute ce que je veux pour la première fois:

Restarting ftp server: Running: /usr/sbin/pure-ftpd -l mysql:/etc/pure-ftpd/db/mysql.conf -O clf:/var/log/pure-ftpd/transfer.log -u 1000 -E -B

J'essais à nouveau de me connecter depuis un client:

C:\Documents and Settings\glenn>ftp mail.cdebeauce.com
Connecté à mail.cdebeauce.com.
Connexion fermée par l'hôte distant.

et le SYSLOG:

Jun 20 09:39:52 tempo pure-ftpd-wrapper[15160]: connect from 192.168.0.2 (192.168.0.2)
Jun 20 09:39:52 tempo pure-ftpd: (?@?) [ERROR] Unknown authentication method: mysql:/etc/pure-ftpd/db/mysql.conf

Quoi faire pour faire fonctionner ce serveur FTP avec MySQL :zarb:

Lien vers le commentaire
Partager sur d’autres sites

Si quelqu'un a installé le paquet compilé pure-ftpd-mysql sur une Debian Etch Stable, et que ça fonctionne... j'aimerais bien être au courant. Au moins ça me confirmerait que c'est possible, sinon je vais transmettre aux dévellopeurs de Debian un rapport de bug pour ce paquet.

Lien vers le commentaire
Partager sur d’autres sites

Ah Ah !!! J'ai trouvé le bobo. C'est vraiment le package de Debian qui fait erreur et c'est au niveau du fameux wrapper.

En fouillant (après plus de 3 jours de tests j'en suis venu à bout) mais vous en faite pas j'ai déjà d'autres problèmes à vous soumettre ;)

Voici une petite explication du problème pour les prochains qui auront ce problème:

Debian utilise 3 paquets différents pour PureFtpd, un pour la version PAM/UNIX, un pour la version MySQL et un autre pour la version LDAP.

Vous ne pouvez installer qu'une seule version à la fois.

Debian utilise également un wrapper personnel qui permet de "parser" les fichiers de configuration et lancer le démon avec ceux-ci (afin de réduire le nombre de fichiers de configuration et d'automatiser le lancement sans avoir besoin de taper les options en paramètres).

Après plusieurs tentatives d'installation j'ai remarqué la différence: Les 3 versions n'utilisent pas le même nom pour le fichier exécutable:

Version normal: /usr/sbin/pure-ftpd

Version mysql: /usr/sbin/pure-ftpd-mysql

Version ldap: /usr/sbin/pure-ftpd-ldap

Et dans les 3 installations, le fichier script du wrapper /usr/sbin/pure-ftpd-wrapper contient en début:

my $daemon = '/usr/sbin/pure-ftpd';
my @capabilities = @ARGV;

if ($ARGV[0]) {
 $daemon = "$daemon-$ARGV[0]";
}

Donc il y a une petite passe-passe qui va changer le nom de la variable $daemon... mais très étrangement celle-ci ne fonctionne pas à 100%, mais à 50%. Le wrapper doit détecter d'une certaine façon quel version de PureFtpd est installé (normal, mysql ou ldap). Pour ceci il vérifie le nom du fichier avec un parse

Très très étrangement, lorsque l'on démarre le PC le démon FTP s'exécute correctement !!! Il va chercher /usr/sbin/pure-ftpd-mysql

Mais lorsqu'une connexion client s'établie ça ne marche pas :transpi: Il va chercher /usr/sbin/pure-ftpd tout simplement.

------------------------

2 Solutions:

Créer un lien symbolique:

ln -s /usr/sbin/pure-ftpd-mysql /usr/sbin/pure-ftpd

Ou simplement modifier les lignes suivantes dans le wrapper (pour la version MySQL):

my $daemon = '/usr/sbin/pure-ftpd-mysql';
my @capabilities = @ARGV;

#if ($ARGV[0]) {
#  $daemon = "$daemon-$ARGV[0]";
#}

Si on ne place pas le IF en remarque ça fera en conséquence que le serveur FTP ne se démarra pas au lancement de l'ordinateur car il pointera vers /usr/sbin/pure-ftpd-mysql-mysql

Lien vers le commentaire
Partager sur d’autres sites

Voici un autre problème étrange (je crois que c'est p-e une sécurité de PureFtpd, mais je ne sais pas comment faire).

Quand je me connectes il se produit ceci:

>ftp ftp.server.com
Connecté à ftp.server.com.
220---------- Welcome to Pure-FTPd [privsep] [TLS] ----------
220-You are user number 1 of 50 allowed.
220-Local time is now 12:09. Server port: 21.
220-This is a private system - No anonymous login
220-IPv6 connections are also welcome on this server.
220 You will be disconnected after 15 minutes of inactivity.
Utilisateur (ftp.server.com:(none)) : toto
331 User toto OK. Password required
Mot de passe :
230-User toto has group access to:  ftpd
230 OK. Current directory is /home/ftpd
ftp> dir
500 I won't open a connection to 192.168.1.2 (only to 16.36.86.52)
425 No data connection
ftp>

Mon serveur PureFtpd se trouve physiquement sur le Net avec une adresse IP valide Internet. Ma machine client se touve derrière une NAT Iptables. L'adresse IP 16.36.86.52 est l'adresse côté Internet de ma NAT et 192.168.1.2 est bien l'adresse de mon PC.

Si j'essais depuis un autre PC avec une adresse IP directement sur Internet (pas de NAT), je suis également capable d'ouvrir une session, mais lorsque j'essais n'importe quel commande (get, dir, put, ...) j'obtiens:

ftp: connect: Connection refused

NOTE: J'essais toujours en mode PASV (Passive mode) qui est la norme aujourd'hui pour contrer les problèmes avec les firewall et PureFtpd supporte le PASV.

Je trouve que ça fait beaucoup de problème en peu de temps avec ce logiciel... je me demande si ça vallait vraiment la peine de migrer vers celui-ci. Plusieurs personnes m'ont suggérées fréquemment d'utiliser PureFtpd (dont certains d'entre-vous) mais je commence à être sceptique à sa fiabilité.

:byebye: Cette fois-ci c'est de ma faute. Je n'avais pas ouvert les ports pour le PASV sur le serveur FTP. Ça fonctionne maintenant !!!

Lien vers le commentaire
Partager sur d’autres sites

  • 1 mois après...

salut,

je suis sous debian 4.0, j'ai donc installé pureftpd celon ce topic : http://www.generation-linux.net/article.php3?id_article=13

ensuite je me suis donc retrouvé avec le méme soucis que toi, que j'ai réparé sans trop de soucis : Can't exec "/usr/sbin/pure-ftpd": No such file or directory at /usr/sbin/pure-ft

enfn je crois, car maintenant je n'ai plus de messages d'erreur dans ma fenétre filezilla mais j'ai donc :

Réponse : 220---------- Welcome to Pure-FTPd [privsep] [TLS] ----------

Réponse : 220-You are user number 1 of 50 allowed.

Réponse : 220-Local time is now 13:26. Server port: 21.

Réponse : 220-This is a private system - No anonymous login

Réponse : 220 You will be disconnected after 15 minutes of inactivity.

Commande : USER toto

Réponse : 331 User toto OK. Password required

Commande : PASS ****

Réponse : 530 Login authentication failed

Erreur : Impossible de se connecter !

j'ai appliqué en premier lieu ta seconde solution, qui n'a rien donné, en second lieu la premiére du lien symbolique, mais qui n'a rien donné du tout.

enfin j'ai fait les deux solutions en méme temps et bien entendu, toujours rien :(

je tourne en rond comme pas permis, si quelqu'un pouvait m'éguiller ce serait sympa.

mon niveau linux, il faut le dire est newbie, ça vient peut étre de là :transpi:

merci d'avance :transpi:

Lien vers le commentaire
Partager sur d’autres sites

Archivé

Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.

×
×
  • Créer...