Installation du serveur FTP : vsFTPd

#1 Analyse du besoin open

Lorsque j'ai installé le serveur Apache, j'ai créé un hôte virtuel et aussi un répertoire tuto-dev-web.fr qui est là pour accueillir les fichiers du site.

Pour le moment ce répertoire appartient à root et il a des droits d'accès par défaut. Ca peut fonctionner. Ce serait mieux d'organiser les choses surtout si ensuite le serveur vient à héberger plusieurs sites.

Ce qui serait bien ce serait d'attribuer un propriétaire et des droits à cette arborescence.

Donc, on va examiner le besoin au niveau de l'arborescence du site tuto-dev-web.fr : (Illustration ci-dessous, besoins en orange)

  1. Apache doit pouvoir lire les fichiers. (Eventuellement écrire dans un répertoire si upload d'images ou de documents)
  2. Ftp doit pouvoir uploader et downloader des fichiers.
  3. Après connexion ssh, donc depuis un shell, je dois pouvoir lancer des commandes. Par exemple du git clone ou du composer install.

L'utilisateur apache existe déjà wwww-data. Et il appartient au groupe de même nom www-data.

La solution que je propose (Illustration ci-dessous, solution cadre jaune):

  1. C'est de créer un utilisateur système www-tdwfr (tdw pour tuto-dev-web).
  2. De mettre cet utilisateur dans le groupe www-data.
  3. De rendre cet utilisateur propriétaire de la sous-arborescence à partir de tuto-dev-web.fr.
    Partage entre Ftp, Ssh et Ftp.
  4. De positionner les droits de la manière suivante :
    • Pour le propriétaire www-tdwfr, je positionne les droits de lecture et d'écriture. Ca c'est pour wsFTPd et le shell de la connexion ssh.
    • Pour le groupe www-data, je mets le droit de lecture. Ca c'est pour l'utilisateur www-data du serveur Apache qui accèdera en lecture en tant que membre du groupe.
    • Pour les autres utilisateurs, je ne mets aucun droits.
    Droit d'accès entre Ftp, Ssh et Ftp.
  5. Il faudra aussi que je gère les masques : umask 027 pour ssh (dans le .bash_profile) et pour vsftpd (dans son fichier de conf).
  6. Si j'ai besoin d'héberger un autre site, je crée un autre utilisateur. Je le mets propriétaire de l'arborescence de cet autre site. Les sites seront étanches. L'utilisateur d'un site ne pourra pas accéder à l'autre site.

#2 Installation de vsFTPd open

Comme serveur ftp, j’ai choisi vsFTPd qui est un serveur qui a été développé par Chris Evans, chargé de la sécurité de Google Chrome. vsFTPd peut gérer ses propres utilisateurs (tout comme le serveur MySQL). Ce n'est pas la solution que je choisis.

#3 Création d'un utilisateur pour le site tuto-dev-web.fr open

Je crée l'utilisateur www-tdwfr.

  1. Je lui donne /var/www/html/tuto-dev-web.fr comme home directory.
  2. Je le mets dans le même groupe que les utilisateurs apache soit www-data.
  3. Enfin, il aura un bash.

Et je mets comme mot de passe pass_www_tdwfr.

#4 Attribution d'un propriétaire et des droits à /var/www/html/tuto-dev-web.fr open

Ci-dessous, j'attribue un propriétaire et un groupe www-twdfr:www-data à l'arborescence tuto-dev-web.fr

Ci-dessous, j'attribue les droits.

#5 Première connexion à vsFTPd avec FileZilla open

Je me connecte avec FileZilla.

FileZilla me dit que je ne suis pas crypté. Normal pour l'instant.

Pour l'instant on est pas crypté

Je constate aussi que je peux me balader ou je veux dans l'arborescence du serveur. Je remonte jusqu'à la racine. Donc là ça craint. Il va falloir chrooter l'utilisateur www-tdwfr. (Ca veut dire l'enfermer dans le sous-arbre qui part de son home directory).

Ci-dessous, pour info, le process vsftpd qui accède à /var/www/html/tuto-dev-web.fr appartient bien à www-tdwfr (J'ai déjà expliqué pour le serveur Apache que la présence de plusieurs process est dû au modèle client/serveur Unix).

Processus vsftpd

#6 On chroote les users de vsftpd open

  1. Il faut prendre le fichier de conf en édition.

  2. En passant, je décommente la ligne. Ca n'a rien à voir avec le chrootage.

  3. Ensuite je décommente.

  4. Et j'ajoute.

  5. Puis je recharge la conf.

  6. Il me reste à reprendre FileZilla pour constater que je ne peux plus me balader en dehors du home directory. (J'ai aussi fait un test avec ftp en ligne de commande)

#7 Gestion des masques pour le shell et pour vsftpd open

Je prends une console ssh et je me connecte avec www-tdwfr.

Au niveau système, la commande umask gère la valeur d'un masque. Si je tape umask, j'ai la valeur courante du masque.

  1. Si je veux masquer le r, il me faut un 1.
  2. Si je veux masquer le w, il me faut un 2.
  3. Si je veux masquer le x, il me faut un 4.
  4. Si je veux masquer plusieurs droits, j'ajoute ces valeurs.

Qu'est-ce que je veux masquer ?

  1. Pour le propriétaire rien, donc 0.
  2. Pour le groupe le w, donc 2.
  3. Pour les autres tout, donc 7.
Choisir une valeur de umask

Je vais éditer le .bash_profile et mettre la commande umask 027.

Je me déconnecte et je me reconnecte puis je tape umask et je dois avoir 027.

Il me reste à faire un touch fic pour vérifier les droits sur un fichier. Puis un mkdir test pour vérifier les droits sur un répertoire.

Maintenant je passe à ftp.

Je prends le fichier de conf en édition.

Je cherche la ligne ci-dessous.

Je remplace le 022 par 027. Je recharge la conf.

Il me reste à tester tout cela avec Filezilla.

#8 Sécurisation SSL open

Je me sers du certificat de Let's Encrypt que j'ai installé pour le https. J'avais pensé créer un certificat auto signé, mais ce n'est pas nécessaire.

Les emplacements des clés sont dans le fichier /etc/apache2/sites-available/tuto-dev-web.fr-le-ssl.conf

#9 Mon fichier de configuration pour vsFTPd open

Politique de confidentialité

Mentions Légales