ggbce Posté(e) le 30 novembre 2005 Partager Posté(e) le 30 novembre 2005 J'ai décidé d'utiliser VSFTPD comme serveur FTP dernièrement. Je sais que Pro-FTPD et Pure-FTPD sont d'autres bons serveurs FTP, mais j'aimerais quand même demeurer avec VSFTPD. Je l'utilise avec des usagers virtuels, qui ont chacun leur propre dossier racine, droits différents... avec le paramètre "user_config_dir " et un fichier de config pour chaque usager. Le mécanisme d'authentification utilisé est avec PAM. Je stocke les usagers et mot de passe dans une base de données DB3 (Berkeley) et à partir d'un fichier texte et un script je peux mettre à jour facilement les usagers, mais uniquement depuis la console. J'ai déjà un serveur Apache qui authentifie les usagers depuis une base de données MySQL, j'aimerais utiliser la même base de données pour mes usagers FTP (qui sont les mêmes) pour moins de gestion et plus de facilité. Je pourrais créer, détruire, modifier mes comptes directement sur une page en php. Donc après plusieurs recherches, je ne trouve rien de pertinent pour utiliser VSFTPD avec MySQL. La seule chose que j'ai trouvé se rapporte toujours à Suse pour un module se nommant "pam_mysql" quand je fait une recherche sur Google. Ça me donne une piste... mais je suis bloqué là. Est-ce qu'il est possible d'utiliser VSFTPD avec MySQL via PAM ? Si oui, toute information serait la bienvenue ! Lien vers le commentaire Partager sur d’autres sites More sharing options...
ggbce Posté(e) le 30 novembre 2005 Auteur Partager Posté(e) le 30 novembre 2005 ...et bien je me suis répondu par moi même en passant mon après-midi à découvrir pam_mysql. Faut premièrement compiler pam_mysql pour notre distribution (que j'ai ensuite convertit en RPM). Ensuite c'est assez simple quand on connait la "formule". Il faut éditer notre fichier dans /etc/pam.d et ajouter les lignes pour "auth" et "account" appropriées ! Tout est écrit dans le fichier README du package. Donc finalement mon VSFTPD fonctionne très bien avec des usagers virtuels qui sont stockées dans une base de données MySQL !!! La seule chose que je ne peux pas faire c'est d'y ajouter la config (umask, local_root, write_enable, ...) par usager. Mais je vais me créer un interface en PHP qui généra un fichier de texte associé, ça devrait fonctionner. Lien vers le commentaire Partager sur d’autres sites More sharing options...
kapo Posté(e) le 13 février 2006 Partager Posté(e) le 13 février 2006 bonsoir je vien de voir ke tu as réussi a utiliser vsftpd avec mysql... estke tu pourais me donner ton fichier pam pour identifier les utilisateurs virtuels... ainsi que des explications je suis un peu newbee... merci d'avance Lien vers le commentaire Partager sur d’autres sites More sharing options...
ggbce Posté(e) le 13 février 2006 Auteur Partager Posté(e) le 13 février 2006 Et bien de savoir qu'il faut utiliser un fichier PAM pour inter-connecter VSFTPD à MySQL c'est déjà mieux qu'être Newbie pour Linux Et voilà le contenu de /etc/pam.d/vsftpd #%PAM-1.0 auth required pam_mysql.so host=localhost user=username passwd=mot_de_passe db=mabdd table=matable usercolumn=user_name passwdcolumn=user_passwd crypt=0 account required pam_mysql.so host=localhost user=username passwd=mot_de_passe db=mabdd table=matable usercolumn=user_name passwdcolumn=user_passwd crypt=0 Puis dans MySQL il suffit de créer la bd, table et champs nécessaire. Comme tu peux voir, il y a un option "crypt=0" ce qui égale "texte clair". J'ai essayé de changer le niveau de cryptage pour permettre l'enregistrement des valeurs en cryptage SQL, mais sans sucès pour le moment. L'aide pour les options sont disponible sur le site de "pam_mysql" à http://sourceforge.net/projects/pam-mysql/ Comme ça je peux utiliser la même BD que celle utilisée par Apache pour authentifier mes usagers HTTP. Lien vers le commentaire Partager sur d’autres sites More sharing options...
kapo Posté(e) le 14 février 2006 Partager Posté(e) le 14 février 2006 snif maintenant que tu m'as donné le bon fichier c'est lidentification qui ne marche pas... j'ai gardé le fichier conf d'origine sans les utilisateurs anonymes.... faut il changer quelquechose dans le fichier conf???? mon serveur mysql démarre trés bien voila ma base de données: create database ftp; create table vsftpd(usr varchar(10), pass varchar(10)); insert into vsftpd values ('test','test'); peut etre faut il faire démarrer vsftpd avec xinetd???? en tout cas lorsque je met listen= no le deamon ne se lance pas... merci bcp Lien vers le commentaire Partager sur d’autres sites More sharing options...
pouillmy Posté(e) le 22 février 2006 Partager Posté(e) le 22 février 2006 ça m'interesse tout ça sinon soit tu le met en standalone avec listen=yes, soit tu le lance avec inetd (listen=no par defaut) Lien vers le commentaire Partager sur d’autres sites More sharing options...
ggbce Posté(e) le 22 février 2006 Auteur Partager Posté(e) le 22 février 2006 Si tu as lu correctement l'aide fournit par VSFTPD... tu aurais vu qu'un utilisateur "virtuel" est toujours considéré comme un utilisateur "anonyme" au niveau des droits. http://vsftpd.beasts.org/vsftpd_conf.html et ftp://vsftpd.beasts.org/users/cevans/unta.../VIRTUAL_USERS/ et ftp://vsftpd.beasts.org/users/cevans/unta...IRTUAL_USERS_2/ P.S. Ton problème n'est pas lié à utiliser VSFTPD en mode standalone ou avec Xinetd. Il est toujours préférable d'utiliser en mode standalone. c'est plus sécuritaire et stable. Listen = YES (veut dire: mode standalone, qui se démarre par lui-même) Listen = NO (veut dire: passer par XINETD. Dans ce mode il faut configurer XINETD pour recevoir les requêtes FTP et les rediriger vers VSFTPD, tout comme avec WU-FTPD.) Lien vers le commentaire Partager sur d’autres sites More sharing options...
lessaid Posté(e) le 4 novembre 2006 Partager Posté(e) le 4 novembre 2006 Si tu as lu correctement l'aide fournit par VSFTPD... tu aurais vu qu'un utilisateur "virtuel" est toujours considéré comme un utilisateur "anonyme" au niveau des droits. lu, Je reveille cette ancien post pour une petite précision: avec la clause :virtual_use_local_privs vsftpd donne les mêmes droits à un utilisateur virtuel qu'a un utilisateur local :) Lien vers le commentaire Partager sur d’autres sites More sharing options...
ggbce Posté(e) le 6 novembre 2006 Auteur Partager Posté(e) le 6 novembre 2006 Se pourrait-il que ce paramètre soit apparu avec une nouvelle version ? Je ne me rappelle pas d'avoir vu cela auparavant. Ça pourrait être un paramètre à prendre plus de réflexion dessus afin d'élaborer son fonctionnement. Est-ce uniquement les "privilèges" qui sont considérés ou bien la "manière de reconnaître" l'usager virtuel comme étant un usager réel à la place... ? Lien vers le commentaire Partager sur d’autres sites More sharing options...
ggbce Posté(e) le 7 avril 2010 Auteur Partager Posté(e) le 7 avril 2010 snif maintenant que tu m'as donné le bon fichier c'est lidentification qui ne marche pas...j'ai gardé le fichier conf d'origine sans les utilisateurs anonymes.... faut il changer quelquechose dans le fichier conf???? mon serveur mysql démarre trés bien voila ma base de données: create database ftp; create table vsftpd(usr varchar(10), pass varchar(10)); insert into vsftpd values ('test','test'); peut etre faut il faire démarrer vsftpd avec xinetd???? en tout cas lorsque je met listen= no le deamon ne se lance pas... merci bcp Moi aussi je vais réveiller cet ancien post que j'avais ouvert afin de répondre correctement à une question qui peut intéresser quelques personnes. Si vous utilisez un champ de mots de passe en mode crypté (non texte clair), il faut faire attention avec la longueur du champ. Par exemple, pass varchar(10) pourrait être problématique. Car lorsqu'on utilise un cryptage SHA1, MD5, etc. le mot de passe peut se retrouver avec une longueur beaucoup plus grande (et c'est de manière aléatoire). Si vous limitez les utilisateurs à des mots de passe de 10 caractères, je suggère d'utiliser un champ de mot de passe d'au moins 50 caractères dans la BDD MySQL. Je ne sais pas exactement quel est la longueur maximale d'un mot de passe crypté vs le mot de passe en texte clair, mais je sais que si le champ n'est pas assez long lors de la création du mot de passe vous n'aurez pas d'erreur... sauf que le mot de passe crypté sera tronqué à son insertion et sera illisible par la suite... donc vous éprouverez des problèmes d'authentification. Lien vers le commentaire Partager sur d’autres sites More sharing options...
ZionRider78 Posté(e) le 11 mai 2010 Partager Posté(e) le 11 mai 2010 je vous poste ce tuto, inspiré de celui de ubuntu.fr et modifié pour ma config avec quelques plus, merci de corriger si vous voyez un truc mais je pense que tt est correct. Système Debian Lenny 5.0.4 – noyaux 2.6.26-2amd64 sur x86_64 vsftpd 2.0.7-1 MySQL 5.0.51a-24+lenny3 libpam-mysql 0.6.2-1 mysql-client 5.0.51a-24+lenny3 phpmyadmin 2.11.8.1-5+lenny4 openssl 0.9.8g-16+lenny6 Dans ce tuto j'utilise le nom d'hôte server1,example.com avec l'adresse IP 192.168.0.100. Ces données peuvent changer chez vous, donc vous devez les remplacer. 2 Installation de vsftpd, MySQL et phpMyAdmin Vsftpd n'est pas supporté en natif par MySQL, donc nous utiliserons PAM pour s'identifier dans la base de donnée MySQL. Nous devons installer libpam-mysql en plus de vsftpd, MySQL, et phpMyAdmin: apt-get update apt-get upgrade apt-get install vsftpd libpam-mysql mysql-server mysql-client phpmyadmin créons un utilisateur root avec mot de passe pour MySQL (remplacer yourrootsqlpassword avec le mot de passe que vous voulez utiliser): mysqladmin -u root password yourrootsqlpassword On vérifie: netstat -tap | grep mysql Si ça donne quelque chose comme ça: tcp 0 0 localhost.localdomain:mysql *:* LISTEN 2713/mysqld MySQL écoute sur localhost.localdomain seulement, on est en sécurité. Mais si ça donne quelque chose comme ça: tcp 0 0 *:mysql *:* LISTEN 2713/mysqld On doit donner un mot de passe MySQL pour le hostname également, sinon l'accès ne serait pas complétement sécurisé et n'importe qui pourrait avoir accès a la table: mysqladmin -h server1.example.com -u root password yourrootsqlpassword 3 Création de la base MySQL pour vsftpd Nous allons créer un base de donnée nommée vsftpd et un utilisateur MySQL nommé vsftpd que le daemon vsftpd utilisera pour ce connecter à la base vsftpd: mysql -u root -p CREATE DATABASE vsftpd; GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP ON vsftpd.* TO 'vsftpd'@'localhost' IDENTIFIED BY 'ftpdpass'; GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP ON vsftpd.* TO 'vsftpd'@'localhost.localdomain' IDENTIFIED BY 'ftpdpass'; FLUSH PRIVILEGES; Replacer ftpdpass par le mot de passe que vous voulez utiliser pour l'utilisateur vsftpd. Puis nous créons la table accounts: USE vsftpd; CREATE TABLE `accounts` (`id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY , `username` VARCHAR( 30 ) NOT NULL ,`pass` VARCHAR( 50 ) NOT NULL ,UNIQUE ( `username`)) ENGINE = MYISAM ; quit; Nous somme maintenant revenus dans le shell Linux. 4 Configuration de vsftpd 4.1 User vsftpd Premièrement création d'un user sans privilèges vsftpd (avec en homedir /home/vsftpd) dans le groupe nogroup. On fait tourner vsftpd avec cet user, le dossier FTP de nos users virtuels sera dans /home/vsftpd/$USER (/home/vsftpd/user1, /home/vsftpd/user2, etc.). useradd --home /home/vsftpd --gid nogroup -m --shell /bin/false vsftpd 4.2 config de /etc/vsftpd.conf On fait un backup du fichier de conf original /etc/vsftpd.conf et on crée le notre: cp /etc/vsftpd.conf /etc/vsftpd.conf_orig cat /dev/null > /etc/vsftpd.conf vi /etc/vsftpd.conf Contenu du nouveau fichier: listen=YES listen_port=21 anonymous_enable=NO local_enable=YES write_enable=YES #chmod des dossiers en 755 et fichiers en 644 local_umask=022 #personnaliser texte d'accueil ftpd_banner=Bienvenue dirmessage_enable=YES xferlog_enable=YES connect_from_port_20=YES nopriv_user=vsftpd user_config_dir=/etc/vsftpd_user_conf #Partie utilisateurs virtuels chroot_local_user=YES secure_chroot_dir=/var/run/vsftpd pam_service_name=vsftpd guest_enable=YES guest_username=vsftpd local_root=/home/vsftpd/$USER user_sub_token=$USER virtual_use_local_privs=YES # Activation du SSL ssl_enable=YES #chemin du certificat SSL rsa_cert_file=/etc/ssl/certs/vsftpd.pem # Oblige les connexions de données a passer par du SSL # Si cette option est activée les clients ftp ne gérant pas # SSL ne pourront envoyer ni recevoir de données force_local_data_ssl=NO # Oblige la connexion d'identification a être encryptée en SSL # Si cette option est activée les clients FTP ne gérant pas # SSL ne pourront plus se connecter force_local_logins_ssl=YES # Versions de SSL pris en charge par le serveur VsftpD ssl_sslv2=YES ssl_sslv3=YES ssl_tlsv1=YES #Passer en mode passif et attribution des ports 3000 à 3005 pour # le transfert des fichiers pasv_enable=YES pasv_min_port=3000 pasv_max_port=3005 Les autres options de config sont expliquées sur http://vsftpd.beasts.org/vsftpd_conf.html. Les options nécessaires pour notre config avec utilisateurs virtuels sont: chroot_local_user, guest_enable, guest_username, user_sub_token, local_root, and virtual_use_local_privs. En complément de user_config_dir on peut spécifier un fichier de config par user qui remplacera/complétera la config globale. C'est totalement optionnel, mais nous créons quand même le dossier en prévision: mkdir /etc/vsftpd_user_conf 4.3 /etc/pam.d/vsftpd Maintenant on configure PAM qui sera utilisé pour faire la liaison avec notre base MySQL pour l'authentification de nos users virtuels à la place de /etc/passwd et /etc/shadow. La configuration de PAM pour vsftpd est dans /etc/pam.d/vsftpd. On crée un backup de l'original et on crée la nôtre: cp /etc/pam.d/vsftpd /etc/pam.d/vsftpd_orig cat /dev/null > /etc/pam.d/vsftpd vi /etc/pam.d/vsftpd auth required pam_mysql.so user=vsftpd passwd=ftpdpass host=localhost db=vsftpd table=accounts usercolumn=username passwdcolumn=pass crypt=2 account required pam_mysql.so user=vsftpd passwd=ftpdpass host=localhost db=vsftpd table=accounts usercolumn=username passwdcolumn=pass crypt=2 Attention remplacez le password MySQL par le votre! On redémarre vsftpd: /etc/init.d/vsftpd restart 4.4 Création du certificat SSL Apt-get install openssl mkdir ~/SSL-cert-vsftpd && cd ~/SSL-cert-vsftpd openssl req -x509 -nodes -days 730 -newkey rsa:1024 -keyout vsftpd.pem -out vsftpd.pem Openssl va vous poser quelques questions, la plus critique est celle ci : Common Name (eg, YOUR name) []: example.com ICreating and Using a self signed SSL Certificates in debian Un certificat, vsftpd.pem, a été généré dans le dossier SSL-cert-vsftpd de votre dossier personnel. Copions le dans /etc/ssl/certs/ : sudo cp ~/SSL-cert-vsftpd/vsftpd.pem /etc/ssl/certs/ Sécurisons le : sudo chown root:root /etc/ssl/certs/vsftpd.pem sudo chmod 600 /etc/ssl/certs/vsftpd.pem Note : vsftp s'exécute avec les droits de l'utilisateur nobody mais il se lance en tant que root et donc lit le certificat en tant que root. 5 Création du premier User virtuel On rentre avec dans le shell MySQL et on ce loggue sous vsftpd: mysql -u root -p USE vsftpd; Maintenant on crée le user testuser avec le password secret (Nous utilisons la commande PASSWORD pour stocker le password encrypté): INSERT INTO accounts (username, pass) VALUES('testuser', PASSWORD('secret')); quit; Le dossier racine de testuser sera /home/vsftpd/testuser; malheureusement vsftpd ne crée pas ce dossier automatiquement. Donc on le crée nous même et on donne les bon droits et utilisateur: mkdir /home/vsftpd/testuser chown vsftpd:nogroup /home/vsftpd/testuser cd ~vsftpd chmod 755 testuser Maintenant on ouvre un client FTP (comme WS_FTP ou SmartFTP sous Windows ou gFTP sous Linux, FileZilla fonctionne aussi) et essayez de vous connecter. Hostname: 192.168.0.100 Login: testuser password: vsftpd Server Type: FTPES - FTP plus explicite (TLS/SSL) Vous êtes connectés, !!! n'oubliez pas le firewall,sinon....y'a plus qu'a tout revérifier... 6 Configuration de shorewall Le module FTP de Shorewall est fait pour un FTP actif on ne l'utilisera pas à la place on crée nos propres régles à ajouter dans /etc/shorewall/rules #SECTION VSFTPD ACCEPT net $FW TCP 21 ACCEPT net $FW TCP 3000:3005 7 Configuration fail2ban (optionnel) Activer la jail pour vsftpd dans jail.conf: vi /etc/fail2ban/jail.conf [vsftpd] enabled = true port = ftp,ftp-data,ftps,ftps-data filter = vsftpd logpath = /var/log/vsftpd.log # or overwrite it in jails.local to be # logpath = /var/log/auth.log # if you want to rely on PAM failed login attempts # vsftpd's failregex should match both of those formats maxretry = 3 et modifier le filtre standart de vsftpd: vi /etc/fail2ban/filter.d/vsftpd.conf [Definition] # Option: failregex # Notes.: regex to match the password failures messages in the logfile. The # host must be matched by a group named "host". The tag "<HOST>" can # be used for standard IP/hostname matching and is only an alias for # (?:::f{4,6}:)?(?P<host>\S+) # Values: TEXT # #Ancienne entrée #failregex = vsftpd(?:\(pam_unix\))?(?:\[\d+\])?:.* authentication failure; .* rhost=<HOST>(?:\s+user=\S*)?\s*$ # \[.+\] FAIL LOGIN: Client "<HOST>"\s*$ #Nouvelle entrée pour mysqlauth dans vsftpd.log failregex = .* FAIL LOGIN: Client \"<HOST>\"$ # Option: ignoreregex # Notes.: regex to ignore. If this regex matches, the line is ignored. # Values: TEXT # ignoreregex = 8 Administration de la base Pour beaucoup de gens il est plus facile d'utiliser une interface graphique pour MySQL; vous pouvez donc utiliser phpMyAdmin (à cette adresse http://server1.example.com/phpmyadmin/) pour gérer la base. Si vous créez ou modifiez un user, assurez-vous d'utiliser PASSWORD pour encrypter le password. Et n'oubliez pas de créer le dossier racine du user. Lien vers le commentaire Partager sur d’autres sites More sharing options...
Messages recommandés
Archivé
Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.