Comment j'ai fait mon serveur ftp sécurisé

Bonjour à tous,
Je vous propose la mise en place d’un serveur ftp.
Avec ce serveur, chacun a un espace personel et un partagé
commençons par installer vsftpd et openssl:

[code]$ su

apt-get install vsftpd openssl[/code]

le serveur ftp sécurisé a besoin d’un certificat. On le crée avec les commandes suivantes:

[code]# openssl req -x509 -nodes -days 365 -newkey rsa:1024 -keyout vsftpd.pem -out vsftpd.pem

mv vsftpd.pem /etc/ssl/certs

chown root:root /etc/ssl/certs/vsftpd.pem

chmod 600 /etc/ssl/certs/vsftpd.pem[/code]

nous allons produire le fichier de configuration. Je me suis aidé de la page manuel vsftpd.conf. J’y ai omit les options qui ont une valeur par défaut qui me convient.

pour éditer ce fichier:

[code]$ su

sudo gedit /etc/vsftpd.conf[/code]

par exemple:

[code]async_abor_enable=YES
debug_ssl=YES
delete_failed_uploads=YES
dirlist_enable=YES
download_enable=YES
local_enable=YES
listen=YES
require_ssl_reuse=NO
ssl_enable=YES
strict_ssl_read_eof=YES
userlist_deny=NO
userlist_file=/etc/vsftpd.userlist
userlist_enable=YES
validate_cert=NO
write_enable=YES
local_umask=0111
connect_from_port_20=YES
listen_port=21
chroot_local_user=YES
chroot_list_file=/etc/vsftpd.chroot_list
ssl_ciphers=HIGH
require_ssl_reuse=NO
allow_anon_ssl=NO
force_local_data_ssl=YES
force_local_logins_ssl=YES
ssl_tlsv1=YES
ssl_sslv2=NO
ssl_sslv3=NO

xferlog_enable=YES
xferlog_std_format=YES

ftpd_banner="Bienvenu chez ******"
rsa_cert_file=/etc/ssl/certs/vsftpd.pem
secure_chroot_dir=/var/run/vsftpd/empty

pasv_address=
pasv_min_port=40000
pasv_max_port=40010
pasv_promiscuous=YES
pasv_enable=YES
[/code]
les option “chroot_local_user=YES” et “chroot_list_file=/etc/vsftpd.chroot_list” indiquent le fichier /etc/vsftpd.chroot_list où l’on y trouve les utilisateur locaux qui ne seront pas enfermé dans leur dossier personel. Avant de créer les utilisateurs qui pourrons se logger, nous allons créer le fichier /etc/vsftpd.chroot_list avec la commande cut (si on le fait après, il y aura des utilisateurs qui pourrons sortir de leur dossier personel):

pour faire les utilisateurs, j’ai écris ce script qui ajoute un utilisateur au système. Pour en créer plusieus, utilisez une boucle for:

ce script attribue aux utilisateur le shell /bin/false. Il faut donc l’ajouter dans le fichier /etc/shells (mettez bien >> et non pas > sinon le fichier sera effacé):

nous allons créer un utilisateur pour avoir un dossier à se partager entre les utilisateurs du serveur:

[code]# adduser commun

usermod -s /bin/false commun

chmod -R 755 /home/commun

mkdir /home/commun/pub

chmod 777 /home/commun/pub

chown commun:commun -R /home/commun

[/code]
voici le script:

#!/bin/bash if [ $USER = "root" ]; then if [ "$1" != "" ]; then adduser "$1" usermod -s /bin/false "$1" chown root:root /home/"$1" mkdir /home/"$1"/commun chown commun:commun /home/"$1"/commun chmod 755 /home/"$1"/commun mkdir /home/"$1"/mesfichiers chown "$1":"$1" /home/"$1"/mesfichiers chmod 755 /home/"$1"/mesfichiers echo "$1" >> /etc/vsftpd.userlist echo "/home/commun /home/"$i"/commun auto bind,defaults 0 0" >> /etc/fstab mount /home/"$i"/commun else echo "indiquez le nom de l'utilisateur en parametre" fi else echo "script à éxecuter par root" fi
pour rendre le script éxecutable:

Dans le fichier /etc/vsftpd.conf de mon exemple, les ports utilisés vont de 40000 à 40010. Il faudra donc ouvrir la plage de ports 40000 à 40010. De quelle manière? cela dépend de votre fournisseur d’accès, ou de votre materiel. Si Vous êtes chez free, il vous faudra vous rendre sur la page de votre compte, choisir l’onglet freebox, gérer le routeur freebox, redirection. indiquez la plage 40000 à 40010, redirigez-la vers l’adresse ip privé où se trouve votre serveur ftp, cliquez sur le plus, cliquez sur enregistrer et redémarrez votre freebox. Pour que cette adresse soit toujours la même, faite un bail dhcp permanent. Vous obtiendrez l’adresse mac avec la commande ifconfig.
on va bientôt lancer le serveur ftp. Avant cela, vérifions que nous avons bien le réseau:

