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 [2024/06/23 19:10] – [Gérer les droits des dossiers et autres bonnes pratiques] 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. | ||
| + | |||
| + | 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. | ||
| KbdInteractiveAuthentication no | KbdInteractiveAuthentication no | ||
| Cela va avec le paramètre précédent et le complète. La meilleure explication (en anglais) est [[https:// | Cela va avec le paramètre précédent et le complète. La meilleure explication (en anglais) est [[https:// | ||
| - | | + | |
| - | Cela interdit de se connecter | + | Autorisé par défaut, comme toujours c'est aussi bien en le déclarant... Permet simplement d' |
| + | |||
| + | UsePAM yes | ||
| + | En complément | ||
| + | === Paramètres de session et de connexion === | ||
| MaxAuthTries 6 | MaxAuthTries 6 | ||
| Spécifie le nombre de tentatives d' | Spécifie le nombre de tentatives d' | ||
| Ligne 277: | Ligne 332: | ||
| 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' | 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' | ||
| - | | + | |
| - | Autorisé par défaut, comme toujours c' | + | Toutes les 3 minutes, la session ssh enverra un " |
| + | ClientAliveCountMax 5 | ||
| + | Après 5 " | ||
| - | UsePAM yes | + | 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' |
| - | En complément | + | * Serveur destiné à recevoir des gros fichiers (rsync, scp), avec des tunnels, ou des scripts : prévoir plus long, par exemple '' |
| + | * 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'agisse), nous conseillons de réaliser les opérations avec tmux/ | ||
| + | === Comportement à la connexion, environnement === | ||
| + | PrintLastLog yes | ||
| + | Cette option permet surtout de faire un contrôle " | ||
| - | | + | |
| - | SSh a évolué | + | Précise si sshd affiche le contenu du fichier /etc/motd quand un utilisateur se connecte en mode interactif |
| - | < | + | PermitUserEnvironment no |
| - | MACs hmac-sha2-512-etm@openssh.com, | + | Ce paramètre contrôle si l’utilisatrice a le droit de définir des variables d’environnement personnalisées au moment |
| - | </ | + | |
| - | Ajoutez ces lignes pour préciser les algorithmes acceptés et leur ordre de préférence lors de l'utilisation | + | AcceptEnv LANG LC_* |
| + | Cela permet à l' | ||
| + | === Redirections et accès à distance === | ||
| AllowTcpForwarding no | AllowTcpForwarding no | ||
| 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, | 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, | ||
| Ligne 299: | Ligne 363: | ||
| '' | '' | ||
| - | | + | |
| - | Cette option | + | C'est l'option |
| - | | + | |
| - | Précise si sshd affiche le contenu du fichier /etc/motd quand un utilisateur se connecte en mode interactif et par défaut | + | Là aussi l' |
| - | AcceptEnv LANG LC_* | + | === SFTP === |
| - | Là, de ce que je comprends, cela permet | + | SFTP est un cas particulier. Ce protocole est très utile pour transférer des fichiers dans un environnement plus simple |
| - | Subsystem sftp / | + | Donc, cette partie |
| - | Appelle un daemon pour gérer certains aspects, ici sftp. | + | |
| - | <WRAP center round help 90%> | + | |
| - | 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", | + | |
| - | </ | + | |
| + | 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 | ||
| + | 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 | ||
| + | </ | ||
| + | * '' | ||
| + | * 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 | ||
| + | |||
| + | |||
| + | Voir aussi [[https:// | ||
| === Exemple de fichier sshd_config === | === Exemple de fichier sshd_config === | ||
| - | Voici à quoi peut ressembler votre fichier ''/ | + | Voici à quoi peut ressembler votre fichier ''/ |
| - | <code txt ssh_config> | + | <code txt / |
| - | #Port 22 | + | # Protocole et sécurité de base |
| Protocol 2 | Protocol 2 | ||
| - | Ciphers aes256-ctr,aes192-ctr,aes128-ctr | + | StrictModes yes |
| - | MACs hmac-sha2-512-etm@openssh.com, | + | # Port 22, si besoin de le changer |
| + | |||
| + | # Chiffrement et algorithmes | ||
| + | HostKey / | ||
| + | HostKeyAlgorithms ssh-ed25519,ssh-ed25519-cert-v01@openssh.com | ||
| + | KexAlgorithms mlkem768x25519-sha256, | ||
| + | Ciphers chacha20-poly1305@openssh.com,aes128-gcm@openssh.com, | ||
| + | MACs hmac-sha2-256-etm@openssh.com, | ||
| + | PubkeyAcceptedAlgorithms ssh-ed25519, | ||
| + | # Authentification | ||
| PermitRootLogin no | PermitRootLogin no | ||
| - | StrictModes yes | + | # AllowUsers zatalyz |
| + | # OU | ||
| + | AllowGroups wheel | ||
| PasswordAuthentication no | PasswordAuthentication no | ||
| + | PermitEmptyPasswords no | ||
| KbdInteractiveAuthentication no | KbdInteractiveAuthentication no | ||
| PubkeyAuthentication yes | PubkeyAuthentication yes | ||
| UsePAM yes | UsePAM yes | ||
| - | PermitEmptyPasswords no | + | # Paramètres de session et de connexion |
| MaxAuthTries 6 | MaxAuthTries 6 | ||
| LoginGraceTime 30 | LoginGraceTime 30 | ||
| + | ClientAliveInterval 3m | ||
| + | ClientAliveCountMax 5 | ||
| - | AllowGroups wheel | + | # Comportement à la connexion, environnement |
| + | PrintLastLog yes | ||
| + | PrintMotd no | ||
| + | PermitUserEnvironment no | ||
| + | AcceptEnv LANG LC_* | ||
| + | # Redirections et accès à distance | ||
| AllowTcpForwarding no | AllowTcpForwarding no | ||
| X11Forwarding no | X11Forwarding no | ||
| + | GatewayPorts no | ||
| + | PermitTunnel no | ||
| - | PrintLastLog yes | + | # Uniquement si on permet sftp ! |
| - | PrintMotd no | + | Subsystem sftp internal-sftp -l INFO -f AUTH |
| - | AcceptEnv LANG LC_* | + | Match Group wheel |
| - | + | | |
| - | Subsystem sftp /usr/ | + | |
| + | PermitTTY yes | ||
| + | PermitUserRC yes | ||
| + | |||
| + | Match Group sftpusers | ||
| + | ChrootDirectory | ||
| + | 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 | ||
| </ | </ | ||
| + | N' | ||
| + | service ssh restart | ||
| - | N' | + | ==== Autres bonnes pratiques ==== |
| + | === Gérer les droits des dossiers === | ||
| - | service ssh restart | ||
| - | | ||
| - | ==== Gérer les droits des dossiers et autres bonnes pratiques ==== | ||
| 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 385: | 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> | ||





