Avr
15
2008

VSFTPD VIRTUAL USERS


Cette méthode permet de créer des utilisateurs ftp sans être obligé de créer des utilisateurs système.

Pré-requis :

Pour cela, il vous faut ces deux packages : Vsftpd et db4-utils.

Paramétrage de vsftpd :

Le serveur vsftpd est paramétré dans le fichier /etc/vsftpd/vsftpd.conf dont voici un exemple pour mon cas :

# Interdire les connexions anonymes au serveur
anonymous_enable=NO
anon_upload_enable=NO
anon_mkdir_write_enable=NO
anon_other_write_enable=NO

# Autoriser les utilisateurs locaux (obligatoire même si on ne veut que des utilisateurs virtuels)
local_enable=YES

# Autoriser les utilisateurs virtuels
guest_enable=YES
guest_username=userftp11

# Activer les droits spécifiques par utilisateur
user_config_dir=/etc/vsftpd/vsftpd_user_conf

# activation de logs
xferlog_enable=YES
xferlog_file=/var/log/vsftpd.xfer.log
xferlog_std_format=YES
log_ftp_protocol=YES
vsftpd_log_file=/var/log/vsftpd.log

# Configuration du serveur en standalone
listen=YES
tcp_wrappers=YES
connect_from_port_20=YES
ftpd_banner=”Bienvenue sur le serveur FTP”

# Configuration de l’authentification
pam_service_name=vsftpd
userlist_enable=YES

 

Configuration des droits propres à chaque utilisateur

Pour chaque utilisateur, il faut créer un fichier portant le nom de l’utilisateur dans le répertoire défini par la directive user_config_dir.

Mon fichier /etc/vsftpd/vsftpd_user_conf/lecteur

anon_world_readable_only=NO
local_root=/var/ftp/

Mon fichier /etc/vsftpd/vsftpd_user_conf/crontibuteur

anon_world_readable_only=NO
local_root=/var/ftp2/

Configuration de l’authentification PAM

Créer le fichier /etc/pam.d/vsftpd suivant :

auth required /lib64/security/pam_userdb.so db=/etc/vsftpd/login
account required /lib64/security/pam_userdb.so db=/etc/vsftpd/login

Ainsi, PAM va donc interroger la base BDB /etc/vsftpd/login.db pour authentifier les utilisateurs.

Créer la base BDB des utilisateurs

Créer un fichier nommé login.txt dans ce format.

nom d’utilisateur1
mot de passe1
nom d’utilisateur2
mot de passe2

Une fois le fichier .txt créé, il faut créer la base de donnée de pam.d. Pour cela, il faut taper cette commande :

db4_load -T -t hash -f /etc/vsftpd/login.txt /etc/vsftpd/login.db

db4_load peut être sur certaine distribution sous cette forme : dbXX_load avec XX etant la version de db.

Vous pouvez maintenant essayer de vous connecter.

Divers

Si vous voulez quand même vous connecter avec les comptes systeme, vous devez ajouter ces lignes avant celle existante dans le fichier /etc/pam.d/vsftpd :

auth sufficient pam_unix.so
account sufficient pam_unix.so

Si le compte root n’a pas le droit de se connecter, c’est qu’il apparaît dans ces deux fichiers :

  • /etc/vsftpd/ftpusers
  • /etc/vsftpd/user_list

Au sujet de l'auteur: Olivier Legras

Auteur de ce Blog, je partage quelques unes de mes notes que je juge utile à vous comme à moi. Je suis très heureux de voir que mon blog a de plus en plus d'affluence. Merci à vous!

