GAZETTE N°25: Stations de travail Internet en accès public sécurisé

Stations de travail Internet en accès public sécurisé

Par Steven Singer

Adaptation française de Pierre Tane


Précédent Suivant Table des matières

7. Stations de travail Internet en accès public sécurisé

7.1 Introduction.

Linux est l'OS parfait pour une utilisation en environnement hostile : les fonctionnalités de sécurité et la personnalisation qu'offrent la plupart des gestionnaires de fenêtres font de Linux un choix naturel pour cette tâche. Récemment, une agence locale pour l'emploi avait décidé de déployer une douzaine de stations de travail Internet à accès public en différents endroits, tels que les bibliothèques et les hôpitaux. L'OS choisi pour ce projet fut Linux. Cet article explique comment configurer Linux afin qu'il puisse être utilisé en toute sécurité comme station de travail Internet en accès public.

Pourquoi Linux ?

Quand vint le moment de décider comment configurer les stations de travail, plusieurs solutions furent envisagées. Il fut tout d'abord décidé que le matériel serait des PC avec processeurs Intel, ce qui nous conduisait à ne considérer que les différentes offres Microsoft et Unix. Les coûts liés aux licences NT auraient augmenté le budget de manière conséquente. Même après avoir acheté des licences NT pour chacune des stations de travail, il aurait encore fallu qu'un administrateur expérimenté prenne du temps pour configurer et sécuriser chaque machine. NT était considéré comme une alternative, mais chère au demeurant. Win95 est bien meilleur marché que NT mais il lui manque les fonctionnalités de sécurité des OS plus avancés. Notre plus grande peur concernant Win95 était que nous allions souvent nous retrouver avec des personnes pour modifier et détruire la configuration du système. Linux offrait une solution à chacun de ces problèmes. La flexibilité de X-Window, alliée aux fonctionnalités de sécurité qui existent en standard sous Linux nous permit de configurer les stations de travail sans avoir peur d'utilisateurs malveillants. Les coûts de licence étaient virtuellement nuls et configurer chaque machine devint en fait une simple routine.

7.2 La procédure d'installation

Quand vous devez configurer un certain nombre de stations de travail Linux avec globalement les mêmes options, deux approches s'offrent à vous. La première consiste à faire le test sur la première machine puis à dupliquer entièrement le disque dur sur chacune des stations de travail (si vous comptez faire comme cela, rappelez vous que vous devrez probablement relancer LILO sur chacune des machines). La seconde méthode est de configurer à la main chaque machine en suivant une liste de points de contrôle. Nous avons opté pour la seconde méthode pour des raisons logistiques. Cependant, la procédure d'installation a été automatisée par le biais de fichiers de configuration et par l'utilisation de scripts quand cela était possible.

Notre distribution était une Red Hat 4.3, installée à partir du Red Hat PowerCD. Je pense que n'importe quelle distribution bien conçue aurait également fait l'affaire. Après l'installation de la première machine, une liste de points à vérifier pas à pas durant l'installation fut établie. Nous avons parfois modifié cette liste, ce qui nous a obligé à revenir sur les machines déjà installées afin d'effectuer les modifications nécessaires.

Installation de l'OS et du réseau

L'installation a commencé comme une installation Red Hat classique. Les machines ayant beaucoup d'espace disque, nous avons eu les mains libres quant au choix des paquetages. Ainsi, nous avons installé X Windows et les composants réseau qui nous semblaient utiles. ipfwadm a été installé manuellement car il n'y avait pas d'option spécifique pour le faire.

Les considérations de connexion

Les machines étaient destinées à être connectées à l'Internet via un modem, nous avons donc utilisé le support PPP présent dans les noyaux de la série 2.*. Dans /etc/ppp, nous avons ajouté un script de chat contenant les informations utiles et nous nous sommes assuré que seul root y avait accès (chmod 700). Pour plus de détails quant aux connexions, voir la documentation du noyau et la FAQ sur PPP. Le Networking HOWTO est aussi utile. Nous avons alors testé la connexion réseau pour nous assurer de son fonctionnement.

7.3 X-Window

XF86Config

Le fichier XF86Config est le fichier de configuration du serveur X XFree86. Nous avons créé ce fichier de la même manière que nous l'aurions fait pour une station de travail normale Linux sous X, à l'exception des lignes "DontZap" et "DontZoom". DontZap empêche l'utilisateur de tuer le serveur X avec une combinaison de touches d'échappement. DontZoom empêche le changement dynamique de résolution. Ces options permettent d'éviter qu'un utilisateur malveillant puisse modifier l'environnment de la station de travail pour celui qui suit. La page du manuel sur XF86Config contient de plus amples détails sur le contenu de ce fichier.

