« Serveur sftp +rssh+chroot » : différence entre les versions

Aller à la navigation Aller à la recherche
m
aucun résumé des modifications
mAucun résumé des modifications
Ligne 1 : Ligne 1 :
= Présentation  =
= Présentation  =


sftp est un programme similaire à ftp, mais au dessus d'un tunnel ssh. Il a donc toutes les fonctionnalité de ftp, mais avec la sécurité de ssh en plus (cryptage des logins, mots de passe et des transferts de données).<br>  
sftp est un programme similaire à ftp, mais au dessus d'un tunnel ssh. Il a donc toutes les fonctionnalités de ftp, mais avec la sécurité de ssh en plus (cryptage des logins, mots de passe et des transferts de données).<br>  


*Côté serveur: le serveur sftp est fourni par openssh-server.Pour plus de sécurité, nous le coupleront avec rssh, un shell réduit qui ne permettra aux clients connectés à notre serveur de ne faire que du sftp. De plus, nous allons créer un chroot, une technique qui va "enfermer" les clients dans un dossier de notre serveur. Aucune de leurs actions ne pourront avoir de conséquences à l'extérieur de ce dossier.<br>  
*Côté serveur: le serveur sftp est fourni par openssh-server.Pour plus de sécurité, nous le couplerons avec rssh, un shell réduit qui ne permettra aux clients connectés à notre serveur de ne faire que du sftp. De plus, nous allons créer un chroot, une technique qui va "enfermer" les clients dans un dossier de notre serveur. Aucune de leurs actions ne pourront avoir de conséquences à l'extérieur de ce dossier.<br>  
*Côté client:Afin d'utiliser un serveur sftp, le client doit avoir un client sftp (sftp en ligne de commande ou filezilla).<br>
*Côté client:Afin d'utiliser un serveur sftp, le client doit avoir un client sftp (sftp en ligne de commande ou filezilla).<br>


= Installation de openssh-server et rssh =
= Installation de openssh-server et rssh =


On va tout simplement les installer avec aptitude, qui s'occupera d'installer les dépendances:  
On va tout simplement les installer avec aptitude, qui s'occupera d'installer les dépendances :  


  #aptitude install openssh-server rssh  
  #aptitude install openssh-server rssh  
Ligne 14 : Ligne 14 :
=== Configuration du serveur ssh  ===
=== Configuration du serveur ssh  ===


Le fichier de configuration est: /etc/ssh/sshd_config.<br>  
Le fichier de configuration est : /etc/ssh/sshd_config.<br>  


*Tout d'abord, changeons le port d'écoute par défaut (le 22), et mettons, par exemple, le 666. De cette manière, on évitera les robots qui scannent le net à la recherche de serveurs.
* Tout d'abord, changeons le port d'écoute par défaut (le 22), et mettons, par exemple, le 666. De cette manière, on évitera les robots qui scannent le net à la recherche de serveurs.


  # What ports, IPs and protocols we listen for
  # What ports, IPs and protocols we listen for
   Port 666
   Port 666


Remarque: N'oubliez pas d'ouvrir le port dans votre firewall, et de rediriger le port de votre routeur ( si vous êtes derrière un routeur) vers votre serveur.
Remarque: N'oubliez pas d'ouvrir le port dans votre firewall, et de rediriger le port de votre routeur (si vous êtes derrière un routeur) vers votre serveur.


*Dans la section authentification, on interdit la connection en tant que root:
* Dans la section authentification, on interdit la connexion en tant que root :


  # PermitRootLogin no
  # PermitRootLogin no


*Inutile dans notre cas d'activer le X11forwarding
* Inutile dans notre cas d'activer le X11forwarding :


  #X11Forwarding no
  #X11Forwarding no
Ligne 33 : Ligne 33 :
=== Configuration de rssh ===
=== Configuration de rssh ===


