4 234
modifications
Aucun résumé des modifications |
|||
(26 versions intermédiaires par le même utilisateur non affichées) | |||
Ligne 1 : | Ligne 1 : | ||
[[Category:serveur]] | |||
[[Category:debian]] | |||
OpenSSH est une implémentation libre du protocole SSH permettant des communications sécurisées. | OpenSSH est une implémentation libre du protocole SSH permettant des communications sécurisées. | ||
OpenSSH fournit les outils suivants : | OpenSSH fournit les outils suivants : | ||
Ligne 6 : | Ligne 7 : | ||
* sftp, un remplaçant pour ftp. | * sftp, un remplaçant pour ftp. | ||
* sshd, le démon SSH | * sshd, le démon SSH | ||
=Installation= | =Installation= | ||
Utilisez | Utilisez apt pour installer le serveur openssh : | ||
<pre> | <pre>apt install openssh-server</pre> | ||
=Modification du fichier sshd_config= | =Modification du fichier sshd_config= | ||
Le fichier <code>/etc/ssh/sshd_config</code> permet de définir des options agissant sur le daemon sshd. Éditez ce fichier et ajoutez ou modifiez les lignes suivantes si nécessaire : | Le fichier <code>/etc/ssh/sshd_config</code> permet de définir des options agissant sur le daemon sshd. Éditez ce fichier et ajoutez ou modifiez les lignes suivantes si nécessaire. Dans la majorité des cas, la configuration par défaut de debian sera suffisante. Attention cependant, depuis debian jessie, le login root est désactivé par défaut (<code>PermitRootLogin no</code>). | ||
Les deux directives auxquelles je touche le plus souvent : | |||
<pre> | <pre> | ||
PermitRootLogin without-password | |||
AllowUsers root pfoo jonass | |||
PermitRootLogin | |||
AllowUsers pfoo jonass | |||
</pre> | </pre> | ||
Petite revue des options : | |||
* Port : spécifie le port sur lequel le serveur ssh doit écouter. Par défaut, le port 22 est utilisé. Certaines personnes préfèrent utiliser un autre port afin de réduire les risques d'attaques, principalement par brute force. Personnellement, je trouve cela inutile du moment qu'on a bien configuré sshd. | * Port : spécifie le port sur lequel le serveur ssh doit écouter. Par défaut, le port 22 est utilisé. Certaines personnes préfèrent utiliser un autre port afin de réduire les risques d'attaques, principalement par brute force. Personnellement, je trouve cela inutile du moment qu'on a bien configuré sshd. | ||
* ListenAddress : spécifie l'adresse ip sur laquelle le serveur ssh écoute. Par défaut, ssh écoute sur l'ip 0.0.0.0 (il écoutera donc toutes les ips configurée sur la machine). | * ListenAddress : spécifie l'adresse ip sur laquelle le serveur ssh écoute. Par défaut, ssh écoute sur l'ip 0.0.0.0 (il écoutera donc toutes les ips configurée sur la machine). | ||
Ligne 50 : | Ligne 32 : | ||
* LoginGraceTime : spécifie le temps (en seconde) que le serveur va attendre avant de déconnecter un utilisateur ne s'étant pas logué avec succès. | * LoginGraceTime : spécifie le temps (en seconde) que le serveur va attendre avant de déconnecter un utilisateur ne s'étant pas logué avec succès. | ||
* KeyRegenerationInterval : spécifie combien de temps le serveur va attendre avant de régénérer automatiquement sa clé. | * KeyRegenerationInterval : spécifie combien de temps le serveur va attendre avant de régénérer automatiquement sa clé. | ||
* PermitRootLogin : spécifie si l'utilisateur root peut se loguer en utilisant ssh. Désactiver cette option permet d'augmenter sensiblement la sécurité en se prévenant des attaques de type brute-force sur l'utilisateur root. Pour n'autoriser que le login par clé utilisez l'argument <code>without-password</code> au lieu de <code>no</code> | * PermitRootLogin : spécifie si l'utilisateur root peut se loguer en utilisant ssh. Désactiver cette option permet d'augmenter sensiblement la sécurité en se prévenant des attaques de type brute-force sur l'utilisateur root. Pour n'autoriser que le login par clé utilisez l'argument <code>without-password</code> au lieu de <code>no</code> et ajouter root à la liste des utilisateurs autorisés par la directive <code>AllowUsers</code>. | ||
* IgnoreRhosts : spécifie si les fichiers ~/.rhosts et ~/.shosts ne doivent pas être utilisé. Il est recommandé de mettre cette option à yes pour des raisons de sécurité. | * IgnoreRhosts : spécifie si les fichiers ~/.rhosts et ~/.shosts ne doivent pas être utilisé. Il est recommandé de mettre cette option à yes pour des raisons de sécurité. | ||
* IgnoreUserKnownHosts : spécifie si le fichier ~/.ssh/known_hosts doit être ignoré lors d'une RhostsRSAAuthentication. | * IgnoreUserKnownHosts : spécifie si le fichier ~/.ssh/known_hosts doit être ignoré lors d'une RhostsRSAAuthentication. | ||
Ligne 74 : | Ligne 56 : | ||
* <code>/etc/ssh/sshd_config</code> : contient la configuration pour le serveur sshd. | * <code>/etc/ssh/sshd_config</code> : contient la configuration pour le serveur sshd. | ||
* <code>/etc/ssh/ssh_config</code> : contient la configuration globale pour le client ssh. | * <code>/etc/ssh/ssh_config</code> : contient la configuration globale pour le client ssh. | ||
* <code>/etc/ssh/ | * <code>/etc/ssh/ssh_host_*_key</code>: ces fichiers contiennent les clés privés de la machine. Ils ne doivent appartenir que à root, et n'avoir des droits que pour root, sinon sshd ne démarre pas. | ||
* <code>/etc/ssh/ | * <code>/etc/ssh/ssh_host_*_key.pub</code> : ces fichiers contiennent les clés publiques de la machine. Ils ne doivent être accessible en écriture que par root, mais doivent être lisible par tous. Ces fichiers sont crées avec ssh-keygen. | ||
* <code>$HOME/.ssh/authorized_keys</code> : Ce fichier contient la liste des clés publiques (RSA, DSA) qui peuvent être utilisés pour se connecter avec le compte correspondant à $HOME. | * <code>$HOME/.ssh/authorized_keys</code> : Ce fichier contient la liste des clés publiques (RSA, DSA) qui peuvent être utilisés pour se connecter avec le compte correspondant à $HOME. | ||
* <code>/etc/ssh/ssh_known_hosts</code> et <code>$HOME/.ssh/known_hosts</code> : Ces fichiers définissent les clés des machines distantes auxquels on se connecte. Cela permet de savoir si on se connecte bien à la bonne machine distante. Lorsque vous établissez pour la première fois une connexion ssh vers une machine, ssh vous demandera s'il doit ajouter la clé à la liste. <code>/etc/ssh/ssh_known_hosts</code> doit être lisible par tous le monde, et writable uniquement pas root. | * <code>/etc/ssh/ssh_known_hosts</code> et <code>$HOME/.ssh/known_hosts</code> : Ces fichiers définissent les clés des machines distantes auxquels on se connecte. Cela permet de savoir si on se connecte bien à la bonne machine distante. Lorsque vous établissez pour la première fois une connexion ssh vers une machine, ssh vous demandera s'il doit ajouter la clé à la liste. <code>/etc/ssh/ssh_known_hosts</code> doit être lisible par tous le monde, et writable uniquement pas root. | ||
* <code>/etc/nologin</code> : Lorsque ce fichier existe, personne ne peut se connecter en ssh à l'exception de root. Le contenu de ce fichier est renvoyé aux personnes essayant de se connecter. Généralement, ce fichier est créé pendant que la machine boot pour éviter que des utilisateurs ne se connectent trop tôt. Si vous avez interdit le login root, ce système peut poser de sérieux problème. Pour le désactiver, il faut commenter la ligne <code>account required pam_nologin.so</code> du fichier <code>/etc/pam.d/ssh</code>. | * <code>/etc/nologin</code> : Lorsque ce fichier existe, personne ne peut se connecter en ssh à l'exception de root. Le contenu de ce fichier est renvoyé aux personnes essayant de se connecter. Généralement, ce fichier est créé pendant que la machine boot pour éviter que des utilisateurs ne se connectent trop tôt. Si vous avez interdit le login root, ce système peut poser de sérieux problème. Pour le désactiver, ce que je déconseil, il faut commenter la ligne <code>account required pam_nologin.so</code> du fichier <code>/etc/pam.d/ssh</code>. | ||
* <code>/etc/hosts.allow</code>, <code>/etc/hosts.deny</code> : La liste des hosts ayant le droit/n'ayant pas le droit de se connecter. Ces fichiers ne concernent pas uniquement ssh, mais toutes les connexions ip. | * <code>/etc/hosts.allow</code>, <code>/etc/hosts.deny</code> : La liste des hosts ayant le droit/n'ayant pas le droit de se connecter. Ces fichiers ne concernent pas uniquement ssh, mais toutes les connexions ip. | ||
Ligne 87 : | Ligne 69 : | ||
La version 2 du protocole ssh impose une clé d'au moins 768 bits. | La version 2 du protocole ssh impose une clé d'au moins 768 bits. | ||
Voici les différentes options que vous pouvez spécifier : | Voici les différentes options que vous pouvez spécifier : | ||
* from= : spécifie le nom canonique de la machine distante. L'opérateur "!" peut être utilisé pour empêcher la connexion si le mot précédé d'un "!" est trouvé. Si un hostname est spécifié, toutes les ips associées à cette hostname seront autorisés. | * <code>from=</code> : spécifie le nom canonique de la machine distante. L'opérateur "!" peut être utilisé pour empêcher la connexion si le mot précédé d'un "!" est trouvé. Si un hostname est spécifié, toutes les ips associées à cette hostname seront autorisés. | ||
* command= : spécifie la commande qui doit être exécuté lorsqu'un connexion utilisé cette clé. Celà implique que la commande fournie par le client se connectant sera ignoré. | * <code>command=</code> : spécifie la commande qui doit être exécuté lorsqu'un connexion utilisé cette clé. Celà implique que la commande fournie par le client se connectant sera ignoré. | ||
* no-port-forwarding : interdit les redirections (forwarding) tcp/ip. | * <code>no-port-forwarding</code> : interdit les redirections (forwarding) tcp/ip. | ||
* no-X11-forwarding : interdit les redirections (forwarding) X11. | * <code>no-X11-forwarding</code> : interdit les redirections (forwarding) X11. | ||
* no-agent-forwarding : interdit les redirections (forwarding) de l'agent d'authentification. | * <code>no-agent-forwarding</code> : interdit les redirections (forwarding) de l'agent d'authentification. | ||
* no-pty : interdit l'allocation d'un terminal. | * <code>no-pty</code> : interdit l'allocation d'un terminal. | ||
* permitopen=host:port : limite les redirections de port de manière à ce qu'il ne soit possible de se connecter qu'à l'host:port spécifié. | * <code>permitopen=host:port</code> : limite les redirections de port de manière à ce qu'il ne soit possible de se connecter qu'à l'host:port spécifié. | ||
Exemple : | |||
<pre> | |||
from="192.168.0.15",no-port-forwarding,no-pty ssh-rsa AAAAB | |||
3NzaC1yc2EAAAABIwAAAQEAybmcqaU/Xos/GhYCzkV+kDsK8+A5OjaK5WgLMqmu38aPo | |||
56Od10RQ3EiB42DjRVY8trXS1NH4jbURQPERr2LHCCYq6tHJYfJNhUX/COwHs+ozNPE8 | |||
3CYDhK4AhabahnltFE5ZbefwXW4FoKOO+n8AdDfSXOazpPas8jXi5bEwNf7heZT++a/Q | |||
xbu9JHF1huThuDuxOtIWl07G+tKqzggFVknM5CoJCFxaik91lNGgu2OTKfY94c/ieETO | |||
XE5L+fVrbtOh7DTFMjIYAWNxy4tlMR/59UVw5dapAxH9J2lZglkj0w0LwFI+7hZu9XvN | |||
fMKMKg+ERAz9XHYH3608RL1RQ== commentaire de la clé | |||
</pre> | |||
=Installation d'une clé privé pour se connecter plus facilement au serveur= | =Installation d'une clé privé pour se connecter plus facilement au serveur= | ||
Ligne 101 : | Ligne 94 : | ||
Si vous utilisez linux, il vous est possible d'installer une clé ssh sur le serveur afin de ne plus avoir à entrer votre mot de passe à chaque fois que vous souhaitez vous connecter au serveur. | Si vous utilisez linux, il vous est possible d'installer une clé ssh sur le serveur afin de ne plus avoir à entrer votre mot de passe à chaque fois que vous souhaitez vous connecter au serveur. | ||
Pour commencer, il faut installer le client OpenSSH sur VOTRE ordinateur. Si vous utilisez debian ou ubuntu : | Pour commencer, il faut installer le client OpenSSH sur VOTRE ordinateur. Si vous utilisez debian ou ubuntu : | ||
<pre> | <pre>apt install openssh-client</pre> | ||
Il faut ensuite générer vos clés publique et privée : | Il faut ensuite générer vos clés publique et privée : | ||
<pre>ssh-keygen -t | <pre>ssh-keygen -t rsa -b 4096</pre> | ||
Ici je génère une clé | Ici je génère une clé rsa de 4096 bits. D'autres algorithmes sont disponibles comme ecdsa et ed25519.<br /> | ||
Il vous sera posé deux questions. La première vous demandera d'indiquer le chemin où les clés doivent être installés. Vous pouvez laisser le chemin proposé par défaut si vous ne souhaitez utiliser qu'un seul couple de clé. La seconde question vous demande d'entrer la passphrase qui servira à protéger la clé privé. Vous pouvez entrer une passphrase ou non, mais il est recommandé d'en entrer une par mesure de sécurité. | Il vous sera posé deux questions. La première vous demandera d'indiquer le chemin où les clés doivent être installés. Vous pouvez laisser le chemin proposé par défaut si vous ne souhaitez utiliser qu'un seul couple de clé. La seconde question vous demande d'entrer la passphrase qui servira à protéger la clé privé. Vous pouvez entrer une passphrase ou non, mais il est recommandé d'en entrer une par mesure de sécurité. | ||
Une fois les clés générées, il va falloir ajouter la clé publique à la liste des clés autorisées par votre serveur. Pour cela, on utilise la commande ssh-copy-id | Une fois les clés générées, il va falloir ajouter la clé publique à la liste des clés autorisées par votre serveur. Pour cela, on utilise la commande ssh-copy-id | ||
<pre> | <pre> | ||
$ ssh-copy-id -i ~/.ssh/ | $ ssh-copy-id -i ~/.ssh/id_rsa.pub plouf@hostname | ||
Password: | Password: | ||
</pre> | </pre> | ||
Ligne 125 : | Ligne 117 : | ||
Si vous avez décidé de ne pas préciser de passphrase lors de la création de la clé, vous pourrez vous connecter à votre serveur sans avoir à préciser votre mot de passe ou votre passphrase. Vous pouvez sauter l'étape suivante. | Si vous avez décidé de ne pas préciser de passphrase lors de la création de la clé, vous pourrez vous connecter à votre serveur sans avoir à préciser votre mot de passe ou votre passphrase. Vous pouvez sauter l'étape suivante. | ||
== | ==Utiliser plusieurs clés== | ||
Rien de vous empêche de créer plusieurs clés (sous des noms différents tout de même). Il faudra cependant configurer votre client ssh afin qu'il sache quelle clé utiliser pour quelle ip. Pour cela, créez le fichier <code>~/.ssh/config</code> et ajoutez y les lignes suivantes : | |||
<pre> | <pre> | ||
ssh | Host serveur1.domain.com | ||
User pfoo | |||
Identityfile ~/.ssh/id_rsa_serveur1 | |||
Host serveur2.domain.com | |||
User blah | |||
Identityfile ~/.ssh/id_rsa_serveur2 | |||
</pre> | </pre> | ||
Avec ce fichier, une tentative de connexion de l'utilisateur <code>pfoo</code> sur <code>serveur1.domain.com</code> utilisera la clé <code>~/.ssh/id_rsa_serveur1</code> alors qu'une connexion de l'utilisateur <code>blah</code> sur <code>serveur2.domain.com</code> utilisera la clé <code>~/.ssh/id_rsa_serveur2</code>. | |||
==Limiter l'utilisation== | |||
* from="" | |||
* command="" | |||
* no-port-forwarding | |||
* no-X11-forwarding | |||
* no-agent-forwarding | |||
* no-pty | |||
exemple : | |||
<pre> | |||
from="votre_ip",no-port-forwarding,no-pty ssh-rsa AAAAB[...] | |||
</pre> | |||
= | =Forcer des utilisateurs à utiliser sftp= | ||
La directive <code>Match</code> permet de définir des actions qui ne s'appliqueront qu'à un groupe d'utilisateur. Si vous voulez par exemple forcer un groupe d'utilisateur à se connecter en sftp uniquement (les utilisateurs de ce groupe ne pourront donc plus se connecter en ssh) vous pouvez ajouter les lignes suivantes à la fin du fichier de configuration de sshd : | La directive <code>Match</code> permet de définir des actions qui ne s'appliqueront qu'à un utilisateur (<code>Match User</code>) ou un groupe d'utilisateur (<code>Match Group</code>). Si vous voulez par exemple forcer un groupe d'utilisateur à se connecter en sftp uniquement (les utilisateurs de ce groupe ne pourront donc plus se connecter en ssh) vous pouvez ajouter les lignes suivantes à la fin du fichier de configuration de sshd : | ||
<pre> | <pre> | ||
Match Group sftponly | Match Group sftponly | ||
Ligne 150 : | Ligne 159 : | ||
* aient pour groupe primaire sftponly | * aient pour groupe primaire sftponly | ||
* que leurs répertoires home appartiennent à root et ne puissent être écrit par aucun autre utilisateur ou groupe. | * que leurs répertoires home appartiennent à root et ne puissent être écrit par aucun autre utilisateur ou groupe. | ||
Vous pouvez aussi changer le shell de ces utilisateurs | Vous pouvez aussi, pour plus de sécurité, changer le shell de ces utilisateurs pour <code>/bin/false</code> ou <code>/usr/sbin/nologin</code> : | ||
<pre> | |||
chsh -s /bin/false username | |||
chsh -s /usr/sbin/nologin username | |||
</pre> | |||
=Forcer des utilisateurs aux commandes de transfert de fichiers= | |||
Vous pouvez utiliser <code>rssh</code> qui est un shell restreint qui ne permet l'usage que des commandes scp, sftp, cvs, svnserve (Subversion) rdist et rsync. | |||
=Renouveler les clés ssh du serveur= | |||
<pre> | |||
rm -rf /etc/ssh/ssh_host* | |||
ssh-keygen -f /etc/ssh/ssh_host_rsa_key -t rsa -N '' | |||
ssh-keygen -f /etc/ssh/ssh_host_dsa_key -t dsa -N '' | |||
ssh-keygen -f /etc/ssh/ssh_host_ecdsa_key -t ecdsa -N '' | |||
ssh-keygen -f /etc/ssh/ssh_host_ed25519_key -t ed25519 -N '' | |||
</pre> |