Xdm

Xdm est un gestionnaire de login pour X-Window. À la place du login standard en mode texte d'une console Linux, on a un programme X qui demande à l'utilisateur son login et son mot de passe. L'utilisateur est alors loggué sous X.

Les fichiers suivants sont situés dans /usr/X11R6/lib/X11/xdm :

Xsession

Nous avons utilisé un fichier Xsession standard chargeant fvwm comme gestionnaire de fenêtres (bien que d'autres gestionnaires de fenêtres fonctionnent, nous avons opté pour fvwm).

XResources

Le fichier XResources contrôle les préférences pour le login sous xdm. Nous avons utilisé un fichier XResources standard, mais nous y avons ajouté et/ou modifié les lignes suivantes. Elles conditionnent toutes l'apparence de la fenêtre de login, à l'exception de la dernière qui permet à notre compte guest de fonctionner sans mot de passe.


xlogin*greeting: Bonjour, veuillez vous loguer en tant que 'guest', sans mot de passe
xlogin*namePrompt: login:\xlogin*fail: Login incorrect, veuillez utiliser le compte 
'guest' sans mot de passe
xlogin*allowNullPasswd: true<p>

Nous avons retiré la ligne suivante de la section "translations" pour empêcher un utilisateur de contourner xdm.


Ctrl<Key>R: abort-display()\n\  <p>

XSetup

Le fichier XSetup est appelé une fois que l'utilisateur est logué. Tous les programmes que vous voulez lancer au login peuvent être lancés à partir de ce fichier. C'est ici que vous devez mettre une commande xsetroot, par exemple. La version par défaut de XSetup lance Xconsole (un programme qui affiche une sortie texte du serveur X dans une petite fenêtre) : nous ne voulions pas que ces informations soient visibles et nous avons donc mis cette ligne en commentaire.

Configuration de fvwm

Nous avons choisi fvwm comme gestionnaire de fenêtres autant par préférence personnelle que par habitude : la plupart des autres gestionnaires nécessiteraient les mêmes modifications. Toutes les informations concernant la configuration de fvwm pour un utilisateur sont situées dans un fichier nommé .fvwmrc, qui se trouve dans son répertoire personnel. Une version par défaut de ce fichier se trouve dans /usr/X11R6/lib/X11/fvwm/system.fvwmrc. Nous allons utiliser celui-ci comme base de départ et signaler les choses importantes auxquelles il faudra prêter attention. Puisqu'il n'y a pas de configuration de base standard pour fvwm, je signalerai seulement les changements à effectuer et considérerai que vous connaissez le format d'un fichier fvwmrc.

Le Menu Popup

Le fichier de configuration que vous utilisez comme point de départ possèdera probablement des menus popup prédéfinis. Vous voudrez certainement en retirer une bonne partie. Je vous conseille de n'en laisser que deux : netscape et exit.

Paging

Il vaut mieux désactiver la gestion des écrans virtuels pour éviter d'embrouiller l'utilisateur inutilement.

Cela peut se faire avec une ligne du genre :


PagingDefault 0

Il vaut également mieux retirer la ligne Pager.

GoodStuff

Le programme GoodStuff, fourni avec fvwm, crée une barre d'icônes à un endroit prédéterminé à l'écran. Celle-ci permet de lancer rapidement des applications. GoodStuff est un programme qui sait s'adapter à vos goûts. J'ai choisi une barre avec une seule ligne située en haut à gauche du bureau. Les lignes concernées sont les suivantes :


*GoodStuffRows 1*GoodStuff Netscape netscape.xpm   Exec "Netscape"
/usr/local/netscape/netscape*GoodStuff Logout mini.exit.xpm Quit-Verify 

J'ai créé un fichier icône, appelé netscape.xpm, qui représente le logo de Netscape afin qu'il soit utilisé comme icône. Les fichiers d'icônes sont généralement stockés dans /usr/X11R6/include/pixmaps

Commandes de démarrage

fvwm vous permet de lancer certains programmes au démarrage. Compte tenu du fait que tous les utilisateurs 'guest' se loguant sur le système sont destinés à se connecter à l'Internet, nous voulons nous assurer que le modem commencera à numéroter le plus rapidement possible. Nous avons donc ajouté une section Initfunction à la fin du fichier fvwmrc. Si la connexion PPP est déjà active, le ping fonctionnera, sinon on démarrera le processus de connexion. Remplacez router.myisp.ca par le nom d'une machine de votre fournisseur d'accès.


Function "InitFunction"        Exec "I"        /bin/ping -c 1 router.myisp.ca &
EndFunction

7.4 Considérations sur la sécurité

Configuration du BIOS

Dans une situation où la console est accessible par tout le monde, le BIOS est la première ligne de défense contre les intentions malveillantes. La plupart des BIOS modernes proposent une protection par mot de passe. Il est recommandé de mettre un mot de passe au moment du démarrage. Dans notre cas, nous avons décidé que nous voulions seulement autoriser des personnes de confiance à booter la machine. Autrement, n'importe qui pourrait booter la machine avec une disquette de boot comme système de fichiers racine (en obtenant alors les droits de root) ou alors booter sous DOS et formater le disque dur. En complément du mot de passe de démarrage, nous avons également installé un mot de passe pour l'accès au BIOS et supprimé le boot à partir d'une disquette.

Inittab

/etc/inittab est le fichier de configuration du processus init. Puisque nous voulions que nos stations de travail ne travaillent que sous X-Window, nous avons positionné le niveau d'exécution initial à 5. C'est ce que fait la ligne suivante. Cela veut dire que, quand la machine boote, le serveur X et xdm sont lancés automatiquement.


id:5:initdefault:

init a également la charge de la gestion des processus getty qui s'occupent des login en mode texte sur la console ou sur les autres terminaux connectés à la machine. Le fichier inittab par défaut devrait comporter une section comme celle qui suit :


1:12345:respawn:/sbin/mingetty tty1
2:2345:respawn:/sbin/mingetty tty2
3:2345:respawn:/sbin/mingetty tty3
4:2345:respawn:/sbin/mingetty tty4
5:2345:respawn:/sbin/mingetty tty5
6:2345:respawn:/sbin/mingetty tty6

Retirez le 5 qui figure dans le second champ de chaque ligne pour obtenir quelque chose comme :


1:1234:respawn:/sbin/mingetty tty1<BR>
2:234:respawn:/sbin/mingetty tty2<BR>
3:234:respawn:/sbin/mingetty tty3<p>

Ceci signifie que, quand le système est en niveau d'exécution 5 (niveau d'exécution auquel X-Window tourne pour gérer les login), un utilisateur ne pourra se loguer sur une console en mode texte. Avant d'effectuer ce changement, assurez-vous que X-Window et xdm fonctionnent correctement. Empêcher les login en mode texte n'est pas essentiel pour la sécurité, mais nous pensons que cela peut perturber l'utilisateur de se retrouver sur une machine laissée dans ce mode. Si, pour quelque raison que ce soit, X-Window ne marche plus après l'interdiction des logins en mode texte, démarrez en mode mono-utilisateur pour vous loguer. Cela se fait en passant un paramètre au noyau lors du prompt de LILO.

