Je voulais un serveur FTP pour pouvoir partager des données facilement et surtout pour avoir un espace de stockage accessible depuis n’importe où. Le premier besoin était de transmettre un gros fichier sans être limité par les quotas d’un mail.
Après avoir cherché un peu sur internet, j’ai décidé d’utiliser vsftpd mais d’autres font tout aussi bien l’affaire (proFTPd par exemple). Je l’ai donc installé avec :
apt-get install vsftpd
Je voulais que chaque utilisateur ait un espace qui lui est propre mais aussi un dossier qui serait commun à tous pour faciliter le partage. J’ai modifié le fichier de configuration ainsi :
listen=YES
anonymous_enable=NO
local_enable=YES
write_enable=YES
dirmessage_enable=YES
use_localtime=YES
xferlog_enable=YES
connect_from_port_20=YES
ftpd_banner=Bienvenue sur mon FTP
chroot_local_user=YES
secure_chroot_dir=/var/run/vsftpd/empty
pam_service_name=vsftpd
rsa_cert_file=/etc/ssl/private/vsftpd.pem
Ceci me permet de garder chaque utilisateur dans son dossier avec des droits de lecture et d’écriture.
EDIT : ATTENTION : Ce qui suit est absolument nul, faisable avec des options sur les commandes de base sans avoir besoin de faire des scripts compliqués, sera supprimé dès que je me serais re-penché sur la question et a été supprimé de mon serveur tellement c’est lourd. Last but not least : le dossier de partage ne fonctionne pas.
Pour le dossier de partage, j’ai utilisé ce que je qualifierais de patch parce que lourd à mettre en place et à maintenir. Je cherche un moyen plus efficace de faire la même chose.J’ai actuellement procédé ainsi :
mkdir /home/partage
groupadd ftpusers
chown root /home/partage
chgrp ftpusers /home/partage
Maintenant, à la création de chaque utilisateur, on le rendra membre du groupe ftpusers, on créera un dossier de partage et on montera /home/partage dedans. En plus, j’ai fait manuellement toutes ces opérations parce que je n’avais pas lu la manpage de useradd. Tout ceci peut donc évidemment être amélioré.
Voici les deux scripts que j’utilise actuellement pour créer et supprimer des utilisateurs :
Création :
#!/bin/sh
group="/etc/group";
fstab="/etc/fstab";
if [ -z $1 ]
then
echo "Usage : $0 username";
echo "This script was designed to add a user and to give him an access to the shared zone";
else
useradd $1;
mkdir -p /home/$1/partage;
chown -R $1 /home/$1;
chgrp -R $1 /home/$1;
chmod 740 /home/$1
mount --bind /home/partage /home/$1/partage;
cp $group $group~
sed -i "/ftpusers*/ s/.*/&,$1/" $group;
echo "/home/partage\t/home/$1/partage\tnone\tbind,defaults,auto\t0\t0" >> $fstab;
echo "Initialisation du mot de passe\n";
passwd $1;
echo "User $1 created with success";
fi
Suppression :
#!/bin/sh
fstab="/etc/fstab";
if [ -z $1 ]
then
echo "Usage : $0 username";
echo "This script was designed to add a user and to give him an access to the shared zone";
else
umount /home/$1/partage;
userdel $1;
mv /home/$1 /home/archive;
sed -i "/*$1*/ s/.*//" $fstab;
sed -i '/^$/d' $fstab;
echo "User $1 deleted with success";
fi
Je me rend compte en écrivant cet article que je ne supprime pas la ligne correspondante dans fstab.
A la suppression je déplace l’utilisateur dans le dossier archive au cas où il aurait fallut récupérer des données lui appartenant.
Je pense que ce que je veux faire est possible avec des utilisateurs virtuels. Ce sera mon prochain fil de recherche.