MySecureShell : Transformer le serveur Sftp d’OpenSSH (Chroot Jail)

Longtemps j’ai rêvé de transformer le serveur OpenSSH et son serveur SFTP intégré, en un véritable serveur de fichiers sécurisé et crypté. Mais la notion de « chroot jail » m’était incontournable et pas toujours facile à faire fonctionner à la mimine. L’administration de tout cela était bien trop lourde et fort peu adapté à un environnement de production. Comme souvent dans le libre c’est la rencontre d’un monsieur tuX qui me pris la main et vient tout changer : il me parla de MySecureShell. A moi aujourd’hui d’en faire la visite guidée.

A propos :

MySecureShell (MSS) est un logiciel libre s’appuyant sur le cryptage très poussé de SSH et sur son ftp sécurisé « sftp-server ». MySecureShell est un shell qui va permettre d’ajouter plusieurs fonctionnalités à sftp-server et qui va se rapprocher des grands serveurs ftp tel que ProFtpd. Les avantages de MySecureShell sont qu’il s’appuie sur le protocole très sécurisé SSH et qu’il permet un cryptage complet des données et des requêtes émises. Il est très simple à installer, à utiliser et hautement configurable.

Ce qui me frappa à l’époque :

- chrootage (ça c’était le minimum)
- interface graphique avec outils pour administration du serveur (voir les utilisateurs connectés, kickage d’utilisateurs, gestion et limitation de la bande passante… > même si on peut très bien faire ça en ligne de commandes, c’est bien sympa de faire ça en graphique)
- et pis ça a l’air assez simple à mettre en place…

Installation (au hasard sur une Lenny pour fêter sa sortie en version stable) :

Pré requis OpenSSH serveur :

apt-get install openssh-server

Ajouter le dépôt de MySecureShell dans votre source.list :

deb http://mysecureshell.free.fr/repository/debian testing main
deb-src http://mysecureshell.free.fr/repository/debian testing main

apt-get update && apt-get install mysecureshell

Preparation des utilisateurs:

Pour transformer un utilisateur existent, ici mimuf, et lui affecter le nouveau Shell MySecureShell, taper cette commande :

usermod -s /bin/MySecureShell mimuf

Pour créer un nouvel utilisateur de notre serveur MySecureShell, ici manji, puis initialiser son mot de passe, taper les commandes suivantes :


useradd -m -s /bin/MySecureShell manji
passwd manji

Pour éviter toute confusion exotique due au nommage de MySecureShell :

ln –s /bin/MySecureShell /bin/mysecureshell

Vérifier le lancement de MySecureShell au démarrage du système pour les runlevel par défault :

Update-rc.d –f mysecureshell defaults

Configuration de MySecureShell:

Toute la configuration du serveur s’effectue dans le seul fichier sftp_config. On peut ici configurer la bande passante par défaut par groupe, limiter le service à un sous réseau, limiter les connexions maximums du serveur ou par utilisateur, accorder un shell au utilisateur de confiance….bref, regarder les exemples dans le fichier :

vim /etc/ssh/sftp_config

Pour vérifier que tout est bien ok après la modification de ce fichier, taper la commande :

mysecureshell --configtest

Enfin, pour que MySecureShell prenne bien en compte les modifications, préférer l’une de ces deux commande :

sftp-state fullstop && sftp-state start

ou

/etc/init.d/mysecureshell restart

Les outils en ligne de commande de MySecureShell :

Pour savoir si le serveur est bien démarré, taper la commande :

sftp-state

Vérifier que la configuration du serveur MySecureShell est bien OK, taper la commande :

sftp-verif

Pour voir le nombre d’utilisateurs connectés et qui fait quoi ? Par exemple pour voir Manji uploader une image debian-testing, taper la commande :

sftp-who

Pour « kicker » manji (non mais…), taper la commande :

sftp-kill manji

Pour afficher la liste des utilisateurs MySecureShell, taper la commande :

sftp-user list

L’outil d’administration en ligne de commande (light) :

Afin de pouvoir l’utiliser, il faut donner les droits d’administration à un utilisateur. Pour ma part, j’ai crée un groupe sftp-administrator et ajouté l’utilisateur feilong à ce groupe :

groupadd sftp-administrator
addgroup feilong sftp-administrator

puis décommenter ceci au fichier /etc/ssh/sftp-config :


IsAdmin true
VirtualChroot false
StayAtHome true
IdleTimeOut 0

Relancer MySecureShell :

sftp-state fullstop && sftp-state start

Vérifier que votre utilisateur a bien les droits d’administration du serveur sftp avec la commande :

sftp-admin feilong@localhost

puis faire :

> help

L’outil d’administration graphique réunissant tous les outils ci-dessus et plus encore

Attention puristes passez votre chemin, l’outil d’administration graphique de MySecureShell est basé sur l’immonde Java. Par contre, force est de constater que l’outil est très confortable, portable et permet de modifier la configuration du fichier sftp_config de manière graphique.

Il faut tout d’abord installer Java :

apt-get install sun-java6-jre

Puis le jarjar sur sourceforge :

http://sourceforge.net/project/showfiles.php?group_id=117807&package_id=156080&release_id=640438

Ensuite il ne reste plus qu’à lancer l’outil :

java –jar sftp-mss.jar

Dans connexion distante, entrer les informations relatives à la connexion, serveur / login admin et mot passe. Et après que c’est beau.

Plugin Nagios :Etre alerté lors d’une connexion cliente.

Afin de ne pas rester sur place pour vérifier les connexions, le plugin nagios check_mss_users va nous servir à être alerté lors de connexion(s) cliente(s). Télécharger le plugin :

http://sourceforge.net/project/showfiles.php?group_id=117807&package_id=255649&release_id=593900

Par défaut ce plugin en perl permet d’alerter en cas d’atteinte du seuil de connexion maximum autorisé dans la configuration de MySecureShell. Pour ma part, le simple fait d’avoir une connexion active sur le serveur devait me remonter un statut warning et critique si on avait 9 connexions actives sur 10 autorisées. Pour se faire j’ai modifié ces paramètres en dur dans le fichier (car en les passant en paramètre il me causait deux erreurs). Modifier les lignes 15 et 16 afin d’ avoir cette configuration:

my $warn_mss_users = 1;
my $crit_mss_users = 10;

Si comme moi, le serveur MySecureShell et le serveur Nagios sont deux serveurs distincts, vous pouvez utiliser la commande « check_by_ssh » configurée dans nagios couplée au plugin « check_mss_users » lancé sur le serveur MySecureShell.

La commande finale exécutée par nagios ressemblera à ça :

$USER1$/check_by_ssh -H mon_serveur_mysecureshell -i le_chemin_vers_ma_clé -l user_pour_login_ssh -C "$USER1$/check_mss_users"

Où la variable $USERS1 est généralement le chemin par défaut /usr/local/nagios/libexec/

Si vous souhaitez mettre en place ce genre de configuration nagios, n’hésitez pas à me contacter.

On a maintenant un serveur opérationnel. Pour aller plus loin quelques liens :

• Site officiel http://mysecureshell.sourceforge.net/fr/
• Forum http://mysecureshell.free.fr
Configuration de Virtual Hosts sftp /etc/ssh/sftp_config
• Sécurité : http://mysecureshell.sourceforge.net/fr/securessh.html

Vus : 4747
Publié par Feilong : 12