S90Console

Red Hat utilise des scripts d'initialisation dans le style de SVR4 pour effectuer le processus de démarrage. L'idée de base est qu'il y a un répertoire par niveau d'exécution dans /etc/rc.d. Quand init change de niveau d'exécution, il va voir dans le répertoire approprié et exécute chacun des fichiers commençant par un S en ordre croissant. Par exemple, sur ma distribution Red Hat, quand mon système entre en niveau d'exécution 3 (multi-utilisateurs), /etc/rc.d/rc3.d/S10network est exécuté en premier et /etc/rc.d/rc3.d/S99local ferme la marche.

Même si nous avons désactivé les getty pour la console, un utilisateur pourra toujours faire CTRL-ALT-F1 (ou une autre touche de fonction) pour changer de console virtuelle à partir de X-Window. Je ne sais pas comment empêcher cela, si ce n'est en modifiant directement le noyau. Par conséquent, dans le cas où un utilisateur arriverait sur une console virtuelle, nous avons décidé de lui faire savoir comment retourner sous X. Nous avons donc créé le fichier S90Console dans /etc/rc.d/rc5.d et avons donné à root les droits d'exécution. Ce fichier contient ce qui suit :


#!/bin/shD="Appuyez sur Ctrl+Alt+F2 pour utiliser cet ordinateur"
echo $D>/dev/tty1
echo $D>/dev/tty3
echo $D>/dev/tty4
echo $D>/dev/tty5
echo $D>/dev/tty6
echo $D>/dev/tty7

