GNU/Linux >> Tutoriels Linux >  >> Ubuntu

Hébergement virtuel avec vsftpd et MySQL sur Ubuntu 12.04

Vsftpd est l'un des serveurs FTP les plus sécurisés et les plus rapides pour Linux. Habituellement, vsftpd est configuré pour fonctionner avec les utilisateurs du système. Ce document décrit comment installer un serveur vsftpd qui utilise des utilisateurs virtuels d'une base de données MySQL au lieu d'utilisateurs système réels. Ceci est beaucoup plus performant et permet d'avoir des milliers d'utilisateurs ftp sur une seule machine.

Pour l'administration de la base de données MySQL, vous pouvez utiliser des outils Web tels que phpMyAdmin qui seront également installés dans ce guide. phpMyAdmin est une interface graphique confortable qui signifie que vous n'avez pas à vous soucier de la ligne de commande.

Ce tutoriel est basé sur Ubuntu 12.04. Vous devriez déjà avoir configuré un système Ubuntu 12.04 de base.

Ce guide est conçu comme un guide pratique ; il ne couvre pas les arrière-plans théoriques. Ils sont traités dans de nombreux autres documents sur le Web.

Ce document est fourni sans garantie d'aucune sorte ! Je tiens à dire que ce n'est pas la seule façon de mettre en place un tel système. Il existe de nombreuses façons d'atteindre cet objectif, mais c'est la voie que je prends. Je n'émets aucune garantie que cela fonctionnera pour vous !

1 Remarque préliminaire

Dans ce tutoriel, j'utilise le nom d'hôte server1.example.com avec l'adresse IP 192.168.0.100. Ces paramètres peuvent différer pour vous, vous devez donc les remplacer le cas échéant.

Étant donné que nous devons exécuter toutes les étapes de ce didacticiel avec les privilèges root, nous pouvons soit ajouter la chaîne sudo à toutes les commandes de ce didacticiel, soit nous devenons root dès maintenant en tapant

sudo su 

2 Installer vsftpd, MySQL et phpMyAdmin

Vsftpd n'a pas de support MySQL intégré, nous devons donc utiliser PAM pour nous authentifier auprès de la base de données MySQL. Nous installons donc libpam-mysql en plus de vsftpd, MySQL et phpMyAdmin :

apt-get install vsftpd libpam-mysql mysql-server mysql-client phpmyadmin libpam-ldap

Les questions suivantes vous seront posées :

Nouveau mot de passe pour l'utilisateur MySQL "root" :<-- yourrootsqlpassword
Répéter le mot de passe pour l'utilisateur MySQL "root" :<-- yourrootsqlpassword
Serveur Web à reconfigurer automatiquement :<-- apache2
Configurer la base de données pour phpmyadmin avec dbconfig-common ? <-- Non
Serveur LDAP Uniform Resource Identifier  : <--  ENTER
Nom distinctif de la base de recherche : <-- ENTER
Version LDAP à utiliser : <-- 3
Créer l'administrateur racine local de la base de données : <-- Oui
La base de données LDAP nécessite-t-elle une connexion ? <-- Aucun
compte LDAP pour la racine : <-- ENTREZ
Mot de passe du compte racine LDAP : <-- ldaprootpw

3 Créer la base de données MySQL pour vsftpd

Nous créons maintenant une base de données appelée vsftpd et un utilisateur MySQL nommé vsftpd que le démon vsftpd utilisera plus tard pour se connecter à la base de données vsftpd :

mysql -u root -p

CREATE DATABASE vsftpd ;
ACCORDER SELECT, INSERT, UPDATE, DELETE, CREATE, DROP ON vsftpd.* À 'vsftpd'@'localhost' IDENTIFIÉ PAR 'ftpdpass' ;
ACCORDER SELECT, INSERT, UPDATE, DELETE , CRÉER, DÉPOSER SUR vsftpd.* VERS 'vsftpd'@'localhost.localdomain' IDENTIFIÉ PAR 'ftpdpass' ;
FLUSH PRIVILEGES ;

Remplacez la chaîne ftpdpass par le mot de passe que vous souhaitez utiliser pour l'utilisateur MySQL vsftpd. Toujours sur le shell MySQL, on crée la table de base de données dont on a besoin (oui, il n'y a qu'une seule table !) :

USE vsftpd;

CREATE TABLE `accounts` (
`id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`username` VARCHAR( 30 ) NOT NULL ,
`pass` VARCHAR( 50 ) NOT NULL ,
UNIQUE (
`nom d'utilisateur`
)
) MOTEUR =MYISAM;

quit;

Comme vous l'avez peut-être remarqué, avec le renoncement; commande, nous avons quitté le shell MySQL et sommes de retour sur le shell Linux.

BTW, (je suppose que le nom d'hôte de votre système de serveur ftp est server1.example.com) vous pouvez accéder à phpMyAdmin sous http://server1.example.com/phpmyadmin/ (vous pouvez également utiliser l'adresse IP au lieu de server1 .example.com) dans un navigateur et connectez-vous en tant qu'utilisateur vsftpd. Ensuite, vous pouvez consulter la base de données. Plus tard, vous pourrez utiliser phpMyAdmin pour administrer votre serveur vsftpd.

4 Configurer vsftpd

Nous créons d'abord un utilisateur non privilégié appelé vsftpd (avec le homedir /home/vsftpd) appartenant au groupe nogroup. Nous exécuterons vsftpd sous cet utilisateur, et les répertoires FTP de nos utilisateurs virtuels seront dans le répertoire /home/vsftpd (par exemple /home/vsftpd/user1, /home/vsftpd/user2, etc.).