arrêter avec ctrl+c
si vous n’avez pas de réseau:

Nous pouvons maintenant lancer le serveur ftp:

si vous voulez utiliser ftp-ssl, il faudra le lancer en mode passif avec l’argument -p:

Vous pouvez visualiser les connexions en temps réel avec la commande ps en argument de watch:

vous pouvez aussi voir qui a téléchargé quoi avec le fichier xferlog (sous root):

vous trouverez la syntaxe de ces lignes ici: http://www.castaglia.org/proftpd/doc/xferlog.html

et voila…

Je n’ai fait que parcourir mais quand on parle de “sécurité”, en principe, on évite ce genre de lignes :

c’est un dossier monté dans le dossier personnel qui doit être accessible par tous ceux qui ont un compte sur mon serveur.

mais sinon, j’ai une idée: créer un groupe pour ces utilisateur et chmod 770. Qu’en pensez-vous?

Loin de moi l’idée de critiquer cette initiative, je me posais juste la question de l’intérêt du ftp devant le sftp? J’ai d’ailleurs un tuto sur le sujet qui traine sur mon serveur, actuellement down pour cause de déménagement si ça en intéresse certains.

[quote=“matser”]c’est un dossier monté dans le dossier personnel qui doit être accessible par tous ceux qui ont un compte sur mon serveur.

mais sinon, j’ai une idée: créer un groupe pour ces utilisateur et chmod 770. Qu’en pensez-vous?[/quote]
C’est ce à quoi je pensais.
Par principe, sans rares exceptions, je ne me sers jamais du 777.
Les groupes ont été fait pour ça.

@ Thuban :
Oui, je le pensais aussi avec le tuto de Yanlolot, que j’ai utilisé longtemps.
https://www.debian-fr.org/serveur-sftp-shell-reduit-rssh-et-chroot-t27796.html

voici ce que j’ai fait:
le dossier pub appartient à commun:commun. J’ai ajouté les utilisateurs au groupe commun, puis chmod 770 sur le dossier pub
en regardant un peu le tuto indiqué, je vois que c’est pour faire du sftp. Mon tuto est pour faire du ftps, ce n’est pas pareil.
ce n’est pas du pur ftp, il y a la couche ssl/tls dans ce serveur. Dans filezilla, on n’accède pas à mon serveur en remplissant les champs host user password. On y accède par le gestionnaire de site. On doit choisir tls explicite, demander mot de passe et dans l’onglet type de transfert, on doit choisir le mode passif. Lors du login, il y a des transaction en tls et ssl

Statut : Connexion à 78.227.84.43:21... Statut : Connexion établie, attente du message d'accueil... Réponse : 220 "Bienvenu chez ******" Commande : AUTH TLS Réponse : 234 Proceed with negotiation. Statut : Initialisation de TLS... Statut : Vérification du certificat... Commande : USER moi Statut : Connexion TLS/SSL établie. Réponse : 331 Please specify the password. Commande : PASS ********** Réponse : 230 Login successful. Commande : SYST Réponse : 215 UNIX Type: L8 Commande : FEAT Réponse : 211-Features: Réponse : AUTH TLS Réponse : EPRT Réponse : EPSV Réponse : MDTM Réponse : PASV Réponse : PBSZ Réponse : PROT Réponse : REST STREAM Réponse : SIZE Réponse : TVFS Réponse : UTF8 Réponse : 211 End Commande : OPTS UTF8 ON Réponse : 200 Always in UTF8 mode. Commande : PBSZ 0 Réponse : 200 PBSZ set to 0. Commande : PROT P Réponse : 200 PROT now Private. Statut : Connecté Statut : Récupération du contenu du dossier... Commande : PWD Réponse : 257 "/" Commande : TYPE I Réponse : 200 Switching to Binary mode. Commande : PASV Réponse : 227 Entering Passive Mode (78,227,84,43,156,71). Commande : LIST Réponse : 150 Here comes the directory listing. Réponse : 226 Directory send OK. Statut : Contenu du dossier affiché avec succès
qu’en pensez-vous?

voici les commandes pour créer commun:

[code]# adduser commun

usermod -s /bin/false commun

chmod -R 755 /home/commun

