Ci-dessous, les différences entre deux révisions de la page.
Les deux révisions précédentesRévision précédenteProchaine révision | Révision précédente | ||
linux:installation:vsftpd_avec_users_mariadb [2022/09/03 15:44] – [Configurer Pam pour utiliser des users en BDD] tutospisto | linux:installation:vsftpd_avec_users_mariadb [2022/09/03 16:28] (Version actuelle) – tutospisto | ||
---|---|---|---|
Ligne 54: | Ligne 54: | ||
Autrement dit, les valeurs ne correspondent pas et l’authentification échoue systématiquement. Personnellement, | Autrement dit, les valeurs ne correspondent pas et l’authentification échoue systématiquement. Personnellement, | ||
- | ===== Ajouter un utilisateur ===== | + | ===== Ajouter un premier |
On crée un premier utilisateur virtuel sur MySQLINSERT INTO comptes (pseudo, mdp) VALUES(‘exemple’, | On crée un premier utilisateur virtuel sur MySQLINSERT INTO comptes (pseudo, mdp) VALUES(‘exemple’, | ||
Ligne 73: | Ligne 73: | ||
<code bash> | <code bash> | ||
- | <codebash | + | <code bash user_config.txt[enable_line_numbers=1, |
local_root=/ | local_root=/ | ||
Ligne 94: | Ligne 94: | ||
## definir l' | ## definir l' | ||
local_umask=022</ | local_umask=022</ | ||
+ | |||
+ | ===== Petit plus : publication sur apache ===== | ||
+ | |||
+ | Si on veut que PSEUDO_USER qui est chroot dans / | ||
+ | <code bash> | ||
+ | chown -R vsftpd: | ||
+ | mount --bind / | ||
+ | |||
+ | Pour l’avoir au boot éditer /etc/fstab et ajouter : | ||
+ | <code bash>/ | ||
+ | |||
+ | Ne pas oublier de metttre l’user vsftpd dans le groupe www-data pour que chaque upload d’un utilisateur soit directement visible par apache | ||
+ | <code bash> | ||
+ | |||
+ | Ensuite on édite la configuration de vsftpd dans / | ||
+ | <code bash> | ||
+ | cp / | ||
+ | nano / | ||
+ | |||
+ | On remplace TON_PORT et TON_PORT_MAX par les ports de son choix (qu’on pense à ouvrir sur le routeur) | ||
+ | |||
+ | <code bash vsftpd.conf[enable_line_numbers=1, | ||
+ | # ftp server | ||
+ | ##################### | ||
+ | listen=YES | ||
+ | # port par défaut du FTP | ||
+ | listen_port=TON_PORT | ||
+ | # nom du service d' | ||
+ | pam_service_name=vsftpd | ||
+ | # pour le mode passif (firewall) | ||
+ | pasv_min_port=TON_PORT | ||
+ | pasv_max_port=TON_PORT_MAX | ||
+ | # | ||
+ | # | ||
+ | # anonymous user | ||
+ | ##################### | ||
+ | anonymous_enable=NO | ||
+ | anon_upload_enable=NO | ||
+ | anon_mkdir_write_enable=NO | ||
+ | anon_other_write_enable=NO | ||
+ | # | ||
+ | # | ||
+ | # general user | ||
+ | ##################### | ||
+ | local_enable=YES | ||
+ | local_umask= 022 | ||
+ | write_enable=YES | ||
+ | chroot_local_user=YES | ||
+ | # pour user admin (déconseillé) | ||
+ | # chroot_list_enable=YES | ||
+ | # | ||
+ | # | ||
+ | # virtual user | ||
+ | ##################### | ||
+ | guest_enable=YES | ||
+ | guest_username=vsftpd | ||
+ | nopriv_user=vsftpd | ||
+ | virtual_use_local_privs=YES | ||
+ | user_sub_token=$USER | ||
+ | local_root=/ | ||
+ | hide_ids=YES | ||
+ | |||
+ | # Necessaire pour le monitoring | ||
+ | setproctitle_enable=YES</ | ||
+ | |||
+ | |||
+ | On relance tout ça : | ||
+ | <code bash>/ | ||
+ | |||
+ | Et on teste avec filezilla ou la commande ftp : | ||
+ | <code bash>ftp 127.0.0.1 TONPORT</ | ||
+ | |||
+ | Et le couple login / mdp qui va bien. | ||
+ | |||
+ | Une fois l’installation effectuée, pour que le serveur se lance automatiquement au démarrage : | ||
+ | <code bash> | ||
+ | |||
+ | ===== Ajouter un utilisateur ===== | ||
+ | |||
+ | - on crée son compte sur MySQL (ATTENTION : le mot de passe doit etre encrypt(« password ») si crypt=1) | ||
+ | - on crée son répertoire ftp (et on mount –bind les répertoires dont il aura besoin) | ||
+ | - on donne le répertoire à ftp ( chmod 555 / | ||
+ | - on ajoute ses permissions ( nano / | ||
+ | - on édite le /etc/fstab en ajoutant les bind | ||
+ | - on relance vsftpd ( / | ||
+ | |||
+ | ===== Monitoring vsftpd | ||
+ | Pour avoir un monitoring basic (voir les utilisateurs connectes) : | ||
+ | |||
+ | ((nécessite l’activation de « setproctitle_enable=YES » dans le fichier / | ||
+ | |||
+ | Ensuite, pour voir la liste des utilisateurs il suffit de taper la commande suivante dans un terminal : | ||
+ | <code bash>ps -aef | grep vsftpd</ | ||
+ | |||
+ | ou pour suivre les connexions en continu (perso j’ai fait un alias « watchftp »): | ||
+ | <code bash> | ||
+ | |||
+ | Attention, tous les utilisateurs du système ayant accès a la commande « ps » pourront également visualiser la liste des utilisateurs connectes. | ||
+ | |||
+ | ===== Erreurs récurrentes ===== | ||
+ | |||
+ | Si lors des tests de connexion on obtient : <code bash> | ||
+ | Alors il faudra modifier le /home/ de l’utilisateur vsftpd (nano /etc/passwd ) et mettre / | ||
+ | \\ | ||
+ | \\ | ||
+ | Si lors des tests de connexion on obtient : <code bash> | ||
+ | Alors il faut vérifier que les ports de connexion et de data ne sont pas déjà utilise (commande « lsof -i :65432 » par exemple) | ||
+ | \\ | ||
+ | \\ | ||
+ | Si lors des tests du FTP on obtient des erreurs de permissions ou des « failed »\\ | ||
+ | Alors il faut vérifier qu’on a bien lance la commande : chown -R vsftpd: | ||
+ | <code bash> | ||
+ | chmod 775 / | ||
+ | \\ | ||
+ | Après chaque changement de config on oublie pas de relancer vsftpd (ce qui ne gène normalement pas les gens connectes) | ||
+ | <code bash>/ | ||
+ | / | ||
+ | |||
+ | Et on n' | ||
+ | |||
+ | ---- | ||
+ | |||
+ | ################################################### | ||
+ | |||
+ | ===== Ancien tuto pour info ===== | ||
+ | |||
+ | <code bash ancien_tuto.txt[enable_line_numbers=1, | ||
+ | # Note : Voici l' | ||
+ | # vsftpd/ | ||
+ | # vsftpd/ | ||
+ | # vsftpd/ | ||
+ | # NOTE : Pour le moment les droits des users virtuels ne sont pas tout a fait appliques. | ||
+ | # En effet ils sont effectivement chrootes, mais impossible d' | ||
+ | # A creuser ! | ||
+ | ### VSFTPD via MySQL | ||
+ | # Sur MySQL, on cree un utilisateur BDDUSER avec une bdd qui lui est associee (via phpmyadmin par exemple) | ||
+ | # Ensuite on cree deux nouvelles tables dans cette bdd | ||
+ | # Creation d'une table ftpcomptes avec 3 champs (id, pseudo, mdp) | ||
+ | CREATE TABLE IF NOT EXISTS `ftpcomptes` ( `id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY , `pseudo` VARCHAR( 250 ) NOT NULL , `mdp` VARCHAR( 250 ) NOT NULL , UNIQUE (`pseudo`) ); | ||
+ | # Creation d'une table ftplogging avec 7 champs (id, pseudo, pid, host, rhost, time, msg) | ||
+ | CREATE TABLE IF NOT EXISTS `ftplogging` ( `id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY , `pseudo` VARCHAR( 250 ) NOT NULL , `pid` VARCHAR( 250 ) NOT NULL , `host` VARCHAR( 250 ) NOT NULL , `rhost` VARCHAR( 250 ) NOT NULL , `time` VARCHAR( 250 ) NOT NULL , `msg` VARCHAR( 250 ) NOT NULL, INDEX (`pseudo`) ); | ||
+ | # Creation d'un premier utilisateur virtuel sur MySQL. Son pseudo est " | ||
+ | INSERT INTO ftpcomptes (pseudo, mdp) VALUES(' | ||
+ | # Il faut maintenant configurer pam, qui va permettre a vsftpd d' | ||
+ | # dans les utilisateurs systeme, stockes dans /etc/passwd et / | ||
+ | nano / | ||
+ | # Et on remplace l' | ||
+ | # Ou BDDUSER est l' | ||
+ | # BDDPASS son mot de passe | ||
+ | # BDDNAME le nom de la base de donnees qui lui est associee | ||
+ | auth required pam_mysql.so verbose=1 user=BDDUSER passwd=BDDPASS host=localhost db=BDDNAME table=ftpcomptes usercolumn=pseudo passwdcolumn=mdp crypt=1 sqllog=true logtable=ftplogging logmsgcolumn=msg logusercolumn=pseudo logpidcolumn=pid loghostcolumn=host logrhostcolumn=rhost logtimecolumn=time | ||
+ | account required pam_mysql.so verbose=1 user=BDDUSER passwd=BDDPASS host=localhost db=BDDNAME table=ftpcomptes usercolumn=pseudo passwdcolumn=mdp crypt=1 sqllog=true logtable=ftplogging logmsgcolumn=msg logusercolumn=pseudo logpidcolumn=pid loghostcolumn=host logrhostcolumn=rhost logtimecolumn=time | ||
+ | ### INFOS | ||
+ | # verbose : Mode verbeux, necessaire pour logger les acces ( 0=desactive, | ||
+ | # user : Utilisateur employe par VsftpD pour se conncter a MySQL | ||
+ | # password : Mot de passe de l' | ||
+ | # host : Hote hebergeant le serveur MySQL (localhost ou adresse IP) | ||
+ | # db : nom de la base de donnees a utiliser | ||
+ | # table : nom de la table contenant les utilisateurs | ||
+ | # usercolumn : nom de la colonne contenant les noms des utilisateurs | ||
+ | # passwdcolumn : nom de la colone contenant les mot de passe des utilisateurs | ||
+ | # crypt : type de cryptage utilise pour les mots de passe ( 0 = clair , 1 = fonction ENCRYPT(), 2 = fonction PASSWORD(), 3 = fonction MD5(), 4 = fonction SHA1() ) | ||
+ | # sqllog : activation du logging d' | ||
+ | # logtable : nom de la table de log des acces utilisateurs | ||
+ | # logmsgcolumn : nom de la colonne ou seront stockes les messages de pam_mysql | ||
+ | # logusercolumn : nom de la colonne ou seront stockes les nom des utilisateurs | ||
+ | # logpidcolumn : nom de la colonne ou seront stockes les numeros de process (pid) | ||
+ | # loghostcolumn : nom de la colonne ou seront stockes les adresses ou se connectent les utilisateurs (en general le serveur lui même) | ||
+ | # logrhostcolumn : nom de la colonne ou seront stockes les adresses distantes des utilisateurs | ||
+ | # logtimecolumn : nom de la colonne ou seront stockes les heures de connexion | ||
+ | # | ||
+ | # NOTE : La fonction crypt de la librairie pam_mysql accepte differents arguments (0, 1, 2, 3, 4) , cependant je n'en ai trouve que deux qui fonctionnent avec mysql | ||
+ | # En effet, sous mysql la fonction MD5() et la fonction SHA1() existent, mais elles ne renvoient pas les mêmes valeurs que le crypt fourni par pam_mysql. | ||
+ | # Autrement dit, les valeurs ne correspondent pas et l' | ||
+ | # Personellement, | ||
+ | # | ||
+ | # Et on cree un premier utilisateur virtuel sur MySQL | ||
+ | INSERT INTO comptes (pseudo, mdp) VALUES(' | ||
+ | # Le repertoire de l' | ||
+ | mkdir / | ||
+ | chown ftp:nogroup / | ||
+ | # On peut aussi, pour ne pas oublier un repertoire, lancer : | ||
+ | chown -R ftp:nogroup /var/ftp/ | ||
+ | # Cette commande devra etre lancee apres chaque creation de nouveau repertoire | ||
+ | # | ||
+ | # Ensuite on edite la configuration de vsftpd dans / | ||
+ | nano / | ||
+ | # | ||
+ | # On cree le repertoire qui stockera les droits des users virtuels | ||
+ | mkdir / | ||
+ | # On cree un repertoire par utilisateur virtuel en specifiant ces droits (! fichier d' | ||
+ | nano / | ||
+ | # On relance vsftpd et on teste ! | ||
+ | / | ||
+ | / | ||
+ | # Si lors des tests de connexion on obtient : Reponse : 500 OOPS: cannot change directory:/ | ||
+ | # Alors il faudra modifier le /home/ de l' | ||
+ | # Si lors des tests de connexion on obtient : Reponse : 500 OOPS: vsf_sysutil_bind | ||
+ | # Alors il faut verifier que les ports de connexion et de data ne sont pas deja utilise (commande "lsof -i : | ||
+ | # Si lors des tests du FTP on obtient des erreurs de permissions ou des " | ||
+ | # Alors il faut verifier qu'on a bien lance la commande : chown -R ftp:nogroup /var/ftp/ | ||
+ | # Apres chaque changement de config on oublie pas de relancer vsftpd (ce qui ne gene normalement pas les gens connectes) | ||
+ | / | ||
+ | / | ||
+ | # Et on oublie pas non plus d' | ||
+ | # | ||
+ | ### Petit plus : si on veut que PSEUDO_USER qui est chroot dans / | ||
+ | # publier le contenu de son ftp (sur / | ||
+ | # il suffit de lancer les commandes suivantes : | ||
+ | mkdir / | ||
+ | chown -R ftp:nogroup / | ||
+ | mount --bind / | ||
+ | # Pour l' | ||
+ | / | ||
+ | # | ||
+ | # | ||
+ | ### NOTE : Apres avoir mis en place le ftp sur deux ports seulement (65432 pour les connexions et 65431 pour les data), | ||
+ | # je me suis rendu compte qu'il etait impossible d' | ||
+ | # Lorsqu' | ||
+ | # Pour eviter de se retrouver coince de cette façon, il suffit d' | ||
+ | # (Ouvrir une cinquantaine de ports est suffisant dans mon cas pour accueillir simultanement une dizaine d' | ||
+ | # Dans mon cas toujours, j'ai donc modifie la ligne pasv_max_port=65482, | ||
+ | # | ||
+ | # | ||
+ | ### Ajouter un utilisateur : | ||
+ | # 1) on cree son compte sur MySQL (ATTENTION : le mot de passe doit etre encrypt(" | ||
+ | # 2) On cree son repertoire ftp (et on mount --bind les repertoires dont il aura besoin) | ||
+ | # 3) on donne le repertoire a ftp ( chown -R ftp:nogroup / | ||
+ | # 4) on ajoute ses permissions ( nano / | ||
+ | # 5) on edite le /etc/fstab en ajoutant les bind | ||
+ | # 6) on relance vsftpd ( / | ||
+ | # | ||
+ | # | ||
+ | ### Monitoring vsftpd | ||
+ | # Pour avoir un monitoring basic (voir les utilisateurs connectes) : | ||
+ | # ((necessite l' | ||
+ | # Ensuite, pour voir la liste des utilisateurs il suffit de taper la commande suivante dans un terminal : | ||
+ | ## ps -aef | grep vsftpd | ||
+ | # ou pour suivre les connexions en continu (perso j'ai fait un alias " | ||
+ | ## watch -n 1 'ps ax | grep vsftpd | grep -v grep' | ||
+ | # Attention, tous les utilisateurs du systeme ayant acces a la commande " | ||
+ | |||
+ |