L'intérêt de rssh est de donner à chaque utilisateur du serveur un shell réduit. Dans notre cas, ce shell sera réduit à sftp, c'est à dire à ttes les commandes dispensées par sftp&nbsp;:  
L'intérêt de rssh est de donner à chaque utilisateur du serveur un shell réduit. Dans notre cas, ce shell sera réduit à sftp, c'est à dire à toutes les commandes dispensées par sftp&nbsp;:  


   cd path                    Change remote directory to 'path'
   cd path                    Change remote directory to 'path'
Ligne 62 : Ligne 62 :
  &nbsp;?                          Synonym for help
  &nbsp;?                          Synonym for help


Le fichier de configuration est /etc/rssh.conf Remplaçons celui créé lors de l'installation:  
Le fichier de configuration est /etc/rssh.conf. Remplaçons celui créé lors de l'installation :  


  # mv rssh.conf rssh.conf.old  
  # mv rssh.conf rssh.conf.old  
Ligne 77 : Ligne 77 :
L'intérêt est que ces utilisateurs verront /home/sftp comme racine, et ne pourront agir que dans celui-là (et uniquement avec les commandes fournies par sftp, étant donné qu'on leur donnera comme shell rssh).<br>  
L'intérêt est que ces utilisateurs verront /home/sftp comme racine, et ne pourront agir que dans celui-là (et uniquement avec les commandes fournies par sftp, étant donné qu'on leur donnera comme shell rssh).<br>  


*copie des binaires et de leur dépendances
* copie des binaires et de leur dépendances


Il va donc falloir installer dans le chroot la commande sftp et ses dépendances, ainsi que sftp-server.<br> On va, pour ce faire, utiliser le script copie_binaire:  
Il va donc falloir installer dans le chroot la commande sftp et ses dépendances, ainsi que sftp-server.<br> On va, pour ce faire, utiliser le script copie_binaire :  


  #!/bin/bash
  #!/bin/bash
Ligne 87 : Ligne 87 :
  done
  done


Ce script permet de copier un binaire et ses dépendances (et permet d'éviter de tout faire avec ldd et cp "à la main").<br> Copions donc sftp de la manière suivante:  
Ce script permet de copier un binaire et ses dépendances (et permet d'éviter de tout faire avec ldd et cp "à la main").<br> Copions donc sftp de la manière suivante :  


  #./copie_binaire /usr/bin/sftp /home/sftp
  #./copie_binaire /usr/bin/sftp /home/sftp


Voila, sftp et ses dépendances sont dans /home/sftp (plus précisément dans /home/sftp/usr et /home/sftp/lib).<br>
Voilà, sftp et ses dépendances sont dans /home/sftp (plus précisément dans /home/sftp/usr et /home/sftp/lib).<br>
Il faut en plus copier libnss-file.so.2:  
Il faut en plus copier libnss-file.so.2 :  


  #cp /lib/libnss-file.so.2 /home/sftp/lib
  #cp /lib/libnss-file.so.2 /home/sftp/lib
   
   


*création de /dev/null dans le chroot
* création de /dev/null dans le chroot


Pour le bon fonctionnement de sftp, il est nécessaire d'avoir un dev/null dans le chroot:  
Pour le bon fonctionnement de sftp, il est nécessaire d'avoir un dev/null dans le chroot :  


  #mknod dev/null c 1 3  chmod 666 dev/null
  #mknod dev/null c 1 3  chmod 666 dev/null


*Placer le setuid sur le rssh_chroot_helper
* Placer le setuid sur le rssh_chroot_helper


  #chmod u+s /usr/lib/rssh/rssh_chroot_helper
  #chmod u+s /usr/lib/rssh/rssh_chroot_helper


*Ajouter ligne chrootpath /home/sftp dans rssh.conf
* Ajouter ligne chrootpath /home/sftp dans rssh.conf


  # echo 'chrootpath = "/home/sftp"' &gt;&gt; /etc/rssh.conf
  # echo 'chrootpath = "/home/sftp"' &gt;&gt; /etc/rssh.conf


Bon, le chroot est prêt, ne manque plus que les clients...
Bon, le chroot est prêt, ne manquent plus que les clients...


= Création des utilisateurs =
= Création des utilisateurs =


*Créons l'utilisateur machin, futur client de notre serveur (en n'oubliant pas de lui donner comme shell rssh)
* créons l'utilisateur machin, futur client de notre serveur (en n'oubliant pas de lui donner comme shell rssh)


  #adduser machin --shell /usr/bin/rssh
  #adduser machin --shell /usr/bin/rssh
