arthur.bebou

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