Index Page précédente Page suivante

VI. MISE EN PLACE DU SERVICE TELNET

Le service TELNET permet d'exécuter depuis une station distante des programmes sur un serveur. Par convention, il utilise le port 23.
 

A. Installation

Vous aurez besoin d'installer le package suivant :

   telnet
 

B. Configuration

Pour permettre à votre PC de devenir un serveur TELNET, il faut lancer le démon telnetd. Ceci est généralement assuré par le service INET. Editez le fichier /etc/inetd.conf et ajoutez, si elle n'existe pas déjà, la ligne suivante :
 
telnet stream tcp nowait root /usr/sbin/tcpd in.telnetd

Allez ensuite dans le répertoire /usr/sbin/ et vérifiez la présence du fichier in.telnetd. Suivant les distributions, son nom peut changer. Adaptez la ligne ajoutée dans inetd.conf en conséquence.

Remarque : l'utilisation du paramètre root dans la ligne ajoutée à /etc/inetd.conf signifie que le démon est lancé avec les droits root. En effet, j'utilise un système d'authentification où les mots de passe cryptés sont stockés dans le fichier /etc/shadow (et non pas dans le fichier /etc/passwd) qui, pour des raisons de sécurité évidentes, n'est lisible que par root.

Pour lancer le service INET au boot, tapez setup (ou drakxservices suivant les versions) puis sélectionnez inet.
Pour vérifier que les services fonctionnent bien, lancez INET en tapant la commande :

   /etc/rc.d/init.d/inetd start (ou restart si le service est déjà lancé)

Tapez ensuite :

   telnet 127.0.0.1

Si le serveur vous répond en vous demandant un nom d'utilisateur et un mot de passe, alors cela fonctionne.

Si vous souhaitez afficher un texte de bienvenue aux utilisateurs qui se sont authentifiés avec succès, tapez votre message dans le fichier /etc/issue.net
 

C. Gestion des utilisateurs

La gestion des droits des utilisateurs se fait par l'intermédiaire de deux fichiers :

   /etc/securetty
   /etc/usertty

Ces deux fichiers ne sont directement lus par le démon telnetd mais le programme login qui lui même est lancé par telnetd lors de la procédure d'authentification avant l'ouverture d'une session. Sachez que login est aussi utilisé pour authentifier les utilisateurs qui ont physiquement accès au serveur. Par conséquent, les droits définis dans ces fichiers concernent aussi bien les accès distants (RLOGIN et TELNET) que les accès directs.

Le fichier /etc/securetty contient la liste des consoles sur lesquelles root est autorisé à se connecter. Par défaut, pour des raisons de sécurité, root ne peut pas ouvrir de session TELNET. Il ne peut se connecter que lorsqu'il a physiquement accès à la machine (consoles du type tty). Si vous êtes administrateur d'une station Linux et que vous avez besoin des droits root lors d'une maintenance à distance via une session TELNET, il est recommandé de s'authentifier d'abord grâce à un compte utilisateur simple puis de passer root en tapant la commande :

   su root

Si malgré ces recommandations vous souhaitez pouvoir ouvrir directement des sessions TELNET en tant que root (après tout, chacun est libre de faire ce qu'il veut), vous devez rajoutez des lignes contenant les nombres 0, 1, 2, (et ainsi de suite en fonction du nombre de sessions que vous voulez ouvrir en même temps) dans le fichier /etc/securetty Ces nombres correspondent à des noms de fichiers périphériques qui sont crées dynamiquement dans le répertoire /dev/pts par le démon telnetd lors d'une connexion distante.

Le fichier /etc/usertty contient les droits de connexion des utilisateurs. Malheureusement, dans toutes les distributions que j'ai eu l'occasion de tester, le programme login est bogué et la présence de ce fichier est totalement ignorée. De ce fait, tout compte (à part root) présent dans le fichier /etc/passwd est autorisé à se connecter. Il va donc falloir trouver un autre moyen de filtrer les connexions. Nous allons exploiter le fait que tout utilisateur qui ouvre une session a besoin d'un shell : pour que la connexion lui soit refusée, il suffit donc de ne pas lui attribuer de shell.

a) Interdire à un utilisateur les connexions locales et distantes
Prenons un exemple concret. Tout d'abord, créez un utilisateur toto en tapant la commande :

   useradd toto

Attribuez un mot de passe à toto en tapant la commande :

   passwd toto

Dans le répertoire /bin, créez un fichier noshell et changez ses droits en tapant la commande :

   chmod 755 noshell

Editez le fichier noshell et ajoutez simplement les lignes suivantes :

   #!/bin/sh
   cat << EOF
   Sorry, for security purpose, you are not allowed to open a session on this
   server.
   EOF
   sleep 3

Editez le fichier /etc/passwd, recherchez la ligne concernant l'utilisateur toto. Elle doit ressembler à :

   toto:x:504:504::/home/toto:/bin/bash

Remplacez /bin/bash (ou tout autre shell) par /bin/noshell A présent, toto ne peut plus ouvrir ni de session locale, ni de sessions à distance.

b) Autoriser les connexions distantes mais pas les connexions locales
Créez un fichier /bin/telnetonly contenant les lignes suivantes :

   #!/bin/sh
   TTY=`tty | grep pts`
   if [ "$TTY" = "" ]
   then
      echo "Sorry, for security purpose, you are not allowed"
      echo "to open a session on this server."
      sleep 3
   else
      export SHLVL=0
      export SHELL=/bin/bash
      /bin/bash -login (ou --login suivant les versions)
    fi

La suite de la procédure à suivre est la même que celle décrite précédemment.

c) Autoriser les connexions locales mais pas les connexions distantes
Créez le fichier /bin/ttyonly contenant les lignes suivantes :

   #!/bin/sh
   TTY=`tty | grep tty`
   if [ "$TTY" = "" ]
   then
      echo "Sorry, for security purpose, you are not allowed "
      echo "to open a session on this server."
   else
      export SHLVL=0
      export SHELL=/bin/bash
      /bin/bash -login (ou --login suivant les versions)
      fi

La suite de la procédure à suivre est la même que celle décrite précédemment.


Index Page précédente Page suivante