20 Comments + Add Comment

  • Bonjour,
    mon os serveur est centOs-5.3
    je suis entrein d’installer un utilisateur virtuel userftpvirtu uniquement dans le contexte vsftpd dans la meme config que vous.
    mon probleme, est que j’ai bien les rpm rpm -qa db4*
    db4-utils-4.3.29-9.fc6
    db4-devel-4.3.29-9.fc6
    db4-4.3.29-9.fc6
    je ne comprend pas, sa bloque au niveau de pam a mon avis
    1)je fais bien la cmd :db4_load -T -t hash -f /etc/vsftpd/login.txt /etc/vsftpd/vsftpd_login.db
    mais j’ai retour de cmd: db4_load: command not found
    2)et quand je fais la cmd: db_load -T -t hash -f /etc/vsftpd/login.txt /etc/vsftpd/vsftpd_login.db
    j’ai en retour de cmd: db_load: unexpected end of input data or key/data pair
    db_load: odd number of key/data pairs
    –> ceci dit a ce niveau il me fait mon morceau de bd, et quand je tente de faire
    mon test sur vsftpd apparement pam, n’arrive pas a interprété puisque il me met
    login incorrecte si joint le retour de requete:
    220 ### !!!…vous etes connectés, sur le serveur FTP letchidevweb.gp ###
    530 Please login with USER and PASS.
    530 Please login with USER and PASS.
    KERBEROS_V4 rejected as an authentication type
    Name (localhost:admsrvjobes): userftpvirtu
    331 Please specify the password.
    Password:
    530 Login incorrect.
    Login failed.
    je ne comprend pas, a qu’elle niveau cela bloque..si vous pouviez
    maider afin que je boucle linstall de mon serveur..

  • Tes packages db4, tu les as eu avec yum?
    As-tu recherché sur ton serveur si la commande db4_load était présente :
    find / -name “db4*”

    Je pense qu’il faut déjà régler le problème de db4_load avant de se poser des questions sur pam car si le fichier db n’est pas correctement généré, l’authentification ne fonctionera jamais.

    Peux-tu vérifier que ton fichier login.txt ne contient pas d’espace ou de saut de ligne. ( ça pose peut-être un problème )

    Je n’ai pas de serveur sous la main actuellement. Je pourrais te donner une piste plus précise mardi.

    Olivier

  • bonjour,
    j’ai bien lus votre message.
    oui, je pense que oui, puisque les les packages suivant sont installé a savoir
    db4-utils-4.3.29-9.fc6
    db4-devel-4.3.29-9.fc6
    db4-4.3.29-9.fc6
    selon vous???
    je fais un audit de db4 de ce coté la et je vous tiens au courant
    ha oui!..effectivement, les blancs dans le fichier login.txt.
    ok je vous tiens informé
    merci de votre reponse.

  • bonjour,
    je repasse j’attendrais des nouvelles de votre part puisque j’ai bien les packages
    demandés..je les possedes bien,je comprend pas..je vous confirmes bien, que je n’ai pas de blanc dans mon fichiers login.txt….
    dans l’attente de vous lires.

  • information complementaire:
    donc en faisant un audit des packages; voila ce que j’ai d’installer réellement:
    dans leurs directorie associé: pour le db_load:
    [admsrvjobes@www ~]$ rpm -ql db4-utils-4.3.29-9.fc6
    /usr/bin/berkeley_db_svc
    /usr/bin/db_archive
    /usr/bin/db_checkpoint
    /usr/bin/db_deadlock
    /usr/bin/db_dump
    /usr/bin/db_dump185
    /usr/bin/db_load
    /usr/bin/db_printlog
    /usr/bin/db_recover
    /usr/bin/db_stat
    /usr/bin/db_upgrade
    /usr/bin/db_verify
    finalement cela confirme bien qu’en ligne de commande, et en suivant votre
    tuto je dois bien; faire db_load -T -t hash ect ect ect…..
    je ne comprend pas le blocage de mon user virtuel..
    merci de votre coup de main.

  • Oui en effet tu peux utiliser db_load… J’ai exactement les memes paquets que toi et je n’arrive pas à reproduire ton problème. Meme en mettant des espaces dans mon fichier login.txt….

    Quand tu essais de te connecter avec un utilisateur virtuel, peux tu me dire ce que tu as dans le fichier log /var/log/secure et /var/log/vsftpd.log

    l’utilisateur userftp11 existe-t’il?

  • rebonjour,
    donc pas à pas, j’ai audité les packages actuellement sur le systeme,
    1)petite correction je suis rellement dans cette config package:
    avec compat-db-4.2.52-5.1
    j’ai donc /usr/bin/db42_checkpoint
    /usr/bin/db42_deadlock
    /usr/bin/db42_dump
    /usr/bin/db42_load
    /usr/bin/db42_printlog
    /usr/bin/db42_recover
    /usr/bin/db42_stat
    —>ect ect
    2) j’ai refait le tutos: et j’ai un user virtuel du type: usrftpvirtu
    avec les meme drirectives que tu donnais. bien sur avec local_enable=YES.
    3) ensuite j’ai refais la cmd:
    db42_load -T -t hash -f /etc/vsftpd/login.txt /etc/vsftpd/login.db ( cette fois ci)
    4) de mon coté j’ai bien dans /pam.d/vsftpd les lignes du type:
    auth required /lib/security/pam_userdb.so db=/etc/vsftpd/login
    account required /lib/security/pam_userdb.so db=/etc/vsftpd/login
    5) j’ai essayé anouveau avec usrftpvirtu et le mot de pass associé
    et j’ai
    [admsrvjobes@www ~]$ ftp localhost 21
    Connected to http://www.letchidevweb.gp.
    220 ### !!!…vous etes connectés, sur le serveur FTP letchidevweb.gp ###
    530 Please login with USER and PASS.
    530 Please login with USER and PASS.
    KERBEROS_V4 rejected as an authentication type
    Name (localhost:admsrvjobes): usrftpvirtu
    331 Please specify the password.
    Password:
    530 Login incorrect.
    Login failed.
    6)—-> pour repondre a ta question : voici mon (secure) du type en fin de fichier:
    lors de mon essai
    un 5 16:38:57 www vsftpd: pam_unix(vsftpd:auth): check pass; user unknown
    Jun 5 16:38:57 www vsftpd: pam_unix(vsftpd:auth): authentication failure; logname= uid=0 euid=0 tty=ftp ruser=usrftpvirtu rhost=www.letchidevweb.gp
    Jun 5 16:38:57 www vsftpd: pam_succeed_if(vsftpd:auth): error retrieving information about user usrftpvirtu
    et
    7) je ne comprend pas puisque maintenant il me donne :
    500 OOPS: vsftpd: cannot locate user specified in ‘guest_username’:usrftpvirtu
    et j’ai bien suivi ton tutos.
    l’utilisateur userftp11 qui est pour moi usrftpvirtu , non il n’existe pas.du moins
    je ne l’ai pas en create..
    par contre je n’ai rien eu dans mon vsftpd.log..
    en esperant n’avoir pas été trop long…
    merci de ton aide….

  • rebonjour,
    un message complementaire:
    mon usrftpvirtu je l’ai créer type:
    useradd -d /var/www/html/devweb/ usrftpvirtu -s /sbin/nologin
    j’ai réessayer anouveau
    220 ### !!!…vous etes connectés, sur le serveur FTP letchidevweb.gp ###
    530 Please login with USER and PASS.
    530 Please login with USER and PASS.
    KERBEROS_V4 rejected as an authentication type
    Name (localhost:admsrvjobes): usrftpvirtu
    331 Please specify the password.
    Password:
    530 Login incorrect.
    Login failed.
    je ne comprend plus, puisque il me disait :500 OOPS: vsftpd: cannot locate user specified in ‘guest_username’:usrftpvirtu
    vraiement si tu as une idée.je suis preneur..

  • message en plus:
    mon user usrftpvirtu est créer de cette façon: visuel dans mon secure
    Jun 5 17:47:32 www useradd[13241]: new group: name=usrftpvirtu, GID=502
    Jun 5 17:47:32 www useradd[13241]: new user: name=usrftpvirtu, UID=501, GID=502, home=/var/www/html/devweb/, shell=/sbin/nologin
    Jun 5 17:48:28 www vsftpd: pam_unix(vsftpd:auth): authentication failure; logname= uid=0 euid=0 tty=ftp ruser=usrftpvirtu rhost=www.letchidevweb.gp user=usrftpvirtu
    –> merci de tes directives…je ne vois pas ou je peche.

  • Bon je vais en refaire un tout propre avec la même version d’os que toi et je modifierais mon tutorial en fonction de mes problèmes rencontrés.

    A lundi 😉

  • bonjour,
    et merci de ta reponse.
    vraiement sympas pour ton analyse, et se que tu pourra trouvé.
    assez recement, sur un forum, j’ai lus, q’une personne qui exposait son tuto, preconisait la version, db3_load, pour raison compatibilité: questce qui ferait que cela soit different, avec le db4x_load??
    je vais essayer pour voir.
    je te tiendrais au courant

  • bonjour pour info

    j’avais tenté de mettre le db3-utils, donc visiblement yum ne ‘linstall pas puisque
    une autre version superieur du type db4-utils existe.
    soit j’ai: Running Transaction
    Installing : db4-utils [1/1]

    Installed: db4-utils.i386 0:4.3.29-9.fc6
    Complete!
    ensuite cmd par defaut : /usr/bin/db_dump185
    /usr/bin/db_load
    /usr/bin/db_printlog
    j’ai refais anouveau des essais et
    Name (localhost:admsrvjobes): usrftpvirtu
    331 Please specify the password.
    Password:
    530 Login incorrect.
    Login failed…
    donc je ne sais plus quoi penser, et faire j’aurrai voulus y arrivé.afin de faire
    des tests sur vsftpd..merci de ton coup main,
    j’ai tous fait dans tous les sens…
    cordialement

  • Bon j’ai retesté mon tutorial et il y a deux petites erreurs.
    1) Il faut vérifier dans le fichier /etc/pam.d/vsftpd :
    – Que le chemin vers pam_userdb.so est correct
    – Qu’il n’y a que les deux lignes du tutorial dans le fichier
    2) Il faut créé userftp11 de cette manière :
    useradd -d /var userftp11
    Ce qui est important de savoir c’est que le répertoire par défaut de userftp11 doit être la racine des autres utilisateurs.

    Voici mon exemple :
    userftp11 /var
    lecteur /var/ftp
    contributeur /var/ftp2

    Moi j’ai suivi le tuto en effectuant ces deux étapes et ça a fonctionné sur Centos 5.3

    Voici mes paquets :
    — DB —
    db4-utils-4.3.29-9.fc6
    db4-4.3.29-9.fc6
    —- PAM —-
    pam_pkcs11-0.5.3-23
    pam_smb-1.1.7-7.2.1
    pam_passwdqc-1.0.2-1.2.2
    pam_ccreds-3-5
    pam-0.99.6.2-4.el5
    pam_krb5-2.2.14-10
    —– VSFTPD —-
    vsftpd-2.0.5-12.el5_3.1

    Voici le contenu de mon fichier vsftpd.conf :
    #Interdire les connexions anonymes au serveur
    anonymous_enable=NO
    anon_upload_enable=NO
    anon_mkdir_write_enable=NO
    anon_other_write_enable=NO
    # Autoriser les utilisateurs locaux (obligatoire mê si on ne veut que des utilisateurs virtuels)
    local_enable=YES
    # Autoriser les utilisateurs virtuels
    guest_enable=YES
    guest_username=userftp11

    # Activer les droits spéfiques par utilisateur
    user_config_dir=/etc/vsftpd/vsftpd_user_conf

    # activation de logs
    xferlog_enable=YES
    xferlog_file=/var/log/vsftpd.xfer.log
    xferlog_std_format=YES
    log_ftp_protocol=YES
    vsftpd_log_file=/var/log/vsftpd.log

    # Configuration du serveur en standalone
    listen=YES
    tcp_wrappers=YES
    connect_from_port_20=YES
    ftpd_banner=”Bienvenue sur le serveur FTP”

    # Configuration de l’authentification
    pam_service_name=vsftpd
    userlist_enable=YES

    Contenu de mon pam.d/vsftpd

    auth required /lib/security/pam_userdb.so db=/etc/vsftpd/login
    account required /lib/security/pam_userdb.so db=/etc/vsftpd/login

    Contenu de mon /etc/vsftpd/vsftpd_user_conf/lecteur :

    anon_world_readable_only=NO
    local_root=/var/ftp/

    Contenu de mon /etc/vsftpd/vsftpd_user_conf/contributeur :

    anon_world_readable_only=NO
    local_root=/var/ftp2/

    Contenu de mon /etc/passwd :
    userftp11:x:501:501::/var:/bin/bash

    Voilà, bon courage.

  • bonjour,
    j’ai refait ton descriptif a meme trois fois, pas à pas.. et je peche encore….
    par ailleurs, quand tu dis :
    “2) Il faut créé userftp11 de cette manière :
    useradd -d /var userftp11 —>ok j’ai compris donc
    tu lui à associer un pwd puisque tu me mets : userftp11:x:501:501::/var:/bin/bash
    ok..par contre
    au moment de faire le test tu le fait bien avec contributeur ???
    soit ftp localhost 21
    login contributeur, et je pense qu’en pwd tu mets bien celui qui est defini dans le login.txt ?? selon moi
    puisque moi sa marche pas, avec le meme shemas que toi???
    par ailleurs, je me vois pas definir un passwd de userftp11; tu ne le mentionne pas
    selon toi???

  • oui j’ai mis un mot de passe à userftp11.
    Oui je m’authentifie avec contributeur ou lecteur et les mots de passe de login.txt

  • rebonjour,
    et merci de ta reponse.
    voila, vraiement j’en perds mon latin; puisque j’ai associé comme tu l’a dis
    un mot de pass.
    j’ai beau faire, et refaire j’ai toujours
    530 Login incorrect.
    Login failed.
    ftp>
    je ne sais plus quoi faire, je suis depassé. je ne vois vraiement pas l’endroit
    ou sa bloque..
    merci a toi si tu as une idée complementaire…

  • une info: je regarde mon fichier secure:
    et j’ai :Jun 8 12:39:36 www vsftpd: pam_unix(vsftpd:auth): authentication failure; logname= uid=0 euid=0 tty=ftp ruser=ftpdream rhost=www.letchidevweb.gp
    Jun 8 12:39:36 www vsftpd: pam_succeed_if(vsftpd:auth): error retrieving information about user ftpdream
    et portant j’ai bien fait la manipe coté db_load…., avec tes parametres:
    selon toi,est ce que se message du type:—->
    db_load: unexpected end of input data or key/data pair
    db_load: odd number of key/data pairs
    apres avoir validé la commande est concidéré comme valide????
    puisque mon secure systhematiquement pas (vsftpd:auth) a ton avis.
    merci..
    cordialement si je te sollicite ainsi, a cause du boulot..
    merci dans l’attente d’idée

  • rebonjour,
    je reviens le plus rapidement; hééé enfin j’y suis arrivé..
    hé bien, vraiement merci pour tous ton tuto, et des moments que tu à pris pour me repondre.
    Et visiblement, il fallait mettre un saut de ligne dans le fichier login.txt,
    et du coup je n’ai pas eu se type de msg:
    db_load: unexpected end of input data or key/data pair
    db_load: odd number of key/data pairs ; en retour de commande.
    je l’ai essayer a 2 fois, donc je te confirme qu’il faille mettre un saut de ligne
    –merci beaucoup olivier
    cordialement poignet de main sincere.

    une poignet de main:

  • Heureux de t’avoir aidé 😉

  • Bonjour

    Est-ce que cette discussion est toujours active ?

    Merci

Laissez un commentaire