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 surXF86Config
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 sousxdm
. Nous avons utilisé un fichierXResources
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 compteguest
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 commandexsetroot
, par exemple. La version par défaut deXSetup
lanceXconsole
(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 fichierfvwmrc
. Si la connexion PPP est déjà active, leping
fonctionnera, sinon on démarrera le processus de connexion. Remplacezrouter.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 processusinit
. 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 etxdm
sont lancés automatiquement.
id:5:initdefault:
init
a également la charge de la gestion des processusgetty
qui s'occupent des login en mode texte sur la console ou sur les autres terminaux connectés à la machine. Le fichierinittab
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
. Quandinit
change de niveau d'exécution, il va voir dans le répertoire approprié et exécute chacun des fichiers commençant par unS
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 faireCTRL-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 fichierS90Console
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émoninetd
. 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 parinetd
. 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é parinetd
, ajoutez tout simplement un caractère#
au début de la ligne concernée. Je vous conseille de désactiverfinger
,pop
,ntalk
,talk
et tous les autres démons que vous n'utilisez pas. Nous avons décidé de laissertelnet
etftp
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 utilisateurguest
. Lancez d'abord Netscape une première fois en tant qu'utilisateurguest
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