Ligne 121 : Ligne 121 :
On vous demande un mot de passe pour cet utilisateur, mettez-en un "béton", sinon tout ce qui est fait côté "sécu" ne sert à rien.  
On vous demande un mot de passe pour cet utilisateur, mettez-en un "béton", sinon tout ce qui est fait côté "sécu" ne sert à rien.  


*ajoutons cet utilisateur dans le fichier passwd du chroot
* ajoutons cet utilisateur dans le fichier passwd du chroot


  #grep machin /etc/passwd &gt; /home/sftp/etc/passwd
  #grep machin /etc/passwd &gt; /home/sftp/etc/passwd
Ligne 129 : Ligne 129 :
=== en local ===
=== en local ===


Testons tout ça directement sur le serveur:  
Testons tout ça directement sur le serveur :  


  $ sftp machin@localhost
  $ sftp machin@localhost
Ligne 143 : Ligne 143 :
=== en cas de problèmes ===
=== en cas de problèmes ===


*Vérifier la création du chroot  
* vérifier la création du chroot  
*le port est-il ouvert sur le firewall&nbsp;?  
* le port est-il ouvert sur le firewall&nbsp;?  
*les utilisateurs créés sont ils bien dans le passwd du chroot&nbsp;?
* les utilisateurs créés sont ils bien dans le passwd du chroot&nbsp;?


= Les logs  =
= Les logs  =
Ligne 154 : Ligne 154 :
  establish a logging socket inside the chroot directory.
  establish a logging socket inside the chroot directory.


d'où, comme le dit man syslogd:  
d'où, comme le dit man syslogd :  


  -a socket: Using this argument you can specify additional sockets from that syslogd has to listen to.
  -a socket: Using this argument you can specify additional sockets from that syslogd has to listen to.
Ligne 164 : Ligne 164 :
  #/etc/init.d/sysklogd restart
  #/etc/init.d/sysklogd restart


Bon, c'est bon, on va avoir des logs, mais ils seront plus lisibles, si on créé un fichier de log pour sftp. Pour cela, on édite /etc/ssh/sshd_config , pour y faire apparaître les lignes  
Bon, c'est bon, on va avoir des logs, mais ils seront plus lisibles, si on crée un fichier de log pour sftp. Pour cela, on édite /etc/ssh/sshd_config , pour y faire apparaître les lignes :


  # Logging
  # Logging
Ligne 174 : Ligne 174 :
  Subsystem sftp /usr/lib/openssh/sftp-server -f LOCAL7 -l INFO
  Subsystem sftp /usr/lib/openssh/sftp-server -f LOCAL7 -l INFO


Puis, éditer syslog.conf, pour y ajouter les lignes:  
Puis, éditer syslog.conf, pour y ajouter les lignes :  


  local7.info /var/log/sftp
  local7.info /var/log/sftp
  local6.info /var/log/sftp_connexion
  local6.info /var/log/sftp_connexion


Et voila, vous pouvez consulter les logs de transferts de fichiers dans /var/log/sftp, et les logs de connexions dans /var/log/sftp_connexion.
Et voilà, vous pouvez consulter les logs de transferts de fichiers dans /var/log/sftp, et les logs de connexions dans /var/log/sftp_connexion.
=Côté client: Filezilla=
=Côté client: Filezilla=
===Configuration===
===Configuration===
5

modifications

Menu de navigation