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/05/07 10:11] – ssh-agent, quelques options en plus 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 228: | 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 236: | 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 250: | 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 270: | 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 313: | 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 |
| - | + | | |
| - | <code txt ssh_config> | + | |
| - | #Port 22 | + | |
| - | Protocol 2 | + | |
| - | Ciphers aes256-ctr, | + | |
| - | MACs hmac-sha2-512-etm@openssh.com, | + | Match Group sftpusers |
| - | + | | |
| - | PermitRootLogin no | + | |
| - | StrictModes | + | |
| - | + | | |
| - | PasswordAuthentication no | + | # Autoriser une connexion plus longue pour permettre de transférer des fichiers |
| - | KbdInteractiveAuthentication no | + | |
| - | PubkeyAuthentication | + | |
| - | UsePAM yes | + | |
| - | + | ||
| - | PermitEmptyPasswords no | + | |
| - | MaxAuthTries 6 | + | |
| - | LoginGraceTime 30 | + | |
| - | + | ||
| - | AllowGroups wheel | + | |
| - | + | ||
| - | AllowTcpForwarding | + | |
| - | X11Forwarding | + | |
| - | + | ||
| - | PrintLastLog yes | + | |
| - | PrintMotd no | + | |
| - | + | ||
| - | AcceptEnv LANG LC_* | + | |
| - | + | ||
| - | Subsystem sftp / | + | |
| </ | </ | ||
| + | * '' | ||
| + | * L' | ||
| + | * '' | ||
| + | * '' | ||
| + | * J' | ||
| + | * '' | ||
| + | * '' | ||
| + | * On permet enfin une connexion plus longues avec '' | ||
| + | À noter : le dossier paramétré par ChrootDirectory doit être possédé par root pour que tout fonctionne. L' | ||
| + | Un autre point important : ajoutez sftpusers à la directive '' | ||
| + | AllowGroups wheel sftpusers | ||
| - | N' | ||
| - | service ssh restart | + | Voir aussi [[https:// |
| - | === Exemple de fichier | + | === Exemple de fichier sshd_config === |
| - | <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 d' | + | |
| - | * Faut " | + | |
| - | Bref, ne pas utiliser "comme ça", mais ce serait bien de faire évoluer notre fichier d' | ||
| - | Et on met dans ''/ | + | Voici à quoi peut ressembler votre fichier |
| - | </ | + | |
| - | <code txt / | + | <code txt / |
| + | # Protocole et sécurité de base | ||
| + | Protocol 2 | ||
| 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 398: | 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 433: | 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> | ||





