Si vous utilisez comme moi EasyEngine/WordOps sur votre serveur, vous souhaitez peut-être proposer un accès via ftp, tout en limitant l’accès aux fichiers d’un site web pour chaque utilisateur.

Pour cela, nous allons installer et configurer proftpd afin que chaque utilisateur ne puisse accéder qu'à son répertoire, sans causer de problèmes de permissions sur les fichiers d'un site. Enfin nous mettrons en place un certificat SSL pour chiffrer les échanges avec le serveur distant.

Installation de profpd

On commence par installer proftpd :

apt-get update && apt-get install proftpd

Puis on modifie la configuration de proftpd :

nano /etc/proftpd/proftpd.conf

Pour empêcher les utilisateurs de remonter dans l'arboresence des fichiers du serveur, il faut de décommenter la ligne suivante en supprimant le # :

DefaultRoot ~

Il est également préférable décommenter l'option RequireValidShell afin de pouvoir ajouter des utilisateurs sans accès ssh :

RequireValidShell off

Enfin, si vous utilisez un pare-feu sur votre serveur, il est nécessaire de décommenter la ligne PassivePorts en définissant une intervalle de ports.

Dans mon exemple, j'ai choisi d'utiliser les ports 49000 à 50000 pour les connexions FTP passives :

PassivePorts 49000 50000

Il suffit ensuite d'autoriser ces ports dans votre pare-feu. Si vous utilisez UFW, il suffit d'utiliser la commande :

ufw allow 49000:50000/tcp

On redémarre ensuite proftpd pour appliquer les modifications :

service proftpd restart

Ajouter un utilisateur

Pour ajouter un utilisateur, il faut définir son dossier home qui correspond au dossier du site web concerné, et l’ajouter au groupe www-data pour qu’il n’y ai pas de problème au niveau des permissions. Remplacez dans la commande suivante le dossier utilisé après --home et le nom de l'utilisateur :

adduser --home /var/www/votredomaine.tld/ --shell /bin/false --ingroup www-data votre-utilisateur

La commande précédente inclut la directive --shell /bin/false, interdisant ainsi l'accès au shell pour le nouvel utilisateur puisque nous avons précédemment définit que l'utilisation du serveur FTP ne nécessitait pas un accès valide au shell.

Enfin pour ajouter les permissions au groupe sur un dossier on utilise :

chmod -R g+rw /var/www/domainname

Votre utilisateur pourra ainsi ajouter ou supprimer des fichiers en se connectant via un client ftp, mais il ne pourra pas accéder à d'autres fichiers que ceux présents dans son répertoire --home et il ne pourra pas se connecter au serveur en SSH.

Configuration TLS

Pour les transferts de fichiers sur internet, le chiffrement, c'est mieux avec. Nous allons donc voir comment configurer proftpd pour en faire un serveur FTPS.

Avec un certificat auto-signé

Un certificat auto-signé n'apparaîtra peut-être pas comme valide, mais vous permettra de bénéficier du chiffrement autant qu'un certificat issue d'une authorité de certificats.

On commence par créer un répertoire pour stocker notre certificat :

mkdir /etc/proftpd/ssl

Puis on génère à l'aide d'OpenSSL notre certificat :

openssl req -new -x509 -days 365 -nodes -out /etc/proftpd/ssl/proftpd.cert.pem -keyout /etc/proftpd/ssl/proftpd.key.pem

Voici le déroulement de la procédure :

root@vps~# openssl req -new -x509 -days 365 -nodes -out /etc/proftpd/ssl/proftpd.cert.pem -keyout /etc/proftpd/ssl/proftpd.key.pem Generating a 2048 bit RSA private key .................+++ ..............+++ writing new private key to '/etc/proftpd/ssl/proftpd.key.pem' ----- You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blank For some fields there will be a default value, If you enter '.', the field will be left blank. ----- Country Name (2 letter code) [AU]:FR State or Province Name (full name) [Some-State]:- Locality Name (eg, city) []: Paris Organization Name (eg, company) [Internet Widgits Pty Ltd]: VirtuBox Organizational Unit Name (eg, section) []:IT Common Name (e.g. server FQDN or YOUR name) []:server.virtubox.net Email Address []:admin@virtubox.net

On s'assure ensuite de définir des permissions correctes sur le certificat et la clé privée :

chmod 600 /etc/proftpd/ssl/proftpd.*

Et on peut alors éditer le fichier /etc/proftpd/tls.conf dont le contenu devra ressembler à :

TLSEngine on TLSLog /var/log/proftpd/tls.log TLSProtocol TLSv1.2 TLSCipherSuite AES128+EECDH:AES128+EDH TLSOptions NoCertRequest AllowClientRenegotiations NoSessionReuseRequired TLSRSACertificateFile /etc/proftpd/ssl/proftpd.cert.pem TLSRSACertificateKeyFile /etc/proftpd/ssl/proftpd.key.pem TLSVerifyClient off TLSRequired on RequireValidShell no </IfModule>

Une fois les modifications enregistrées, il vous suffit de décommenter la ligne

Include /etc/proftpd/tls.conf

dans le fichier /etc/proftpd/protftpd.conf

Vous pouvez ensuite relancer le service proftpd pour appliqer la nouvelle configuration.