Distribuer des jeux via SSH

Retour accueil


Article non relu

Dans ce précédent article 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