Aller au contenu

Serveur FTP/FTPS Linux

Le serveur FTP est un service qui sert à déposer et télécharger des fichiers sur une machine à distance. Il est aujourd’hui largement remplacé par le FTPS.

I. Installation de FTP (VSFTPD)

1. Télécharger le paquet vsftpd
sudo apt install vsftpd
2. Se placer dans le dossier etc et éditer le fichier de configuration
cd /etc
sudo cp vsftpd.conf vsftpd.conf.default

ls | grep vsft
-rw-r--r--  1 root       root        4593 Jan 22 05:58 vsftpd.conf
-rw-r--r--  1 root       root        4593 Jan 22 06:04 vsftpd.conf.default
nano vsftpd.conf
3. Modifiez ces lignes afin d’autoriser les utilisateurs locaux et de les cloisonner dans leur dossier
# pas d'accès anonyme
anonymous_enable=NO
# autorise les comptes locaux (dans /etc/passwd)
local_enable=YES
# autorise l'écriture dans les répertoires
write_enable=YES 
# cloisonne les utilisateurs
chroot_local_user=YES 
4. (Optionnel) Activez le jeu de caractères ASCII
# ASCII mangling is a horrible feature of the protocol.
ascii_upload_enable=YES
ascii_download_enable=YES
5. Activez le ls recurse
# You may activate the "-R" option to the builtin ls. This is disabled by
# default to avoid remote users being able to cause excessive I/O on large sites
ls_recurse_enable=YES
6. Personnalisez le texte de connexion au serveur 
ftpd_banner=Bienvenue sur le serveur FTP du futur.
7. Activez le service et redémarrez le serveur
systemctl enable vsftpd.service
systemctl restart vsftpd

II. Création d'un utilisateur NoLogin

sudo useradd -d /var/www/users/utilisateur -s /usr/sbin/nologin utilisateur
sudo passwd utilisateur
su utilisateur
Password:
This account is currently not available.
  •  Ajouter la ligne suivante au fichier /etc/shells
sudo nano /etc/shells

/usr/sbin/nologin
  • Créer les dossiers de l’utilisateur
sudo mkdir /var/www
sudo mkdir /var/www/users
sudo mkdir /var/www/users/utilisateur
sudo mkdir /var/www/users/utilisateur/FTP
  • Donner les droits à l’utilisateur utilisateur sur son dossier de données uniquement 
sudo chown utilisateur /var/www/users/utilisateur/FTP
  • Vérifier
tree -u
.
└── [root    ]  utilisateur
    ├── [utilisateur   ]  FTP

III. Connexion au FTP

1. Se connecter en FTP via la commande suivante : 
ftp xxx.xxx.xxx.xxx
2. Entrer ensuite son identifiant et mot de passe pour se connecter au serveur, si tout est bon vous devriez avoir ce résultat et vous pouvez commencer à lister, télécharger ou bien uploader des fichiers sur le serveur.
ftp 192.2.32.150

Connecté à 192.2.32.150.
220 Bienvenue sur le FTP du futur.
200 Always in UTF8 mode.
Utilisateur (192.2.32.150:(none)) : utilisateur
331 Please specify the password.
Mot de passe :
230 Login successful.
3. Résultat avec FileZilla, l’utilisateur est bien coincé dans son dossier.
d2dec302 3891 4131 9fd2 16e7942ef129

IV. Chiffrer le serveur avec SSL/TLS

Pour créer un certificat il faut le paquet openssl
1. Créer la clé avec la commande suivante (avec -days on donne le nombre de jour avant expiration)
 sudo openssl req -new -x509 -days 365 -nodes -out /etc/ssl/private/vsftpd.cert.pem -keyout /etc/ssl/private/vsftpd.key.pem
2. Une fois la commande lancée, on va nous demander des information, elles ne sont pas obligatoire mais ça fait plus pro
3. Il faut donner les drois à root sur les certificats qui ont été créés
sudo chown root:root /etc/ssl/private/vsftpd.cert.*
sudo chmod 600 /etc/ssl/private/vsftpd.cert.*
4. Il faut ajouter ces lignes au fichier de configuration vsftpd.conf
# Certificats
rsa_cert_file=/etc/ssl/private/vsftpd.cert.pem
rsa_private_key_file=/etc/ssl/private/vsftpd.key.pem

# Turn on SSL
ssl_enable=YES

# Allow anonymous users to use secured SSL connections
allow_anon_ssl=NO 

# All non-anonymous logins are forced to use a secure SSL connection
force_local_data_ssl=NO 

# All non-anonymous logins are forced to use a secure SSL connectionin in order to send the password.
force_local_logins_ssl=YES

# Permit TLS v1 protocol connections. TLS v1 connections are preferred
ssl_tlsv1=YES
ssl_sslv2=NO
ssl_sslv3=NO

# Disable SSL session reuse (required by WinSCP)
require_ssl_reuse=NO

# Select which SSL ciphers vsftpd will allow for encrypted SSL connections (required by FileZilla)
ssl_ciphers=HIGH
5. On peut relancer le service
sudo service vsftpd reload 
Résultat :
Statut : Connexion à xxx.xxx.xxx.xxx:21…
Statut : Connexion établie, attente du message d’accueil…
Statut : Initialisation de TLS…
Statut : Connexion TLS établie.
Statut : Connecté
Statut : Récupération du contenu du dossier…
Statut : Contenu du dossier « / » affiché avec succès

V. Connexion depuis l’exterieur

  • Ouvrir le fichier de configuration vsftpd.conf et y ajouter ces lignes
# Passive mode

pasv_enable=YES
pasv_promiscuous=NO
pasv_min_port=40000
pasv_max_port=40100
# pasv_address=xxx.xxx.xxx.xxx ou domaine.com avec pasv_addr_resolve=YES
port_promiscuous=NO

pasv_enable → Utilisez cette option pour activer le mode passif.

pasv_promiscuous → Si vous voulez désactiver le contrôle de sécurité PASV qui assure que la connexion de données provienne de la même adresse IP que le contrôle de connexion. Utilisez si vous savez ce que vous faites! Le seul usage légitime à cela est dans un environnement de tunnels sécurisés, ou peut-être pour faciliter l’utilisation de FXP. Défaut: NO

pasv_address → Utilisez cette option pour écraser l’adresse IP à laquelle vsftpd répondra à la commande PASV. Fournissez une adresse IP numérique.
[On peut toutefois lui donner un nom de domaine en lui ajoutant l’option de résolution DNS: pasv_addr_resolve=YES.]
Cette option est par défaut à NON: L’adresse est reprise de la précédente socket .

port_promiscuous → Utilisez cette option si vous voulez désactiver le PORT contrôle de sécurité qui garantit que les connexions de données sortantes peuvent uniquement se connecter au client. A modifier si vous savez ce que vous faites! Défaut: NO

pasv_min_port et pasv_max_port → Correspondent respectivement au port d’écoute mini et maxi du serveur ftp en mode passif (les valeurs saisies ici sont arbitraires, vous pouvez en saisir d’autres). Cette plage de port doit être ouverte sur votre pare-feu (udp et tcp) et redirigée vers votre serveur FTP.

  • Il faut ensuite ouvrir les ports de la machine
sudo ufw allow proto tcp to any port 40000:40100
sudo ufw allow proto udp to any port 40000:40100

Quelques commandes utiles

Pour uploader un fichier
put
Pour télécharger un fichier
get
Pour uploader plusieurs fichiers
mput *.xls
Pour changer son dossier par défaut
lcd /home/example
Pour afficher les logs du FTP
sudo tail -f /var/log/vsftpd.log