Le site arthur.bebou.netlib.re - retour accueil
git clone git://bebou.netlib.re/arthur.bebou
Log | Files | Refs |
index.sh (4832B)
1 #! page 2 title: Distribuer des jeux via SSH 3 author: Arthur Pons 4 description: Il est possible d\'écrire des jeux qui fonctionnent dans le terminal. Découvrons comment les distribuer au reste du monde via SSH sans authentification. 5 publication: 2024-09-06 6 7 sectionmd: main 8 9 **Article non relu** 10 11 Dans ce [précédent article](/jo-stats/#un-jeu) je mentionnais l'existence d'un 12 jeu de culture général basé sur les podiums des JO d'été. Ce jeu ce joue dans un 13 terminal Unix. Il est dispo pour tous les membres du serveur via la commande 14 `oly`. Pour lancer une partie il faut donc faire `ssh user@bebou.netlib.re -p 15 1459 "oly"`. 16 17 La question qui est rapidement survenue est : *Est-il possible de distribuer le 18 jeu via SSH sans authentification histoire que tout le monde puisse en profiter 19 ?*. 20 21 La réponse est oui, du moins pour du debian, en trois étapes. 22 23 ## 1. créer le compte invité 24 25 Il faut d'abord créer un compte "invité" auquel on se connectera. Il faut que ce 26 compte ne possède aucun mot de passe. En imaginant que l'on souhaite que ce 27 compte se nomme `guest`, on lancera : 28 29 sudo adduser --disabled-password --no-create-home guest 30 31 `disabled-password` ne lui donnera pas de mot de passe. `--no-create-home` ne 32 lui créera pas de home. Cette option n'est pas obligatoire mais pourquoi pas. 33 34 Pour une raison qui honnêtement m'échappe, il faut également supprimer le 35 caractère qui aura été inséré à la place du mot de passe dans les fichiers 36 `/etc/passwd` et `/etc/shadow`. Au lieu de : 37 38 # passwd 39 guest:x:1013:1013:guest,,,::/bin/zsh 40 # shadow 41 guest:!:19971:0:99999:7::: 42 43 il faudra 44 45 # passwd 46 guest::1013:1013:guest,,,::/bin/zsh 47 # shadow 48 guest::19971:0:99999:7::: 49 50 51 ## 2. Configurer le serveur SSH 52 53 Vient ensuite la configuration du serveur SSH. Il est possible, dans le fichier 54 de configuration du serveur `/etc/ssh/sshd_config`, de déterminer les paramètres 55 par utilisateurice. Dans notre cas on veut autoriser l'authentification par mot 56 de passe, autoriser les mots de passe vides et forcer la commande du jeu. On 57 écrit donc : 58 59 Match User guest 60 PasswordAuthentication yes 61 PermitEmptyPasswords yes 62 ForceCommand oly 63 64 **Attention**, l'autorisation de l'authentification par mot de passe et 65 l'autorisation des mots de passe vides est considéré comme peu sécurisé. C'est 66 pour cela que l'on ne les autorise **que** pour cet utilisateur. Il est par 67 ailleurs primordiale d'utiliser le paramètre `ForceCommand oly` pour que ce soit 68 l'**unique** commande disponible via ce compte. Sinon, à condition de ne pas 69 avoir modifié le shell de login de guest par défaut, vous permettez à n'importe 70 qui d'obtenir un shell sur votre serveur ! 71 72 On relance le serveur pour prendre en compte la nouvelle configuration : 73 74 sudo systemctl reload ssh.service 75 76 ## 3. On limite le nombre de connexions 77 78 Imaginez maintenant que n'importe qui puisse se connecter à votre serveur. A 79 chaque connexion le système lance le jeu. Vous pourriez, théoriquement, vous 80 retrouver avec >100 sessions de jeu en simultané. Si vous avez un serveur assez 81 peu puissant cela le mettre à genoux. Il est donc judicieux de limiter le nombre 82 de connexion disponibles pour cet utilisateur. Pour cela on édite le fichier 83 `/etc/security/limits.conf` avec, par exemple, une limite de 3 : 84 85 guest hard maxlogins 3 86 87 Si trois personnes sont en train de jouer et qu'une quatrième tente de se 88 connecter elle recevra un message d'erreur indiquant que le nombre maximal de 89 session est déjà atteint. **Attention**, dans ce cas la personne verra le 90 "Message Of The Day" (motd) du serveur. S'il contient des informations sensibles 91 faites attention. Je ne sais pas si ce comportement est modifiable. 92 93 Pour finir, n'oubliez pas de rendre la commande du jeu disponible en exécution 94 au compte `guest`. 95 96 ## 4. Se connecter et jouer 97 98 Dorénavant toute personne munie d'un client SSH peut jouer en faisant : 99 100 ssh -p1459 guest@bebou.netlib.re 101 102 Enjoy ! 🎮 103 104 ## 5. Optionnel, modifier la configuration PAM 105 106 En naviguant les internets j'ai souvent vu des posts invitant à modifier la 107 configuration PAM pour que tout cela fonctionne. En l'occurence il faudrait 108 modifier le fichier `/etc/pam.d/common-auth` pour y mettre `nullok` au lieu de 109 `nullok_secure`. Cela permet à PAM d'autoriser les login sans mot de passe. 110 111 Sur mon système la valeur était déjà à `nullok`, je n'ai donc rien eu à 112 modifier mais sachez que vous aurez peut-être à le faire. 113 114 ## Références 115 116 Pages que j'ai trouvé utiles pour cet article : 117 118 https://singpolyma.net/2009/11/anonymous-sftp-on-ubuntu/ 119 https://back.nber.org/sys-admin/nullok-permitemptypasswords-ssh.html 120 https://unix.stackexchange.com/questions/280168/ssh-virtual-kiosk-does-permitemptypasswords-yes-work-how-to-make-ssh-use 121 122 123 endsection