Le site arthur.bebou.netlib.re - retour accueil
git clone git://bebou.netlib.re/arthur.bebou
Log | Files | Refs |
commit e42ef4cdc775a06d6a5a10db261366b677c044f0 parent 4ad00aa494f5f579dba2d9ca709d67f56e824021 Auterice: Arthur Pons <arthur.pons@unistra.fr> Date: Thu, 5 Sep 2024 17:45:44 +0200 Nouvel article Diffstat:
A | contents/games-over-ssh/index.sh | | | 123 | +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
1 file changed, 123 insertions(+), 0 deletions(-)
diff --git a/contents/games-over-ssh/index.sh b/contents/games-over-ssh/index.sh @@ -0,0 +1,123 @@ +#! page +title: Distribuer des jeux via SSH +author: Arthur Pons +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. +publication: 2024-09-06 + +sectionmd: main + +**Article non relu** + +Dans ce [précédent article](/jo-stats/#un-jeu) je mentionnais l'existence d'un +jeu de culture général basé sur les podiums des JO d'été. Ce jeu ce joue dans un +terminal Unix. Il est dispo pour tous les membres du serveur via la commande +`oly`. Pour lancer une partie il faut donc faire `ssh user@bebou.netlib.re -p +1459 "oly"`. + +La question qui est rapidement survenue est : *Est-il possible de distribuer le +jeu via SSH sans authentification histoire que tout le monde puisse en profiter +?*. + +La réponse est oui, du moins pour du debian, en trois étapes. + +## 1. créer le compte invité + +Il faut d'abord créer un compte "invité" auquel on se connectera. Il faut que ce +compte ne possède aucun mot de passe. En imaginant que l'on souhaite que ce +compte se nomme `guest`, on lancera : + + sudo adduser --disabled-password --no-create-home guest + +`disabled-password` ne lui donnera pas de mot de passe. `--no-create-home` ne +lui créera pas de home. Cette option n'est pas obligatoire mais pourquoi pas. + +Pour une raison qui honnêtement m'échappe, il faut également supprimer le +caractère qui aura été inséré à la place du mot de passe dans les fichiers +`/etc/passwd` et `/etc/shadow`. Au lieu de : + + # passwd + guest:x:1013:1013:guest,,,::/bin/zsh + # shadow + guest:!:19971:0:99999:7::: + +il faudra + + # passwd + guest::1013:1013:guest,,,::/bin/zsh + # shadow + guest::19971:0:99999:7::: + + +## 2. Configurer le serveur SSH + +Vient ensuite la configuration du serveur SSH. Il est possible, dans le fichier +de configuration du serveur `/etc/ssh/sshd_config`, de déterminer les paramètres +par utilisateurice. Dans notre cas on veut autoriser l'authentification par mot +de passe, autoriser les mots de passe vides et forcer la commande du jeu. On +écrit donc : + + Match User guest + PasswordAuthentication yes + PermitEmptyPasswords yes + ForceCommand oly + +**Attention**, l'autorisation de l'authentification par mot de passe et +l'autorisation des mots de passe vides est considéré comme peu sécurisé. C'est +pour cela que l'on ne les autorise **que** pour cet utilisateur. Il est par +ailleurs primordiale d'utiliser le paramètre `ForceCommand oly` pour que ce soit +l'**unique** commande disponible via ce compte. Sinon, à condition de ne pas +avoir modifié le shell de login de guest par défaut, vous permettez à n'importe +qui d'obtenir un shell sur votre serveur ! + +On relance le serveur pour prendre en compte la nouvelle configuration : + + sudo systemctl reload ssh.service + +## 3. On limite le nombre de connexions + +Imaginez maintenant que n'importe qui puisse se connecter à votre serveur. A +chaque connexion le système lance le jeu. Vous pourriez, théoriquement, vous +retrouver avec >100 sessions de jeu en simultané. Si vous avez un serveur assez +peu puissant cela le mettre à genoux. Il est donc judicieux de limiter le nombre +de connexion disponibles pour cet utilisateur. Pour cela on édite le fichier +`/etc/security/limits.conf` avec, par exemple, une limite de 3 : + + guest hard maxlogins 3 + +Si trois personnes sont en train de jouer et qu'une quatrième tente de se +connecter elle recevra un message d'erreur indiquant que le nombre maximal de +session est déjà atteint. **Attention**, dans ce cas la personne verra le +"Message Of The Day" (motd) du serveur. S'il contient des informations sensibles +faites attention. Je ne sais pas si ce comportement est modifiable. + +Pour finir, n'oubliez pas de rendre la commande du jeu disponible en exécution +au compte `guest`. + +## 4. Se connecter et jouer + +Dorénavant toute personne munie d'un client SSH peut jouer en faisant : + + ssh -p1459 guest@bebou.netlib.re + +Enjoy ! 🎮 + +## 5. Optionnel, modifier la configuration PAM + +En naviguant les internets j'ai souvent vu des posts invitant à modifier la +configuration PAM pour que tout cela fonctionne. En l'occurence il faudrait +modifier le fichier `/etc/pam.d/common-auth` pour y mettre `nullok` au lieu de +`nullok_secure`. Cela permet à PAM d'autoriser les login sans mot de passe. + +Sur mon système la valeur était déjà à `nullok`, je n'ai donc rien eu à +modifier mais sachez que vous aurez peut-être à le faire. + +## Références + +Pages que j'ai trouvé utiles pour cet article : + +https://singpolyma.net/2009/11/anonymous-sftp-on-ubuntu/ +https://back.nber.org/sys-admin/nullok-permitemptypasswords-ssh.html +https://unix.stackexchange.com/questions/280168/ssh-virtual-kiosk-does-permitemptypasswords-yes-work-how-to-make-ssh-use + + +endsection