Une fois que le système d'exploitation a été sécurisé, il reste important que vous sécurisiez
chacun des services réseau. Dans ce chapitre, vous verrez un exemple de sécurisation
de SSH. OpenSSH est un service réseau qui implémente de la sécurité par défaut pour
se connecter sur un système à distance, exécuter des commandes ou encore échanger des
fichiers. Au delà de ses fonctions de sécurité, il est implémenté en prenant en compte la
sécurité, par exemple de la séparation de privilège.
Améliorez l'authentification
Pour commencer, il est assez simple d'améliorer l'authentification dans SSH. Nombreux
sont les utilisateurs qui se plaignent d'avoir trop de mots de passe à retenir. Une bonne
solution pour éviter cela est de les authentifier par clé et non par mot de passe. Pour cela, il
faut juste désactiver l'authentification par mot de passe et préciser dans la configuration sur
serveur SSH où sont définies les clés publiques des utilisateurs dans le fichier
/etc/ssh/sshd_config .
PasswordAuthentication no
PermitRootLogin no
PermitEmptyPasswords no
AuthorizedKeysFile /etc/ssh/keys/%u
L'utilisateur pourra récupérer sa clé publique (par défaut ~/.ssh/id_dsa.pub ) et la
communiquer à l'administrateur pour qu'il la place dans le répertoire /etc/ssh/keys/ .
Définissez les redirections que vous acceptez
En dehors de l'exécution de commande ou l'échange de fichiers, SSH peut être utilisé
pour rediriger des connexions réseau en les encapsulant dans un tunnel SSH, idem pour des
connexions graphiques X11. Il est également possible d'utiliser un agent qui va relayer la
demande d'authentification. En fonction de votre besoin, vous pouvez ou non les accepter :
X11Forwarding no
PermitTunnel no
GatewayPorts no
AllowTcpForwarding no
AllowAgentForwarding no
Apportez de la flexibilité et de la finesse
Parfois, vous ne pourrez pas purement et simplement désactiver une fonction telle que celles
mentionnées précédemment. En effet, même si la plupart des utilisateurs n'en ont ni le besoin
ni le droit, il est possible que vous ayez juste quelques utilisateurs faisant exception.
Pour ne pas adopter une configuration laxiste globalement juste à cause de quelques
exceptions, vous pouvez utiliser dans la configuration du serveur SSH la directive Match, qui
permettra d'affiner les règles pour un utilisateur, un groupe ou une provenance de
connexion.
Dans l'exemple ci-dessous, l'utilisateur toto n'aura pas le droit de faire de forwarding TCP,
sauf quand il se connecte depuis le poste ayant l'adresse 10.1.2.3.
Match User toto Address 10.1.2.3
AllowTcpForwarding yes
Emprisonnez le SFTP
Si vous utilisez SSH pour l'échange de fichier avec le protocole SFTP, vous voudrez
sûrement que l'utilisateur qui viendra récupérer des fichiers ne puisse pas accéder à l'ensemble
de l'arborescence du système. Pour cela, SSH propose un mécanisme de Chroot pour SFTP.
En pratique, l'utilisateur sera « dans une cage », il verra le répertoire autorisé comme si ce
dernier était la racine du système. Dans l'exemple ci-dessous de configuration de
/etc/Ssh/sshd_config , tous les utilisateurs qui sont dans le groupe sftponly n'auront
accès qu'à l'échange de fichiers dans /data/sftp/ et ne pourront ni passer des commandes
sur le système, ni relayer des connexions TCP ou X11.
Subsystem sftp /usr/lib/ssh/sftp-server