Jump to content

Archived

This topic is now archived and is closed to further replies.

gorgonite

vsftpd + ldap [RESOLU]

Recommended Posts

Je pense qu'une personne connaissant suffisamment bien les etapes de la connexion ftp, arrivera à deceler le truc qui me manque.

le serveur ftp utilise est vsftpd.

Si j'ai bien compris, pour le moment tous les utilisateurs arrivent a s'identifier depuis un ldap situe sur une autre machine sur laquelle je n'ai aucun droit (puisque que le login est ok avec leur mot de passe), mais seuls les utilisateurs locaux parviennent a veritablement ouvrir une session

cas d'un utilisateur local, mais s'identifiant avec son mot de passe ldap (qui est different bien sur, sinon je ne le preciserais pas)

gandalf:/etc# ftp localhost
Connected to localhost.localdomain.
220 Bienvenue sur le ftp du Club Informatique de l'ENSTA
Name (localhost:clubinfo):
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> put vsftpd.conf
local: vsftpd.conf remote: vsftpd.conf
200 PORT command successful. Consider using PASV.
150 Ok to send data.
226 File receive OK.
4462 bytes sent in 0.00 secs (140562.0 kB/s)
ftp> dir
200 PORT command successful. Consider using PASV.
150 Here comes the directory listing.
-r--rw--w-	1 1000	 1000		 4462 Dec 04 17:02 vsftpd.conf
226 Directory send OK.
ftp> del vsftpd.conf
250 Delete operation successful.
ftp> dir
200 PORT command successful. Consider using PASV.
150 Here comes the directory listing.
226 Directory send OK.
ftp> bye
221 Goodbye.
gandalf:/etc#

cas d'un utilisateur non local

gandalf:/etc# ftp localhost
Connected to localhost.localdomain.
220 Bienvenue sur le ftp du Club Informatique de l'ENSTA
Name (localhost:clubinfo): nvallee
331 Please specify the password.
Password:
500 OOPS: cannot locate user entry:nvallee
Login failed.
421 Service not available, remote server has closed connection
ftp> bye
gandalf:/etc#

enfin, voilà pourquoi je pense que les utilisateurs non locaux s'identifient correctement...

gandalf:/etc# tail /var/log/vsftpd.log
Sun Dec  4 18:02:14 2005 [pid 2194] CONNECT: Client "127.0.0.1"
Sun Dec  4 18:02:18 2005 [pid 2193] [clubinfo] OK LOGIN: Client "127.0.0.1"
Sun Dec  4 18:02:28 2005 [pid 2195] [clubinfo] OK UPLOAD: Client
"127.0.0.1", "/data/ftp/en_cours/vsftpd.conf", 4462 bytes, 261.63Kbyte/sec
Sun Dec  4 18:02:38 2005 [pid 2195] [clubinfo] OK DELETE: Client
"127.0.0.1", "/data/ftp/en_cours/vsftpd.conf"
Sun Dec  4 18:04:13 2005 [pid 2201] CONNECT: Client "127.0.0.1"
Sun Dec  4 18:04:23 2005 [pid 2200] [nvallee] OK LOGIN: Client "127.0.0.1"
gandalf:/etc#

Ça fait maintenant 15 jours que je bidouille, mais ça n'avance plus...

Merci par avance. :byebye:

nb: meme des petites indications ou de la bonne documentation m'interessent... ;-)

Share this post


Link to post
Share on other sites

Va donc faire un tour sur ce sujet que j'ai fait:

http://www.pcinpact.com/forum/index.php?showtopic=69552

VSFTPD + LDAP nécessite de passer via PAM. Dans mon cas j'ai fait VSFTPD + MySQL qui passe également par PAM. La partie la plus problématique est de bien configurer PAM afin qu'il fasse correspondre les champs user er password correctement vs. la BD à récuprérer les infos.

En première étape tu pourrais simplement configurer ton VSFTP avec DB3 (toujours via PAM) (la méthode la plus facile et rapide, les infos sont sur le site de VSFTPD) afin de t'assurer que la config de ton serveur FTP est top poil ! Ensuite tu fais simplement une modification de ton fichier /etc/pam.d/vsftpd pour que PAM pointe vers LDAP. C'est là que tu trouveras les bobos !

Share this post


Link to post
Share on other sites

Merci pour ta reponse... mais je ne comprends pas en quoi elle repond a mon probleme

ou alors je n'y ai rien compris :transpi: (fort possible je ne fais que bidouiller, et en plus plutot mal)

J'ai deja modifie ma configuration pour qu'il aille lire sur le ldap en question, ce qui, me semble-t-il, fonctionne.

