Différences
Ci-dessous, les différences entre deux révisions de la page.
| Les deux révisions précédentesRévision précédenteProchaine révision | Révision précédente | ||
| fr:ssh [2025/01/29 21:19] – [Exemple de fichier sshd_config] zatalyz | fr:ssh [2025/11/16 10:12] (Version actuelle) – [SFTP] C'est un détail mais je viens d'y passer une heure zatalyz | ||
|---|---|---|---|
| Ligne 59: | Ligne 59: | ||
| Actuellement (octobre 2018) les seules clés considérées comme fiables sont les clés Ed25519, ECDSA ou RSA d'une taille au moins égale à 2048 bits (4096 ou plus étant mieux mais pas significativement). | Actuellement (octobre 2018) les seules clés considérées comme fiables sont les clés Ed25519, ECDSA ou RSA d'une taille au moins égale à 2048 bits (4096 ou plus étant mieux mais pas significativement). | ||
| + | |||
| + | Sur les serveurs de Khaganat, nous n' | ||
| ==== Le fichier / | ==== Le fichier / | ||
| Ce fichier permet de personnaliser ses accès à ssh de façon extrêmement pratique. | Ce fichier permet de personnaliser ses accès à ssh de façon extrêmement pratique. | ||
| Ligne 156: | Ligne 158: | ||
| eval " | eval " | ||
| - | ssh-add ~/.ssh/id_rsa | + | ssh-add |
| Vous devrez retaper cette commande à chaque redémarrage de votre session, avant de vous connecter en ssh pour la première fois lors de la session. | Vous devrez retaper cette commande à chaque redémarrage de votre session, avant de vous connecter en ssh pour la première fois lors de la session. | ||
| Ligne 162: | Ligne 164: | ||
| Pour vous simplifier la vie, vous pouvez créer un petit alias (dans / | Pour vous simplifier la vie, vous pouvez créer un petit alias (dans / | ||
| - | alias mykey=' | + | alias mykey=' |
| Il n'y aura plus qu'à taper '' | Il n'y aura plus qu'à taper '' | ||
| + | Concernant ssh-agent, quelques infos utiles : | ||
| + | * '' | ||
| + | * '' | ||
| + | * '' | ||
| + | * On peut ajouter plusieurs clés en une fois, avec une commande du type '' | ||
| + | |||
| + | Le [[https:// | ||
| ==== Se connecter sans mot de passe (méthode non sécurisée) ==== | ==== Se connecter sans mot de passe (méthode non sécurisée) ==== | ||
| <WRAP center round important 60%> | <WRAP center round important 60%> | ||
| Ligne 219: | Ligne 228: | ||
| Ssh doit donc être configuré pour être bien sécurisé et ne pas permettre qu'un attaquant se connecte par ce biais. | Ssh doit donc être configuré pour être bien sécurisé et ne pas permettre qu'un attaquant se connecte par ce biais. | ||
| - | <WRAP center round important | + | <WRAP center round important |
| - | Cette partie a été mise à jour le 6 février 2018. La sécurité étant un domaine en perpétuelle évolution, tenez-vous au courant, n' | + | Cette partie a été mise à jour le 7 mai 2025. La sécurité étant un domaine en perpétuelle évolution, tenez-vous au courant, n' |
| </ | </ | ||
| Ligne 227: | Ligne 236: | ||
| </ | </ | ||
| - | La configuration de base sur Debian est relativement correcte ; il y a quelques options qui gagnent à être expliquées et d' | + | La configuration de base sur Debian est relativement correcte ; il y a quelques options qui gagnent à être expliquées et d' |
| - | Le fichier à modifier est ''/ | ||
| - | # What ports, IPs and protocols we listen for | + | Le fichier à modifier est dans ''/ |
| + | |||
| + | === Protocole de base === | ||
| + | Protocol 2 | ||
| + | SSh a évolué et nous utilisons à présent la seconde version du protocole. Pour des raisons de compatibilité, | ||
| Port 22 | Port 22 | ||
| - | Cette option peut être modifiée pour qu'un attaquant automatique soit bloqué : par contre il faudra préciser le port ssh pour se connecter. La commande ne sera donc plus '' | + | Cette option peut être modifiée pour qu'un attaquant automatique soit bloqué : par contre il faudra préciser le port ssh pour se connecter. La commande ne sera donc plus '' |
| + | |||
| + | StrictModes yes | ||
| + | Cela garantit que le serveur vérifie les modes et droits des fichiers de l' | ||
| + | |||
| + | === Chiffrement et algorithmes === | ||
| + | HostKey / | ||
| + | HostKeyAlgorithms ssh-ed25519, | ||
| + | Cela force à ce que seules les clés ed25519 soient présentées, | ||
| + | |||
| + | |||
| + | <WRAP center round info 100%> | ||
| + | > Les protocoles d' | ||
| + | |||
| + | Si vous avez Openssh avec une version supérieure à 9.9 : | ||
| + | < | ||
| + | </ | ||
| + | |||
| + | Pour les versions plus anciennes, comme Bookworm (version openssh 1: | ||
| + | < | ||
| + | </ | ||
| + | |||
| + | À terme, il faudrait mieux n' | ||
| + | |||
| + | < | ||
| + | |||
| + | Plus d' | ||
| + | </ | ||
| + | |||
| + | Pour le reste des protocoles d' | ||
| + | < | ||
| + | MACs hmac-sha2-256-etm@openssh.com, | ||
| + | </ | ||
| + | |||
| + | Ajoutez ces lignes pour préciser les algorithmes acceptés et leur ordre de préférence lors de l' | ||
| + | |||
| + | |||
| + | |||
| + | PubkeyAcceptedAlgorithms ssh-ed25519, | ||
| + | Notez que '' | ||
| + | |||
| + | === Authentification === | ||
| PermitRootLogin no | PermitRootLogin no | ||
| Ligne 241: | Ligne 295: | ||
| La première option interdit de se connecter en root directement via ssh. C'est l' | La première option interdit de se connecter en root directement via ssh. C'est l' | ||
| - | La seconde option permet de se connecter en root **uniquement** si [[fr: | + | La seconde option permet de se connecter en root **uniquement** si [[fr: |
| - | StrictModes yes | ||
| - | Cela garantit que le serveur vérifie les modes et droits des fichiers de l' | ||
| - | |||
| - | # | ||
| - | # UsePrivilegeSeparation yes | ||
| - | |||
| - | < | ||
| - | |||
| - | Cette option est dépréciée depuis la 7.5 car la séparation des privilèges est maintenant par défaut (et depuis un moment). Cette option n'a de sens que sur de très vieux serveurs, qui feraient mieux de ne pas être exposés à internet. | ||
| AllowUsers Pseudo1 Moi Toiaussi | AllowUsers Pseudo1 Moi Toiaussi | ||
| + | # OU | ||
| AllowGroups wheel | AllowGroups wheel | ||
| Ligne 261: | Ligne 307: | ||
| À noter que vous pouvez aussi spécifier l' | À noter que vous pouvez aussi spécifier l' | ||
| + | |||
| + | Par contre, n' | ||
| PasswordAuthentication no | PasswordAuthentication no | ||
| Interdit purement et simplement à tous les utilisateurs de se connecter via ssh avec un mot de passe : il faut forcément une clé ssh enregistrée sur le serveur. | Interdit purement et simplement à tous les utilisateurs de se connecter via ssh avec un mot de passe : il faut forcément une clé ssh enregistrée sur le serveur. | ||
| - | |||
| - | KbdInteractiveAuthentication no | ||
| - | Cela va avec le paramètre précédent et le complète. La meilleure explication (en anglais) est [[https:// | ||
| PermitEmptyPasswords no | PermitEmptyPasswords no | ||
| Cela interdit de se connecter sans mot de passe. C'est sans doute superflu vu que de toute façon on oblige à se connecter avec sa clé SSH, mais dans le doute, on le renseigne. | Cela interdit de se connecter sans mot de passe. C'est sans doute superflu vu que de toute façon on oblige à se connecter avec sa clé SSH, mais dans le doute, on le renseigne. | ||
| - | | + | |
| - | Spécifie | + | Cela va avec le paramètre précédent |
| - | + | ||
| - | LoginGraceTime 30 | + | |
| - | Temps en secondes pour saisir son mot de passe. En fait, 30 secondes, c'est plutôt long, même avec une passphrase un peu conséquente. D'autant plus qu'il est possible d'utiliser l'agent ssh si on s' | + | |
| PubkeyAuthentication yes | PubkeyAuthentication yes | ||
| Autorisé par défaut, comme toujours c'est aussi bien en le déclarant... Permet simplement d' | Autorisé par défaut, comme toujours c'est aussi bien en le déclarant... Permet simplement d' | ||
| - | |||
| UsePAM yes | UsePAM yes | ||
| En complément de '' | En complément de '' | ||
| + | === Paramètres de session et de connexion === | ||
| + | MaxAuthTries 6 | ||
| + | Spécifie le nombre de tentatives d' | ||
| - | | + | |
| - | SSh a évolué et nous utilisons à présent la seconde version du protocole. Pour des raisons | + | Temps en secondes pour saisir son mot de passe. En fait, 30 secondes, c' |
| - | < | + | ClientAliveInterval 3m |
| - | MACs hmac-sha2-512-etm@openssh.com,hmac-sha2-256-etm@openssh.com | + | Toutes les 3 minutes, la session ssh enverra un " |
| - | </ | + | |
| - | Ajoutez ces lignes | + | |
| - | | + | |
| - | Il est possible, via SSH, de faire des trucs fun avec TCP, mais mal maitrisé, cela peut ouvrir des failles à un attaquant. On ne va pas faire compliqué, sauf besoin spécifique, | + | Après 5 " |
| - | X11Forwarding no | + | Cela évite de laisser ouverte des sessions fantômes. Cela peut être paramétré plus court ou plus long, mais ce genre de délai évite d'éjecter s'il y a juste quelques pertes de paquets dans la connexion, tout en étant plutôt très sécurisé. Par ailleurs, d' |
| - | '' | + | * Serveur destiné à recevoir des gros fichiers (rsync, scp), avec des tunnels, ou des scripts : prévoir |
| + | * Serveur sensibles, et quand on a tendance à oublier qu'on est co et laisser la session ouverte : '' | ||
| + | * Notez que lors des grosses maj (où il se passe du temps sans que le sysadmin n' | ||
| + | === Comportement à la connexion, environnement === | ||
| PrintLastLog yes | PrintLastLog yes | ||
| Cette option permet surtout de faire un contrôle " | Cette option permet surtout de faire un contrôle " | ||
| Ligne 304: | Ligne 349: | ||
| PrintMotd no | PrintMotd no | ||
| Précise si sshd affiche le contenu du fichier /etc/motd quand un utilisateur se connecte en mode interactif et par défaut à " | Précise si sshd affiche le contenu du fichier /etc/motd quand un utilisateur se connecte en mode interactif et par défaut à " | ||
| + | |||
| + | PermitUserEnvironment no | ||
| + | Ce paramètre contrôle si l’utilisatrice a le droit de définir des variables d’environnement personnalisées au moment de la connexion SSH. Permettre cela offre la possibilité d' | ||
| AcceptEnv LANG LC_* | AcceptEnv LANG LC_* | ||
| - | Là, de ce que je comprends, cela permet à l' | + | Cela permet à l' |
| - | Subsystem sftp / | + | === Redirections et accès à distance === |
| - | Appelle un daemon pour gérer certains aspects, ici sftp. | + | |
| - | <WRAP center round help 90%> | + | Il est possible, via SSH, de faire des trucs fun avec TCP, mais mal maitrisé, cela peut ouvrir des failles |
| - | Présent dans tous les fichiers sshd_config des diverses distributions Linux que j'ai pu voir, je préfère le laisser "dans le doute", car sftp est bien pratique. Cependant, sftp mal configuré | + | |
| - | </ | + | |
| + | X11Forwarding no | ||
| + | '' | ||
| + | GatewayPorts no | ||
| + | C'est l' | ||
| + | PermitTunnel no | ||
| + | Là aussi l' | ||
| + | === SFTP === | ||
| + | SFTP est un cas particulier. Ce protocole est très utile pour transférer des fichiers dans un environnement plus simple à sécuriser. La plupart des serveurs n'en ont cependant pas besoin : on utilise rsync, pas besoin de plus. | ||
| - | === Exemple de fichier sshd_config === | + | Donc, cette partie est totalement facultative ! |
| + | Dans le cas où vous voulez permettre à des utilisatrices de manipuler des fichiers et dossiers dans leur home, il faudra les déclarer dans le groupe " | ||
| + | < | ||
| + | Subsystem sftp internal-sftp -l INFO -f AUTH | ||
| - | Voici à quoi peut ressembler votre fichier '' | + | Match Group wheel |
| - | + | ChrootDirectory none | |
| - | < | + | ForceCommand none |
| - | #Port 22 | + | PermitTTY yes |
| - | Protocol 2 | + | PermitUserRC yes |
| - | Ciphers aes256-ctr,aes192-ctr,aes128-ctr | + | |
| - | MACs hmac-sha2-512-etm@openssh.com,hmac-sha2-256-etm@openssh.com | + | Match Group sftpusers |
| - | + | ChrootDirectory | |
| - | PermitRootLogin | + | ForceCommand internal-sftp -d /sftp |
| - | StrictModes yes | + | PermitTTY no |
| + | PermitUserRC no | ||
| + | # Autoriser une connexion plus longue pour permettre de transférer des fichiers | ||
| + | ClientAliveInterval 15m | ||
| + | | ||
| + | </code> | ||
| + | * '' | ||
| + | * L' | ||
| + | * '' | ||
| + | * '' | ||
| + | * J' | ||
| + | * '' | ||
| + | * '' | ||
| + | * On permet enfin une connexion plus longues avec '' | ||
| - | PasswordAuthentication no | + | À noter : le dossier paramétré par ChrootDirectory doit être possédé par root pour que tout fonctionne. L' |
| - | KbdInteractiveAuthentication no | + | |
| - | PubkeyAuthentication yes | + | |
| - | UsePAM yes | + | |
| - | PermitEmptyPasswords no | + | Un autre point important : ajoutez sftpusers à la directive '' |
| - | MaxAuthTries 6 | + | |
| - | LoginGraceTime 30 | + | |
| - | AllowGroups wheel | ||
| - | AllowTcpForwarding no | + | Voir aussi [[https:// |
| - | X11Forwarding no | + | |
| - | PrintLastLog yes | + | === Exemple de fichier sshd_config === |
| - | PrintMotd no | + | |
| - | AcceptEnv LANG LC_* | ||
| - | Subsystem sftp /usr/lib/openssh/sftp-server | + | Voici à quoi peut ressembler votre fichier '' |
| - | </ | + | |
| - | + | <code txt /etc/ssh/sshd_config.d/ | |
| - | + | # Protocole et sécurité de base | |
| - | N' | + | Protocol 2 |
| - | + | ||
| - | service ssh restart | + | |
| - | + | ||
| - | === Exemple de fichier | + | |
| - | <WRAP center round todo 60%> | + | |
| - | Je pose ça tant que j'y pense, ceci est la version à jour en 2025 proposé par Tycho. Attention cependant avant de déployer ça sur les serveurs : | + | |
| - | * Seules les clés Ed25519 seront acceptées | + | |
| - | * Les protocoles | + | |
| - | * Faut " | + | |
| - | + | ||
| - | Bref, ne pas utiliser "comme ça", mais ce serait bien de faire évoluer notre fichier d' | + | |
| - | </WRAP> | + | |
| - | + | ||
| - | <code txt ssh_config> | + | |
| StrictModes yes | StrictModes yes | ||
| + | # Port 22, si besoin de le changer | ||
| + | # Chiffrement et algorithmes | ||
| HostKey / | HostKey / | ||
| + | HostKeyAlgorithms ssh-ed25519, | ||
| + | KexAlgorithms mlkem768x25519-sha256, | ||
| Ciphers chacha20-poly1305@openssh.com, | Ciphers chacha20-poly1305@openssh.com, | ||
| MACs hmac-sha2-256-etm@openssh.com, | MACs hmac-sha2-256-etm@openssh.com, | ||
| - | KexAlgorithms sntrup761x25519-sha512, | ||
| PubkeyAcceptedAlgorithms ssh-ed25519, | PubkeyAcceptedAlgorithms ssh-ed25519, | ||
| + | # Authentification | ||
| PermitRootLogin no | PermitRootLogin no | ||
| # AllowUsers zatalyz | # AllowUsers zatalyz | ||
| Ligne 387: | Ligne 438: | ||
| PermitEmptyPasswords no | PermitEmptyPasswords no | ||
| KbdInteractiveAuthentication no | KbdInteractiveAuthentication no | ||
| + | PubkeyAuthentication yes | ||
| + | UsePAM yes | ||
| - | MaxAuthTries | + | # Paramètres de session et de connexion |
| + | MaxAuthTries | ||
| LoginGraceTime 30 | LoginGraceTime 30 | ||
| + | ClientAliveInterval 3m | ||
| + | ClientAliveCountMax 5 | ||
| + | # Comportement à la connexion, environnement | ||
| PrintLastLog yes | PrintLastLog yes | ||
| + | PrintMotd no | ||
| PermitUserEnvironment no | PermitUserEnvironment no | ||
| + | AcceptEnv LANG LC_* | ||
| + | |||
| + | # Redirections et accès à distance | ||
| AllowTcpForwarding no | AllowTcpForwarding no | ||
| X11Forwarding no | X11Forwarding no | ||
| + | GatewayPorts no | ||
| + | PermitTunnel no | ||
| + | |||
| + | # Uniquement si on permet sftp ! | ||
| + | Subsystem sftp internal-sftp -l INFO -f AUTH | ||
| + | |||
| + | Match Group wheel | ||
| + | ChrootDirectory none | ||
| + | ForceCommand none | ||
| + | PermitTTY yes | ||
| + | PermitUserRC yes | ||
| + | | ||
| + | Match Group sftpusers | ||
| + | ChrootDirectory /home/%u | ||
| + | ForceCommand internal-sftp -d /sftp | ||
| + | PermitTTY no | ||
| + | PermitUserRC no | ||
| + | # Autoriser une connexion plus longue pour permettre de transférer des fichiers | ||
| + | ClientAliveInterval 15m | ||
| + | ClientAliveCountMax 3 | ||
| </ | </ | ||
| - | ==== Gérer les droits des dossiers | + | |
| + | N' | ||
| + | |||
| + | service ssh restart | ||
| + | |||
| + | ==== Autres bonnes pratiques ==== | ||
| + | === Gérer les droits des dossiers === | ||
| Si vous ouvrez un accès SSH à plusieurs personnes sur un serveur, cela ne veux pas dire qu' | Si vous ouvrez un accès SSH à plusieurs personnes sur un serveur, cela ne veux pas dire qu' | ||
| Ligne 422: | Ligne 509: | ||
| </ | </ | ||
| + | === Tester un fichier ssh === | ||
| + | Pour vérifier si votre fichier de configuration va tout faire planter : | ||
| + | sudo sshd -t -f / | ||
| + | | ||
| ===== Pour aller plus loin ===== | ===== Pour aller plus loin ===== | ||
| * [[http:// | * [[http:// | ||
| - | * [[http:// | ||
| * [[https:// | * [[https:// | ||
| {{tag> | {{tag> | ||