mkdir /home/commun/pub

chmod 770 /home/commun/pub

chown commun:commun -R /home/commun

[/code]
voici aussi le script modifié pour mettre les nouveaux utilisateurs dans le groupe “commun”

#!/bin/bash if [ $USER = "root" ]; then if [ "$1" != "" ]; then adduser "$1" usermod -a -G commun -s /bin/false "$1" chown root:root /home/"$1" mkdir /home/"$1"/commun chown commun:commun /home/"$1"/commun chmod 755 /home/"$1"/commun mkdir /home/"$1"/mesfichiers chown "$1":"$1" /home/"$1"/mesfichiers chmod 755 /home/"$1"/mesfichiers echo "$1" >> /etc/vsftpd.userlist echo "/home/commun /home/"$i"/commun auto bind,defaults 0 0" >> /etc/fstab mount /home/"$i"/commun else echo "indiquez le nom de l'utilisateur en parametre" fi else echo "script à éxecuter par root" fi

petite correction:
dans ce script, il faut remplacer “$i” par “$1”

#!/bin/bash if [ $USER = "root" ]; then if [ "$1" != "" ]; then adduser "$1" usermod -a -G commun -s /bin/false "$1" chown root:root /home/"$1" mkdir /home/"$1"/commun chown commun:commun /home/"$1"/commun chmod 755 /home/"$1"/commun mkdir /home/"$1"/mesfichiers chown "$1":"$1" /home/"$1"/mesfichiers chmod 755 /home/"$1"/mesfichiers echo "$1" >> /etc/vsftpd.userlist echo "/home/commun /home/"$1"/commun auto bind,defaults 0 0" >> /etc/fstab mount /home/"$1"/commun else echo "indiquez le nom de l'utilisateur en parametre" fi else echo "script à éxecuter par root" fi

Moi, ce qui me gène, c’est ça:

[code]$ su

sudo gedit /etc/vsftpd.conf[/code]

Si tu fais un su (sous entendu su root), inutile de faire un sudo ensuite, d’ailleurs pour se substituer à quel utilisateur ?
Mais surtout, il y a beaucoup plus propre en utilisant la commande gksu si tu veux modifier un fichier système avec gedit.

Salut,

Auriez vous TOUS oublié que nous avons un wiki pour ce genre de recettes :041

[quote=“ggoodluck47”]Salut,

Auriez vous TOUS oublié que nous avons un wiki pour ce genre de recettes :041[/quote]

SOS wiki admin not found! :033

gedit ne fonctionne pas quand on est root. On doit lui mettre sudo pour qu’il démarre

Salut,

C’est à ça que sert gksu et kdesu :slightly_smiling:

Re,

[quote]
SOS wiki admin not found! :033[/quote]

Ce qui en clair, veut dire ?

[quote=“ggoodluck47”][quote]
SOS wiki admin not found! :033[/quote]

Ce qui en clair, veut dire ?[/quote]
Que lol n’est plus dans le coin depuis un moment déjà.
Je dois le contacter au sujet du Wiki, mais j’ai manqué de temps ces derniers jours. Je vais essayer de faire ça dans la semaine.

Créer un ftp sécurisé, ça ressemble plutôt à cela, non ? Hihi

aptitude install openssh-sftp-server


je ne fait pas un serveur  sftp (ssh) mais un serveur ftps (accessible avec un client ftp, comme filezilla), je l'ai dis plus haut, ce n'est pas pareil!

je ne fait pas un serveur sftp (ssh) mais un serveur ftps (accessible avec un client ftp, comme filezilla), je l’ai dis plus haut, ce n’est pas pareil!

[quote]
ce n’est pas pareil![/quote]
Ha ben c’est sur qu’au niveau sécurité, ce n’est pas pareil :slightly_smiling:

L’un se base sur de la confiance envers un pair, l’autre se base généralement sur la confiance que tu as envers une miriade d’entreprises privées et d’agences gouvernementales.

Difficile de faire un choix … :troll:

Ce n’est pas non plus du ftp, c’est du ftps :018 . On a pas tous accès à mon serveur. Pour cela, il faut être inscrit dans le fichier /etc/vsftpd.userlist
les utilisateurs qui apparaissent dans ce fichier ont chacun un nom et un mot de passe. En utilisant filezilla, ils n’arriveront à rien du tout si il tape l’adresse ip dans la boite hôte. Il devront plutôt ouvrir le gestionnaire de site, en ajouter un, donner l’ip, option “demander un mot de passe”, tls explicite, mode passif, encodage utf8 et ensuite cliquer sur “connexion” puis donner son mot de passe.