clubinfo@gandalf:~$ cat /etc/vsftpd.conf
listen=YES
connect_from_port_20=YES
max_per_ip=2
force_dot_files=YES

ftpd_banner=Bienvenue sur le ftp du Club Informatique de l'ENSTA

anonymous_enable=YES
no_anon_password=YES
anon_root=/data/ftp/ftpdocs
#anon_upload_enable=NO
#anon_mkdir_write_enable=NO
#anon_other_write_enable=NO

local_enable=YES
write_enable=YES
local_umask=0204
chmod_enable=NO
local_root=/data/ftp/en_cours
download_enable=YES

dirmessage_enable=YES
xferlog_enable=YES
secure_chroot_dir=/var/run/vsftpd
pam_service_name=vsftpd
rsa_cert_file=/etc/ssl/certs/vsftpd.pem

clubinfo@gandalf:~$ cat /etc/pam_ldap.conf
host xxxxxxxx.ensta.fr  # dans le vrai fichier il y a le bon nom
base ou=eleves, ou=People, dc=ensta, dc=fr
ldap_version 2
pam_crypt local

clubinfo@gandalf:~$ cat /etc/pam.d/vsftpd
# Standard behaviour for ftpd(8).
#auth   required		pam_listfile.so item=user sense=deny file=/etc/ftpusersonerr=succeed

# Standard blurb.
#@include common-account
#@include common-session

#@include common-auth
#auth   required		pam_shells.so

auth			required		pam_ldap.so
account		 required		pam_ldap.so
password		required		pam_ldap.so
# il me semble que c'est ce bout la que je dois personnaliser
#session		required		pam_ldap.so

avec cela, les utilisateurs locaux, avec leur mot de passe du ldap, n'ont aucun soucis...

en revanche, les utilisateurs qui n'ont pas de compte sur le serveur ftp semblent se connecter

Sun Dec 4 18:04:23 2005 [pid 2200] [nvallee] OK LOGIN: Client "127.0.0.1"

mais ensuite la "session" se referme toute seule...

gandalf:/etc# ftp localhost

Connected to localhost.localdomain.

220 Bienvenue sur le ftp du Club Informatique de l'ENSTA

Name (localhost:clubinfo): nvallee

331 Please specify the password.

Password:

500 OOPS: cannot locate user entry:nvallee

Login failed.

421 Service not available, remote server has closed connection

par ailleurs, il ne me semble pas que je doive utiliser les utilisateurs virtuels car, si j'ai bien compris, cela necessite la creation d'un repertoire par utilisateur virtuel.

Share this post


Link to post
Share on other sites

Effectivement dans ton cas VSFTPD utilise déjà PAM pour se connecter à LDAP. La première partie des explications n'est peut être pas utile pour toi. Mais de reprendre à zéro avec une autre méthode d'auth tel que DB3 via PAM (ce qui se fait en quelques minutes) te permettrait de savoir facilement si le problème provient de vsftpd.conf ou ailleurs.

Si ton auth. fonctionne bien avec PAM/DB3, alors tu es certain que le problème se situe au niveau de PAM/LDAP ou LDAP directement.

Dans ton fichier /etc/pam.d/vsftpd qu'est-ce que tu retrouves actuellement ? Est-ce que ce setup permet la connexion à ton LDAP distant ?

Share this post


Link to post
Share on other sites

Mais de reprendre à zéro avec une autre méthode d'auth tel que DB3 via PAM (ce qui se fait en quelques minutes) te permettrait de savoir facilement si le problème provient de vsftpd.conf ou ailleurs.

Je vais essayer de suite :mdr:

Si ton auth. fonctionne bien avec PAM/DB3, alors tu es certain que le problème se situe au niveau de PAM/LDAP ou LDAP directement.

Dans ton fichier /etc/pam.d/vsftpd qu'est-ce que tu retrouves actuellement ? Est-ce que ce setup permet la connexion à ton LDAP distant ?

Euh... pas compris :mdr:

j'ai afficher le contenu de /etc/pam.d/vsftpd dans le message précédent

normalement il n'y a que les liens vers pam_ldap.so, (ce qui était là à l'origine est commenté)

donc toutes les identifications devraient se faire à l'aide du ldap, non ?

en plus,

- quand la connexion complète fonctionne, elle le fait avec le mot de passe présent sur le ldap.

- lorsque je lance ldapsearch -x -h localhost ... ça me renvoie ce qu'il faut alors que je n'ai pas sldapd sur ma machine... donc le lien vers le ldap a l'air de marcher correctement.