Comme getty ne tourne pas sur n'importe quelle console, le serveur X utilise la seconde console virtuelle par défaut.

inetd.conf

Le fichier /etc/inetd.conf est le fichier de configuration du démon inetd. Celui-ci est responsable du lancement des autres démons qui gèrent les services du réseau en cas de besoin. Tous les démons ne sont pas lancés par inetd. Si votre machine est seulement utilisée comme station de travail et ne fournit pas de services de réseau à d'autres machines, désactivez tous les démons non nécessaires. Pour désactiver un démon lancé par inetd, ajoutez tout simplement un caractère # au début de la ligne concernée. Je vous conseille de désactiver finger, pop, ntalk, talket tous les autres démons que vous n'utilisez pas. Nous avons décidé de laisser telnet et ftp afin de permettre l'administration à distance. Cependant, si vous faites cela, tenez vous au courant des nouvelles concernant la sécurité de ces paquetages (et de tout autre programme tournant sur votre système). Généralement, la correction d'un bug est juste l'affaire d'une mise-à-jour du programme en question.

Remarque concernant les pare-feux (Firewalling)

Le noyau Linux peut-être configuré de manière à offrir un support pour l'IP Firewalling. Cela vous permet de spécifier quels sont les paquets que le noyau doit ignorer : par exemple, vous pouvez décider que le noyau ne doit pas router tous les paquets en provenance de la machine locale et destinés au port TCP 25 (de n'importe quelle machine). Pour utiliser cette fonctionnalité, il faut valider l'option IP Firewalling lors de la compilation du noyau. Vous pouvez contrôler les paramètres du pare-feu avec la commande ipfwadm, qui se trouve généralement dans /sbin. Nous avons ajouté les lignes suivantes à /etc/rc.d/rc5.d/S99local.



/sbin/ipfwadm -I -f

/sbin/ipfwadm -O -f

/sbin/ipfwadm -O -a deny -P tcp -D 0.0.0.0/0.0.0.0 25

/sbin/ipfwadm -O -a deny -P tcp -D 0.0.0.0/0.0.0.0 119

Cela empêche tout trafic sortant vers le port 25 (celui du mail), de manière à ce que les utilisateurs ne puissent envoyer de courrier. Comme n'importe qui pourra se servir de nos stations de travail, il est préférable de ne pas leur permettre cette possibilité. De la même manière, nous avons bloqué l'utilisation du port 119 (le port des news) pour interdire l'accès à Usenet. Nous aurions préféré donner un accès en lecture seule aux forums Usenet à partir de Netscape mais je n'ai pas trouvé comment le faire, donc par prudence nous avons intedit tous les accès à Usenet.

Permissions

Afin de conserver la configuration, vous voudrez certainement changer les permissions des différents fichiers qui se trouvent dans le répertoire personnel de guest. À ce stade, vous aurez très certainement créé un utilisateur guest. Lancez d'abord Netscape une première fois en tant qu'utilisateur guest avant d'effectuer ces changements.



chown root /home/guest chmod 555 /home/guestchown root /home/guest/.fvwmrc /home/guest/.bash_profile
chown root /home/guest/.Xdefaults /home/guest/.bashrc
/home/guest/.bash_logoutchmod 555  /home/guest/.fvwmrc /home/guest/.bash_profile
/home/guest/.Xdefaults /home/guest/.bashrc
/home/guest/.bash_logoutchmod 444 /home/guest/.netscape/preferences
/home/guest/.netscape/bookmarks.htmlchown root /home/guest/.netscape/preferences
/home/guest/.netscape/bookmarks.htm


Les commandes ci-dessus ayant été exécutées, on donne à root la propriété du répertoire personnel. Changer le propriétaire empêche l'utilisateur de changer à nouveau les permissions. Ensuite, nous avons retiré le droit d'écriture sur le répertoire personnel, puis nous avons changé le propriétaire et les droits d'écriture sur les fichiers .fvwmrc, .bash_profile, .Xdefaults, .bash_logout, et .bashrc. Un utilisateur ne pourra alors plus changer l'apparence de son environnement. Nous avons ensuite sécurisé les fichiers de préférence de Netscape et le fichier de bookmarks. Un utilisateur pourra toujours modifier les préférences de Netscape, mais ses modfications ne seront pas conservées pour la personne qui se loguera après lui. Celle-ci retrouvera les réglages par défaut.


Précédent Suivant Table des matières

Copyright (c) 1998, Steven Singer Publié dans le Numéro 25 de la Linux Gazette

Adaptation française de Pierre Tane