useradd --home /home/vsftpd --gid nogroup -m --shell /bin/false vsftpd

Ensuite, nous faisons une sauvegarde du fichier /etc/vsftpd.conf d'origine et créons le nôtre :

cp /etc/vsftpd.conf /etc/vsftpd.conf_orig
cat /dev/null> /etc/vsftpd.conf
vi /etc/vsftpd.conf

Le fichier doit avoir le contenu suivant :

listen=YES
anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=022
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
nopriv_user=vsftpd
chroot_local_user=YES
secure_chroot_dir=/var/run/vsftpd
pam_service_name=vsftpd
rsa_cert_file=/etc/ssl/certs/vsftpd.pem
guest_enable=YES
guest_username=vsftpd
local_root=/home/vsftpd/$USER
user_sub_token=$USER
virtual_use_local_privs=YES
user_config_dir=/etc/vsftpd_user_conf

Les options de configuration sont expliquées sur http://vsftpd.beasts.org/vsftpd_conf.html. Les options importantes pour notre configuration virtuelle sont chroot_local_user, guest_enable, guest_username, user_sub_token, local_root et virtual_use_local_privs.

Avec l'option user_config_dir, vous pouvez spécifier un répertoire pour les fichiers de configuration par utilisateur qui remplacent certaines parties des paramètres globaux. Ceci est totalement facultatif et à vous de décider si vous souhaitez utiliser cette fonctionnalité. Cependant, nous devrions créer ce répertoire maintenant :

mkdir /etc/vsftpd_user_conf

Nous devons maintenant configurer PAM afin qu'il utilise la base de données MySQL pour authentifier nos utilisateurs FTP virtuels au lieu de /etc/passwd et /etc/shadow. La configuration PAM pour vsftpd se trouve dans /etc/pam.d/vsftpd. Nous faisons une sauvegarde du fichier d'origine et en créons un nouveau comme ceci :

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

Assurez-vous de remplacer le mot de passe MySQL par le vôtre !

Ensuite, nous redémarrons vsftpd :

/etc/init.d/vsftpd restart

5 Créer le premier utilisateur virtuel

Pour remplir la base de données, vous pouvez utiliser le shell MySQL :

mysql -u root -p
USE vsftpd;

Nous créons maintenant l'utilisateur virtuel testuser avec le mot de passe secret (qui sera stocké chiffré à l'aide de la fonction PASSWORD de MySQL) :

INSERT INTO accounts (username, pass) VALUES('testuser', PASSWORD('secret'));
quit;

le répertoire personnel de testuser est /home/vsftpd/testuser ; Malheureusement, vsftpd ne crée pas ce répertoire automatiquement s'il n'existe pas. Par conséquent, nous le créons manuellement maintenant et le faisons appartenir à l'utilisateur vsftpd et au groupe nogroup :

mkdir /home/vsftpd/testuser
chown vsftpd:nogroup /home/vsftpd/testuser

Ouvrez maintenant votre programme client FTP sur votre poste de travail (quelque chose comme FileZilla ou FireFTP) et essayez de vous connecter. Comme nom d'hôte, vous utilisez server1.example.com (ou l'adresse IP du système), le nom d'utilisateur est testuser et le mot de passe est secret.

Si vous parvenez à vous connecter, félicitations ! Sinon, quelque chose s'est mal passé.

6 Administration de la base de données

Pour la plupart des gens, c'est plus facile s'ils ont une interface graphique pour MySQL; par conséquent, vous pouvez également utiliser phpMyAdmin (dans cet exemple sous http://server1.example.com/phpmyadmin/) pour administrer la base de données vsftpd.

Chaque fois que vous créez ou modifiez un utilisateur, assurez-vous d'utiliser la fonction PASSWORD de MySQL pour chiffrer le mot de passe de cet utilisateur. De plus, lorsque vous créez un nouvel utilisateur virtuel, n'oubliez pas de créer le répertoire personnel de cet utilisateur sur le shell, comme indiqué à la fin du chapitre précédent.

  • vsftpd :http://vsftpd.beasts.org/
  • Ubuntu :http://www.ubuntu.com/

Ubuntu
  1. Utilisateurs virtuels et domaines avec Postfix, Courier, MySQL et SquirrelMail (Ubuntu 14.04LTS)

  2. Hébergement virtuel avec Proftpd et MySQL (incl. Quota) sur Ubuntu 14.04LTS

  3. Utilisateurs virtuels et domaines avec Postfix, Courier, MySQL et SquirrelMail (Ubuntu 13.10)

  4. Hébergement virtuel avec PureFTPd et MySQL (y compris la gestion des quotas et de la bande passante) sur Ubuntu 7.10 (Gutsy Gibbon)

  5. Hébergement virtuel avec Proftpd et MySQL (incl. Quota) sur Ubuntu 8.04 LTS

Utilisateurs virtuels et domaines avec Postfix, Courier, MySQL et SquirrelMail (Ubuntu 12.10)

Hébergement virtuel avec vsftpd et MySQL sur Ubuntu 12.10

Hébergement virtuel avec PureFTPd et MySQL (y compris la gestion des quotas et de la bande passante) sur Ubuntu 12.10

Hébergement virtuel avec Proftpd et MySQL (incl. Quota) sur Ubuntu 12.10

Hébergement virtuel avec PureFTPd et MySQL (y compris la gestion des quotas et de la bande passante) sur Ubuntu 14.04LTS

Hébergement virtuel avec vsftpd et MySQL sur Debian Squeeze