Share this post


Link to post
Share on other sites

auth			required		pam_ldap.so
account		 required		pam_ldap.so
password		required		pam_ldap.so

Si ce sont les seules lignes activées dans ton fichier /etc/pam.d/vsftpd normallement toutes les requêtes d'authentification seront redirigé à ton LDAP local.

Pour spécifier l'utilisation d'un LDAP local ou distant je ne sais pas si tu peux le faire directement avec le module pam_ldap ou bien ton LDAP local peut rediriger la requête vers ton serveur LDAP distant. Tu devrais surement trouver la solution pour les possibilités de pam_ldap sur le site de Sourceforge (ou bien Google) !

Share this post


Link to post
Share on other sites

Si ce sont les seules lignes activées dans ton fichier /etc/pam.d/vsftpd normallement toutes les requêtes d'authentification seront redirigé à ton LDAP local.

Pour spécifier l'utilisation d'un LDAP local ou distant je ne sais pas si tu peux le faire directement avec le module pam_ldap ou bien ton LDAP local peut rediriger la requête vers ton serveur LDAP distant. Tu devrais surement trouver la solution pour les possibilités de pam_ldap sur le site de Sourceforge (ou bien Google) !

C'est déjà fait dans le fichier /etc/pam_ldap.conf (décrit plus haut)

j'ai installé ce qu'il faut pour tester ta solution pam_mysql,

mais je ne trouve pas la structure des tables que je dois y mettre...

il y a plein d'exemples, mais ils servent surtout pour les serveurs de mail postfix

ça veut dire que c'est à nous de personnaliser la base suivant nos besoins ???

ou alors, il existe des exemples de base "test"

Share this post


Link to post
Share on other sites

Pour pam_mysql, exactement !

Tu spécifies quel BD, quel table et quel champs correspond à username et password, c'est tout.

Ça ressemble à ça:

auth required pam_mysql.so host=localhost user=usager passwd=mot_de_passe db=mabdd table=matable usercolumn=user_name passwdcolumn=user_passwd crypt=0
account required pam_mysql.so host=localhost user=usager passwd=mot_de_passe db=mabdd table=matable usercolumn=user_name passwdcolumn=user_passwd crypt=0

C'est déjà fait dans le fichier /etc/pam_ldap.conf (décrit plus haut)

Est-ce que tu as d'autres applications qui fonctionnent avec ton LDAP distant via le module pam_ldap ? Si oui, est-ce qu'ils fonctionnent ?

Ton problème semble vraiment venir de la configuration de pam_ldap.conf, car PAM n'a que pour fonctionner de rediriger les requêtes vers les BD pour récupérer les user et password de ceux-ci via le module spécifier. Si le module est mal configuré, rien ne passe !

Share this post


Link to post
Share on other sites

Voilà la base de données

CREATE TABLE users (
id BINGINT UNSIGNED AUTO_INCREMENT NOT NULL,
name VARCHAR(255),
passwd CHAR(12),
PRIMARY KEY (id)
);

Ensuite l'utilisateur "test"

INSERT INTO users (name,passwd) VALUES ('test','coucou');

Je modifie /etc/pam.d/vsftpd

### Configuration 2 ###
auth	required		pam_mysql.so \
user=vsftpd passwd=****** host=localhost db=pam_vsftpd \
table=users usercolumn=name passwdcolumn=passwd crypt=0
account required		pam_mysql.so \
user=vsftpd passwd=******* host=localhost db=pam_vsftpd \
table=users usercolumn=name passwdcolumn=passwd crypt=0

Je tente la connexion

gandalf:~# ftp localhost
Connected to localhost.localdomain.
220 Bienvenue sur le ftp du Club Informatique de l'ENSTA
Name (localhost:clubinfo): test
331 Please specify the password.
Password:
500 OOPS: cannot locate user entry:test
Login failed.
ftp> bye
421 Service not available, remote server has closed connection

Je vais voir les log /etc/log/vsftpd.log

gandalf:~# tail /var/log/vsftpd.log
Wed Dec  7 19:16:37 2005 [pid 5827] CONNECT: Client "127.0.0.1"
Wed Dec  7 19:16:41 2005 [pid 5826] [test] OK LOGIN: Client "127.0.0.1"

Donc ça me fait la même erreur qu'avec ma première configuration... :byebye:

Share this post


Link to post
Share on other sites

Est-ce que tu as essayé de te connecter à ton serveur FTP depuis une station distante (non local)... j'ai jamais remarqué, mais peut être que VSFTPD refuse les connexions provenant de 127.0.0.1 ?

En tout cas, tu es certain que ton problème ne provient pas de LDAP ! Si c'est la même chose avec MySQL.

C'était la raison de faire le test avec DB3 qui revenait à la même chose, à savoir si le problème provient de VSFTPD ou de la méthode d'auth.

Maintenant tu sais que c'est probablement dans vsftpd le problème.

Share this post


Link to post
Share on other sites

Est-ce que tu as essayé de te connecter à ton serveur FTP depuis une station distante (non local)... j'ai jamais remarqué, mais peut être que VSFTPD refuse les connexions provenant de 127.0.0.1 ?

Je réussis la connexion depuis localhost pour des utilisateurs déclarés dans le ldap ou la bdd, mais seulement dans le cas où un utilisateur local ayant le même login existe...

donc a priori vsftpd marche depuis localhost

je viens de faire le test depuis une autre machine... et ça donne le même résultat.

en revanche, j'ai des trucs en plus, avant de me loguer :

530 Please login with USER and PASS.
530 Please login with USER and PASS.
KERBEROS_V4 rejected as an authentication type

Share this post


Link to post
Share on other sites

Si tu n'as pas repassé en revue le fichier VSFTPD.CONF que tu nous as envoyé, c'est sur que ça ne fonctionnera pas !

Tu as activé les usagers locaux (local_enable=YES), donc pour ce qui est du fait que quand tu essais avec un compte local... il ne passe pas par PAM, mais directement par le fichier /etc/passwd local. Tu as conservé la connexion anonymous activé (anonymous_enable=YES), mais tu n'as jamais activé les comptes invîté qui est nécessaire pour la connexion via PAM.

Tous les options possibles du vsftpd.conf sont ici:

http://vsftpd.beasts.org/vsftpd_conf.html

et les exemples d'utilisations:

ftp://vsftpd.beasts.org/users/cevans/unta...-2.0.3/EXAMPLE/

Ajoute l'accès invîté et tout fonctionnera bien ! (NOTE: Un usager invîté est "considéré" comme anonymous au niveau sécurité, mais le paramètre local_enable=YES doit être à YES pour que les invîtés fonctionnent ! Lorsque invîté est activé, les comptes réel local ne sont plus accesible.)

Share this post


Link to post
Share on other sites

Tu as activé les usagers locaux (local_enable=YES), donc pour ce qui est du fait que quand tu essais avec un compte local... il ne passe pas par PAM, mais directement par le fichier /etc/passwd local.

Ben pourquoi les utilisateurs locaux ont besoin de leur mot de passe définis sur le ldap et non de leur mot de passe local...

Ajoute l'accès invîté et tout fonctionnera bien ! (NOTE: Un usager invîté est "considéré" comme anonymous au niveau sécurité, mais le paramètre local_enable=YES doit être à YES pour que les invîtés fonctionnent ! Lorsque invîté est activé, les comptes réel local ne sont plus accesible.)

Je viens de le faire, et en effet les login se déroulent bien...

en revanche, si j'ai bien compris, je ne peux pas uploader sans laisser l'autorisation à anonymous d'écrire...

hors à côté de ces uploaders "traçables", je veux pouvoir laisser un accès anonyme en download sur un autre répertoire où les données auront été validées.

Y aurait-il un autre moyen que je n'ai pas compris... ?

Share this post


Link to post
Share on other sites

Si effectivement !

Dans ton fichier vsftpd.conf, tu mets les droits à anonymous les plus restrictifs possibles. Ensuite il y a un super option intéressant à ajouter:

user_config_dir=/etc/vsftpd/user_conf

Dans le dossier /etc/vsftpd/user_conf tu peux ensuite créer un fichier de config de type vsftpd.conf pour chaque usager. Donc chacun peut avoir des permissions différentes, un dossier racine différent, ....

exemple:

tu as un usager nommé toto1

Alors avec VI tu créé un fichier /etc/vsftpd/user_conf/toto1 et tu ajoutes les lignes désirées !

(NOTE: uniquement des lignes se relatant au droits des fichiers et aux accès fonctionneront... tu ne peux pas mettre du genre "pasv_address ")

Et comme je disais un usager invîté est considéré comme anonyme, donc ce seront les paramètres anonymes qui fonctionneront.

Share this post


Link to post
Share on other sites

SVP, ajouter [RESOLU] dant le titre de ton sujet si c'est réglé. Comme ça les autres savent que ce sujet et clos et qu'ils pourront trouver une réponse à ce problème !

:incline:

Share this post


Link to post
Share on other sites

×
×
  • Create New...